gpt4 book ai didi

c++ - gp_camera_file_get 是如何工作的?

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:56 24 4
gpt4 key购买 nike

我是 libgphoto2 的新手,对实际图像内存的位置有一些疑问。照片似乎是通过一个名为 CameraFile 的对象访问的。源代码中包含一个名为 sample-capture.c 的示例,它有一个名为 capture_to_memory 的函数。

在该函数中,使用 gp_file_new 创建并初始化了一个 CameraFile 对象。 gp_file_new 的实现创建了一个 CameraFile 对象,其 accesstype 成员设置为 GP_FILE_ACCESSTYPE_MEMORY

CameraFile 对象然后被传递给 gp_camera_file_get,我不太清楚这个函数发生了什么。

调用gp_camera_file_get后,文件被发送到gp_file_get_data_and_size。查看该函数的实现,假设文件访问类型为 GP_FILE_ACCESSTYPE_MEMORYgp_file_get_data_and_size 函数将不会分配任何内存,而只是将指针分配给 CameraFile 的数据成员(与大小相同)。

那么这个指针指向的内存在哪里呢?它是在实际的相机上吗?或者它在我的 ram 中的某个地方?我只是想尽可能多地避免内存操作。我发现了一篇不错的博文

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 文件描述符,并且它需要一个实际的文件名字符串。这是否意味着如果 CameraFile 的访问类型是 GP_FILE_ACCESSTYPE_FDgp_camera_file_get 会将数据读入磁盘上的文件?

有一个名为gp_file_free 的函数。如果它是 FD 文件,它会关闭文件句柄,但它不会在任何地方调用 free(file->data),所以我很困惑......

gp_camera_file_get 有什么作用?实现在那里,但它有点让我震惊。它实际上是将文件从我的相机内存带到我的计算机内存并在 ram 中分配 CameraFile->data 吗?还是它只是让我可以处理存储在相机上的某些内容?

抱歉,如果问错了地方,我确实看到了 libgphoto2 的某种邮件列表,但我不知道它有多活跃。

最佳答案

没关系,我想我已经找到了。

因此 gp_camera_file_get 最终调用 gp_filesystem_get_file,后者调用 gp_filesystem_get_file_impl。该函数查看 CameraFileType,如果它是 GP_FILE_TYPE_NORMAL(在我的例子中是这样),它会使用 CameraFileSystemFile 的实例调用 gp_file_copy作为来源。

如果 GP_FILE_ACCESSTYPE_MEMORY 是目标文件的访问类型,

gp_file_copy 最终调用 malloc,如果访问类型是 GP_FILE_ACCESSTYPE_FD<,则写入磁盘

然后,对gp_file_free 的调用会调用gp_file_clean,如果访问类型是GP_FILE_ACCESSTYPE_MEMORY,则调用free

关于c++ - gp_camera_file_get 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34050599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com