Я новичок в 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
затем передается в 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
. Это устанавливает файлы accesstype в GP_FILE_ACCESSTYPE_FD
. Когда gp_file_get_data_and_size
вызывается в файле с этим accesstype, выделяется новая память и данные файла копируются в нее. Тем не менее, это считывается с диска или, по крайней мере, я предполагаю, что это означает, что FD означает Unix File Descriptor, и ему нужна фактическая строка имени файла. Означает ли это, что gp_camera_file_get
считывает данные в файл на диске, если атрибут CameraFile равен GP_FILE_ACCESSTYPE_FD
?
Существует функция, называемая gp_file_free
. Если это файл FD, он закрывает дескриптор файла, но он не вызывает free(file->data)
в любом месте, поэтому я довольно смущен ...
Что делает gp_camera_file_get
? Реализация там, но это меня бросило. Действительно ли это приводит файл из памяти моей камеры в память моего компьютера и выделяет CameraFile->data
в ram? Или это просто дает мне ручку тому, что хранится на моей камере?
Извините, если это не подходящее место, я просмотрел какой-то список рассылки для libgphoto2, но я не мог сказать, насколько он активен.