Как работает gp_camera_file_get?

Я новичок в libgphoto2 и у меня были некоторые вопросы о том, где находится фактическая память изображений. Похоже, что фотографии доступны через объект, называемый CameraFile, Есть пример, включенный в источник с именем sample-capture.c, который имеет функцию с именем capture_to_memory,

В этой функции объект CameraFile создается и инициализируется с использованием gp_file_new, Реализация gp_file_new создает CameraFile объект, член accesstype которого установлен в GP_FILE_ACCESSTYPE_MEMORY,

Тот CameraFile Затем объект передается gp_camera_file_getи мне не очень понятно, что происходит в этой функции.

После звонка gp_camera_file_getфайл отправлен gp_file_get_data_and_size, Глядя на реализацию этой функции, и учитывая, что файлы accesstype 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 вызывается для файла с этим accesstype, выделяется новая память и данные файла копируются в него. Тем не менее, это чтение с диска, или, по крайней мере, я предполагаю, что это так, поскольку FD означает дескриптор файла Unix, и ему нужна фактическая строка имени файла. Означает ли это, что gp_camera_file_get считывает данные в файл на диске, если AcceSpepe CameraFile GP_FILE_ACCESSTYPE_FD?

Есть функция под названием gp_file_free, Если это файл FD, он закрывает дескриптор файла, но не вызывает free(file->data) где угодно, так что я в замешательстве …

Что значит gp_camera_file_get делать? Реализация есть, но это как-то меня бросило. Действительно ли он переносит файл из памяти моей камеры в память моего компьютера и выделяет CameraFile->data в баран? Или это просто дает мне справку с чем-то, хранящимся на моей камере?

Извините, если это неправильное место, чтобы спросить, я видел какой-то список рассылки для libgphoto2, но я не мог сказать, насколько это было активно.

1

Решение

Неважно, я думаю, что нашел это.

Так gp_camera_file_get в итоге звонит gp_filesystem_get_file, который вызывает gp_filesystem_get_file_impl, Эта функция смотрит на CameraFileTypeи если это GP_FILE_TYPE_NORMAL (что это, в моем случае), это вызывает gp_file_copy с экземпляром CameraFileSystemFile в качестве источника.

gp_file_copy в итоге звонит malloc если GP_FILE_ACCESSTYPE_MEMORY является accesstype файла назначения и записывает на диск, если accesstype GP_FILE_ACCESSTYPE_FD,

Затем вызов gp_file_free звонки gp_file_clean, который вызывает free если доступный GP_FILE_ACCESSTYPE_MEMORY,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]