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