- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 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_MEMORY
,gp_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_FD
,gp_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/
我是 libgphoto2 的新手,对实际图像内存的位置有一些疑问。照片似乎是通过一个名为 CameraFile 的对象访问的。源代码中包含一个名为 sample-capture.c 的示例,它有一个
我是一名优秀的程序员,十分优秀!