我是libgphoto2的新手,對實際圖像內存的位置有疑問。看來照片是通過一個名爲CameraFile
的對象來訪問的。源代碼中包含一個名爲sample-capture.c的示例,其中包含一個名爲capture_to_memory
的函數。gp_camera_file_get如何工作?
在該函數中,CameraFile對象是使用gp_file_new
創建和初始化的。 gp_file_new
的實現將創建一個CameraFile
對象,其accesstype成員設置爲GP_FILE_ACCESSTYPE_MEMORY
。
CameraFile
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的數據成員(與大小相同)。
那麼這個指針指向的內存在哪裏呢?它是在實際的相機?還是在我的公羊的某個地方?我只是儘量避免儘可能多的內存操作。我找到了一個不錯的博客張貼
http://sepharads.blogspot.com/2011/11/camera-tethered-capturing-using.html?m=1
其中通過gp_file_new_from_fd
創建CameraFile
對象。這將文件accesstype設置爲GP_FILE_ACCESSTYPE_FD
。當使用此accesstype在文件上調用gp_file_get_data_and_size
時,會分配新內存並將文件的數據複製到其中。但是,這是從磁盤讀取的,或者至少我認爲這是因爲FD意味着Unix文件描述符,並且它需要一個實際的文件名字符串。這是否意味着如果CameraFile的accestype爲GP_FILE_ACCESSTYPE_FD
,gp_camera_file_get
將數據讀入磁盤上的文件?
有一個函數叫做gp_file_free
。如果它是一個FD文件,它會關閉文件句柄,但它不會在任何地方調用free(file->data)
,所以我很困惑...
gp_camera_file_get
是做什麼用的?實施在那裏,但它有點扔我。它實際上是否將我的相機內存中的文件帶到了我的電腦內存中,並在內存中分配了CameraFile->data
?或者它只是讓我處理存儲在我的相機上的東西?
對不起,如果這是錯誤的地方問,我確實看到某種類型的libgphoto2郵件列表,但我不知道它是如何活躍。