我是 libgphoto2 的新手,对实际图像内存的位置有一些疑问。似乎照片是通过一个名为 a 的对象访问的CameraFile
。源代码中包含一个名为 sample-capture.c 的示例,该示例具有一个名为 的函数capture_to_memory
。
在该函数中,使用创建和初始化 CameraFile 对象gp_file_new
。的实现gp_file_new
创建了一个CameraFile
访问类型成员设置为 的对象GP_FILE_ACCESSTYPE_MEMORY
。
CameraFile
然后将该对象传递给,我gp_camera_file_get
不太清楚这个函数中发生了什么。
在调用 to 之后gp_camera_file_get
,文件被发送到gp_file_get_data_and_size
. 查看该函数的实现,并假设文件访问类型为GP_FILE_ACCESSTYPE_MEMORY
,该gp_file_get_data_and_size
函数不会分配任何内存,而只是将指针分配给 CameraFile 的数据成员(与大小相同)。
那么这个指针指向的内存在哪里呢?是在真机上吗?或者它在我的公羊的某个地方?我只是试图避免尽可能多的内存操作。我发现了一篇不错的博文
http://sepharads.blogspot.com/2011/11/camera-tethered-capturing-using.html?m=1
对象是CameraFile
通过gp_file_new_from_fd
. 这会将文件访问类型设置为GP_FILE_ACCESSTYPE_FD
. 当gp_file_get_data_and_size
在具有此访问类型的文件上调用时,将分配新内存并将文件的数据复制到其中。但是,这是从磁盘读取的,或者至少我认为这是因为 FD 表示 Unix 文件描述符,并且它需要一个实际的文件名字符串。这是否意味着gp_camera_file_get
如果 CameraFile 的访问类型为 ,则将数据读入磁盘上的文件GP_FILE_ACCESSTYPE_FD
?
有一个函数叫做gp_file_free
. 如果它是一个 FD 文件,它会关闭文件句柄,但它不会free(file->data)
在任何地方调用,所以我很困惑......
做什么gp_camera_file_get
?实现就在那里,但它有点让我失望。它实际上是否将文件从我的相机内存带到我的计算机内存并CameraFile->data
在内存中分配?还是它只是让我处理存储在相机上的东西?
抱歉,如果问错了地方,我确实看到了 libgphoto2 的某种邮件列表,但我不知道它有多活跃。