From: Rob B. <sp...@ro...> - 2013-02-20 04:26:27
|
Hi: I have over 700 files in a folder on my camera and calling 'gp_filesystem_list_files()' takes a long time. I'd like to show the user that the operation is progressing. I'm calling this function in a worker thread, but I'd like to pulse a progress bar and also indicate how many files have been found as they are found. I have discovered that there are no calls to gp_context_progress_start()/gp_context_progress_update()/gp_context_progress_stop() while this file listing is in progress (I've determined this just by reading the source code, did not actually try it - so please correct me if I am wrong). I would like to add this functionality to my local copy of the gphoto2 source code, and perhaps have it committed back to the project for the next gphoto2 version. By stepping through the code (version 2.5.0), I've found that there is a loop over all the files in camlibs/ptp2/library.c in the file_list_func() with this loop: for (i = 0; i < params->nrofobjects; i++) { ... } So I'd like to put the progress update function inside this loop. I think the large majority of cameras I would support use the ptp2 camlib, so not adding this to other camlibs may be OK (or, am I wrong and that putting this in the camlib/ptp2 will cover all cameras). So any advice on the right way to do this, or whether or not a patch that I write to support this could be applied to the next version of gphoto2? Thanks, Rob Bresalier |
From: Marcus M. <ma...@je...> - 2013-02-20 09:08:21
|
On Tue, Feb 19, 2013 at 10:59:32PM -0500, Rob Bresalier wrote: > Hi: > > I have over 700 files in a folder on my camera and calling > 'gp_filesystem_list_files()' takes a long time. I'd like to show the user > that the operation is progressing. I'm calling this function in a worker > thread, but I'd like to pulse a progress bar and also indicate how many > files have been found as they are found. > > I have discovered that there are no calls > to gp_context_progress_start()/gp_context_progress_update()/gp_context_progress_stop() > while this file listing is in progress (I've determined this just by > reading the source code, did not actually try it - so please correct me if > I am wrong). > > I would like to add this functionality to my local copy of the gphoto2 > source code, and perhaps have it committed back to the project for the next > gphoto2 version. > > By stepping through the code (version 2.5.0), I've found that there is a > loop over all the files in camlibs/ptp2/library.c in the file_list_func() > with this loop: > > for (i = 0; i < params->nrofobjects; i++) { > ... > } > > So I'd like to put the progress update function inside this loop. > > I think the large majority of cameras I would support use the ptp2 camlib, > so not adding this to other camlibs may be OK (or, am I wrong and that > putting this in the camlib/ptp2 will cover all cameras). > > So any advice on the right way to do this, or whether or not a patch that I > write to support this could be applied to the next version of gphoto2? The ptp2 driver had this before (as it loaded stuff all at once) but currently does not have it after I added the on-demand loading. The problem is it should be closer to the place where time is spent... The loop here might be an OK place, but I suspect the initial time is really spent at the first ptp_object_want() (and the others use the cache). I have not much time right now, so please try ... you are at a good start :) Ciao, Marcus |