Re: Error when downloading image directly from memory card
Peter Sonander <[email protected]> Sun, 21 Nov 2021 11:04:24 +0100
| Newsgroups | gmane.comp.multimedia.gphoto.user |
|---|---|
| Organization | S-Bilder |
| Message-ID | <[email protected]> |
Thanks Marcus for digging into this. These are my findings so far
If I do not initialize the camera file system my self it behaves like
this:
Before capturing a new photo:
gp_camera_file_get_info returns 0 for .info.fields
File is downloaded but returns this 'gp_filesystem_get_file
(camera->fs, folder, file, type, camera_file, context)' failed: -107
After a photo has been captured:
gp_camera_file_get_info returns 165 for .info.fields
File is downloaded with no errors
When the capture is done you notice there is a full scan of the
memory card done.
If I instead run the code below right after gp_camera_init but before
setting applicationmode to 1 it works almost all the time. I found some
cases where if I abort (Ctrl-C) the program and restart where it doesn't
work, but it always works if I capture a new photo :)
static void init_fs(Camera *camera, GPContext *context, char *path) {
CameraList *list;
int i, retval, folderCount;
const char *value;
retval = gp_list_new( &list );
retval = gp_filesystem_list_folders( camera->fs, path, list,
context);
folderCount = gp_list_count( list );
for (i=0; i<folderCount; i++) {
gp_list_get_name( list, i, &value );
char newPath[strlen(path) + strlen(value)];
strcpy(newPath, path);
if (strcmp(path, "/")!=0) {
strcat(newPath, "/");
}
strcat(newPath, value);
init_fs(camera, context, newPath);
}
}
called like this: init_fs(camera, context, "/");
All tries to download a photo is done from the GP_EVENT_FILE_CHANGED
event.
Thanks
Peter
On 2021-11-20 16:03, Marcus Meissner wrote:
> Hi,
>
> It is actually a more interesting problem...
>
> If we switch the camera to application mode, it no longer returns a
> filesystem.
>
> $ gphoto2 --set-config applicationmode=1 --wait-event=1s -L
> Waiting for 1 seconds for events from camera. Press Ctrl-C to abort.
> UNKNOWN PTP StoreRemoved, Param1 00010001
> There is no file in folder '/'.
> $
>
> The storage is "semi visible", e.g. if we access the filehandle from
> the "changed" event, it can be accessed.
>
> But as the filesystem does not see the storage in the storageids
> index, it cannot find the right path.
>
>
> I need to think a bit on how to handle this... :/
>
>
> (A workaround would be on receipt of "file changed" to switch off
> application mode, wait for the StoreAdded event, get the file, switch
> on application mode, and go back to polling.)
>
> Ciao, Marcus
>
> On Tue, Nov 16, 2021 at 06:40:13PM +0100, Marcus Meissner wrote:
>> Hi,
>>
>> There probably is a bug in the dynamic fileyystem ifc this shows up, I
>> am currently travelling, perhaps I can reproduce and take a look at
>> this
>> on Thursday.
>>
>> Ciao, Marcus
>> On Sun, Nov 14, 2021 at 05:16:03PM +0100, Peter Sonander wrote:
>> > Hi
>> >
>> > I have created a small C program which is waiting for the file changed event
>> > and if the file has been write protected it is download to my computer. This
>> > works if I first take a new photo by pressing the shutter button, but not if
>> > I start the program and directly protects an image.
>> >
>> > When I take the first photo with the program started it looks like there is
>> > a file system built as a part of the file added event, but this does not
>> > happen when the file changed event is happening. How can I make the
>> > filesystem build to happen either on connection established or when I want
>> > to download a photo?
>> >
>> > This is the debug trace when trying to download a photo without first have
>> > captured an image during the session
>> >
>> > nikon eventex 0: code 0x4007, params 1
>> > event.Code is 4007 / param 921076e
>> > Sending PTP_OC 0x1008 (Get object info) (0x921076e) request...
>> > Reading PTP_OC 0x1008 (Get object info) data...
>> > Reading PTP_OC 0x1008 (Get object info) response...
>> > (10001,11210000,/store_00010001/)
>> > Sending PTP_OC 0x1008 (Get object info) (0x11210000) request...
>> > Reading PTP_OC 0x1008 (Get object info) data...
>> > Reading PTP_OC 0x1008 (Get object info) response...
>> > (10001,11004000,/store_00010001/)
>> > Sending PTP_OC 0x1008 (Get object info) (0x11004000) request...
>> > Reading PTP_OC 0x1008 (Get object info) data...
>> > Reading PTP_OC 0x1008 (Get object info) response...
>> > (10001,0,/store_00010001/)
>> > resetting filesystem
>> > Clearing fscache LRU list...
>> > fscache LRU list already empty
>> > Internally deleting all folders from '/'...
>> > Lookup folder '/'...
>> > Found! / is 0x1f08468
>> > Recurse delete folder 0x1f08468//
>> > Delete all files in folder 0x1f08468//
>> > Lookup folder /store_00010001/DCIM/132ND500 file D50_1902.NEF
>> > Lookup folder '/store_00010001/DCIM/132ND500'...
>> > Folder / is dirty. Listing folders in there to make folder clean...
>> > Listing folders in /
>> > Lookup folder '/'...
>> > Found! / is 0x1f08468
>> > ... is dirty, getting from camera
>> > folder_list_func(/)
>> > Internally deleting all folders from '/'...
>> > Lookup folder '/'...
>> > Found! / is 0x1f08468
>> > Recurse delete folder 0x1f08468//
>> > Folder / contains 0 subfolders.
>> > Done making folder / clean...
>> > File changed on camera: /store_00010001/DCIM/132ND500 / D50_1902.NEF
>> > Getting file info for 'D50_1902.NEF' in '/store_00010001/DCIM/132ND500'...
>> > Getting information about 'D50_1902.NEF' in
>> > '/store_00010001/DCIM/132ND500'...
>> > Lookup folder /store_00010001/DCIM/132ND500 file D50_1902.NEF
>> > Lookup folder '/store_00010001/DCIM/132ND500'...
>> > Downloading ./images/D50_1902.NEF
>> > Getting file 'D50_1902.NEF' in folder '/store_00010001/DCIM/132ND500'...
>> > Getting file 'D50_1902.NEF' from folder '/store_00010001/DCIM/132ND500'
>> > (type 1)...
>> > Lookup folder /store_00010001/DCIM/132ND500 file D50_1902.NEF
>> > Lookup folder '/store_00010001/DCIM/132ND500'...
>> > Download of 'D50_1902.NEF' from '/store_00010001/DCIM/132ND500' (type 1)
>> > failed. Reason: 'Directory not found'
>> > 'gp_filesystem_get_file (camera->fs, folder, file, type, camera_file,
>> > context)' failed: -107
>> > Failed to download ./images/D50_1902.NEF
>> >
>> > Thanks for the support
>> >
>> > --
>> > Med vänlig hälsning
>> > Peter Sonander
>> > S-Bilder
>> > [email protected]
>> >
>> > http://s-bilder.se
>> > Facebook: https://fb.me/sbilder.se/
>> > Instagram: @FotografPeterSonander
>>
>>
>> > _______________________________________________
>> > Gphoto-user mailing list
>> > [email protected]
>> > https://lists.sourceforge.net/lists/listinfo/gphoto-user
>>
>>
>>
>> _______________________________________________
>> Gphoto-user mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/gphoto-user
_______________________________________________
Gphoto-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gphoto-user