Hi, you fixed it! It’s working beautifully now, thank you both :)
Best regards Marius Steffen mar...@mariussteffen.de > Am 07.01.2019 um 09:19 schrieb Marcus Meissner <mar...@jet.franken.de>: > > Hi, > > can you try test patch below? (did not test myself as i have to leave for > work ;) > > Ciao, Marcus > On Mon, Jan 07, 2019 at 08:53:04AM +0100, Marcus Meissner wrote: >> Hi, >> >> Hmm, I was hoping this was not the case, but well. >> >> I implemented related code for Canon EOS, I will do such a thing for Nikon >> too. >> >> Ciao, Marcus >> On Mon, Jan 07, 2019 at 07:29:04AM +0000, Horshack wrote: >>> I didn't realize libgphoto2 issued such large MTP object read requests. >>> That is most likely the issue. When I was developing airnef >>> (http://testcams.com/airnef/) I discovered an intermittent bug on Nikon's >>> MTP implementation that caused it to randomly hang during large MPT object >>> read requests. The first symptom was the transfer would start to slow, and >>> then eventually would stop and time out. I attributed the issue to a heap >>> issue inside the camera's firmware, based on some experimentation trying >>> varying-sized MTP requests. The solution I implemented was a configurable >>> per-transfer size limit, with a default of 1MB - based on my testing that >>> yielded the max throughput (same as larger sizes) while still avoiding the >>> Nikon firmware issue. >>> >>> Here's the comment from my airnef code: >>> >>> # >>> # When I first wrote this routine I was experiencing very flaky wireless >>> behavior from >>> # all Nikon bodies I tested it with (D7200, J4, D750, WU-1a). About halfway >>> through a >>> # NEF download via MTP_OP_GetObject the transfer rate would become erratic >>> and sometimes >>> # the camera would completely stop transferring and then eventually time >>> out on a socket >>> # receive. It wouldn't do this on every file but about once every few >>> files. To handle >>> # this behavior I added significant amounts of recovery logic, both in the >>> low-levels >>> # of mtpwifi.py and the upper levels of this module (appMain), both of >>> which were designed >>> # to retain any partially transferred data and allow the retry of >>> downloads. Luckily when >>> # a Nikon body hits this condition it could be revived by dropping the >>> TCP/IP connection >>> # and restarting everything over again, from the opening of the TCP/IP >>> socket through the >>> # MTP start session and back to this routine to retrieve the portion of the >>> file we have >>> # left to download via MTP_OP_GetPartialObject. >>> # >>> # It later occurred to me that the issue might be specific to Nikon's >>> implementation of >>> # MTP_OP_GetObject, as it appeared the camera's erratic behavior was >>> related to how large >>> # the object was - JPEGs were fine but larger NEFs should issues and very >>> large MOV >>> # files were the worst. It seemed the camera has some type of memory leak >>> associated with >>> # the command, perhaps committing internal resources to the entire file >>> rather than to each >>> # payload piece. So I experimented with transfers that relied solely >>> MTP_OP_GetPartialObject, >>> # using various transfer sizes, and confirmed my suspicion - there's a bug >>> in Nikon's firmware >>> # related to large transfers, both from the atomic MTP_OP_GetObject request >>> and also >>> # large MTP_OP_GetPartialObject requests. Based on these results I rewrote >>> this method >>> # to use only MTP_OP_GetPartialObject and with smaller transfer sizes and >>> all the erratic >>> # Nikon behavior disappeared. Fortunately performance did not suffer - I >>> found that using >>> # a transfer size of 1MB (vs the full object size in the orig >>> implementation) yielded the >>> # same performance as the latter, and actually much better when you >>> consider that we didn't >>> # have to go through time-consuming connection tear-downs and >>> re-establishment cycles. On >>> # both my D7200 and J4 I see approx 2.3 MB/s of sustained xfer performance >>> on the adhoc wifi >>> # conneciton when the camera is next to the computer. >>> # >>> >>> Adam >>> >>> >>> ________________________________ >>> From: Marius Steffen <mar...@mariussteffen.de> >>> Sent: Sunday, January 6, 2019 4:38 PM >>> To: Horshack >>> Cc: Marcus Meissner; gphoto-devel@lists.sourceforge.net; Marcus Meissner >>> Subject: Re: [gphoto-devel] PTP/IP RAW download stalling gphoto2 >>> >>> Hi, >>> >>> You’re right, of course - the size seems to be the problem indeed. >>> Even with the patch applied, the problem persists. But the results are >>> interesting: neither is the file completely downloaded, nor does it always >>> stall at the same position, as you can see in the following lines acquired >>> from multiple test runs: >>> >>> 40.717975 ptp_ptpip_generic_read (2): reading at offset 31297528, >>> reading 13983496 bytes >>> 41.232571 ptp_ptpip_generic_read (2): reading at offset 38903800, >>> reading 6360451 bytes >>> 36.434165 ptp_ptpip_generic_read (2): reading at offset 37052408, >>> reading 8150851 bytes >>> 35.296001 ptp_ptpip_generic_read (2): reading at offset 30875640, >>> reading 14042982 bytes >>> >>> Best regards >>> >>> Marius Steffen >>> mar...@mariussteffen.de >>> >>> >>> >>>> Am 06.01.2019 um 19:35 schrieb Horshack <horsh...@live.com>: >>>> >>>> The fact it fails with uncompressed or lossless compressed NEFs but not >>>> lossy compressed NEFs hints the issue may be related to files above a >>>> certain size, as the lossy version will be smallest of the three options. >>>> You can prove/disprove this by trying a lossless compressed NEF shot in DX >>>> area mode, which will be smaller than the FX version. >>>> >>>> Adam >>>> >>>> On Jan 6, 2019, at 10:28 AM, Marcus Meissner <meiss...@suse.de> wrote: >>>> >>>>> Hi, >>>>> >>>>> Yes, it is very likely an issue in libgphoto2. >>>>> >>>>> If you download the NEF over USB, is the end bytes also the bytes below? >>>>> >>>>> One other things is that the camera might expect us polling the event fd >>>>> too, >>>>> can you try the following patch, it has both more debug and also checking >>>>> for events inbetween reads. >>>>> >>>>> Ciao, Marcus >>>>> >>>>> >>>>> >>>>> On Sun, Jan 06, 2019 at 06:07:15PM +0100, Marius Steffen wrote: >>>>>> Hi, >>>>>> >>>>>> strange - though, IIRC on my old D5500 everything was working, too. >>>>>> I suspected SnapBridge at first, but using „qDslrDashboard“, which isn’t >>>>>> using libgphoto2 (at least it doesn’t link against the dylib), I’m able >>>>>> to successfully download the RAW file. >>>>>> >>>>>> It’s hanging after the 0490 line - though there were more of this data >>>>>> dump blocks for the .NEF, this is the last one. I can’t really tell how >>>>>> much of the .NEF is already received, but looking the time elapsed and >>>>>> the size of the log, I suspect it’s (almost) completely read. >>>>>> >>>>>> The camera is turned on the whole time. >>>>>> >>>>>> I’m using libgphoto2 in an application, with exactly the same problem >>>>>> (so the problem’s probably not in gphoto2 CLI, but libgphoto2) - >>>>>> according to the debugger, it’s stalled at read. >>>>>> >>>>>> Best regards >>>>>> >>>>>> Marius Steffen >>>>>> mar...@mariussteffen.de >>>>>> >>>>>> >>>>>> >>>>>>> Am 06.01.2019 um 17:19 schrieb Marcus Meissner <mar...@jet.franken.de>: >>>>>>> >>>>>>> On Fri, Jan 04, 2019 at 04:39:27AM +0100, Marius Steffen wrote: >>>>>>>> Hi, >>>>>>>> >>>>>>>> I’m having problems downloading RAW images from my Nikon D850, >>>>>>>> connected via PTP/IP. >>>>>>>> The camera is configured in RAW+JPEG(Basic) S mode, so gphoto2 >>>>>>>> transfers the JPEG file first, which succeeds. >>>>>>>> Afterwards, it is downloading the RAW file, but never finishes - >>>>>>>> instead, at some point, it freezes, the camera finally disconnects >>>>>>>> (without gphoto2 noticing). >>>>>>>> Only manually aborting gphoto2 is shutting it down, without ever >>>>>>>> saving the RAW file. >>>>>>>> >>>>>>>> I’ve done some tests, and only ever observed this behavior when using >>>>>>>> „Lossless compressed“ or „Uncompressed“ RAW file compression settings. >>>>>>>> „Compressed“ (= lossy compression) seems to work though. >>>>>>>> >>>>>>>> I’d like to have this fixed, and am willing to help of course, as this >>>>>>>> leads to crashing my cameras WiFi, which then has to be turned on >>>>>>>> again using SnapBridge. >>>>>>>> >>>>>>>> I’ve attached the relevant log file, without the image data; the last >>>>>>>> part in the full log is something like: >>>>>>>> >>>>>>>> 36.773805 ptp_ptpip_generic_read (3): ptpip/generic_read data: >>>>>>>> (hexdump of 1176 bytes) >>>>>>>> 0000 f3 ef df df cf cf 6f df-5f 4f 4f df 7f df bd 7f ......o._OO..... >>>>>>>> 0010 7f 7e fb f3 db ef 4f bd-ff 7e fc f4 fd fd fc fb .~....O..~...... >>>>>>>> 0020 d3 db 9b d3 8f ef 6f bf-3d fe fb f7 f3 db f3 8f ......o.=....... >>>>>>>> 0030 f7 db f3 ef cf cf df bd-ff 7d 3e fb 93 ef bd b8 .........}>..... >>>>>>>> 0040 bd 3e f7 fb f3 f3 f3 f7-f7 f7 f3 ef df bf 3e f6 .>............>. >>>>>>>> 0050 fc f5 fb db f7 d7 f7 db-d3 f3 93 ef 5f cf df bf ............_... >>>>>>>> 0060 3f 7f 3e fb f3 f7 f7 ef-bd 7f 3d bf 7f 3f 7f 7d ?.>.......=..?.} >>>>>>>> 0070 7f 7d bd 7d 7f 3f 7f 7f-7f 7f 3d 7e fd fd f7 fb .}.}.?....=~.... >>>>>>>> 0080 f3 f3 f3 f3 ef df bf 3d-7f 7d bf 7e fc fd fb ef .......=.}.~.... >>>>>>>> 0090 bd 7f 3e fb db f7 d7 f3-ef cf b9 3f 7f 3e f5 fd ..>........?.>.. >>>>>>>> 00a0 fb f3 f7 ef bf 7e fc fd-fb d7 ef be e2 fd e5 fc .....~.......... >>>>>>>> 00b0 fb ef bd bf 7d 7d 3e e4-fc fb f7 f3 ef cf df 6f ....}}>........o >>>>>>>> 00c0 cf 4f bd bf 38 3f 72 38-fe e5 fb f3 d7 ef be fb .O..8?r8........ >>>>>>>> 00d0 8f ef bf 7d fd 7f 7f 7e-fb f3 ef df be fb ef df ...}...~........ >>>>>>>> 00e0 be fc fd f7 f5 fc fd f5-f5 fb f7 f7 ef df bd 3e ……………> >>>>>>>> <SNIP> >>>>>>>> 0490 f3 9f f7 d7 ef df 4f 4f- ......OO >>>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> I have tried reproducing this with the Nikon D750 and Nikon Z6 over >>>>>>> Wifi, >>>>>>> but failed... it downloads both JPG and uncompressed RAW. >>>>>>> >>>>>>> How much data has been read from the NEF file at above step? >>>>>>> >>>>>>> Is there another try to read after the 0490 ... line, or does it hang >>>>>>> right there? >>>>>>> >>>>>>> Does it hang there with the camera still on? >>>>>>> >>>>>>> >>>>>>> Can you attach gdb and check if it is hanging somewhere besides read? >>>>>>> >>>>>>> Ciao, Marcus >>>>>> >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> Gphoto-devel mailing list >>>>>> Gphoto-devel@lists.sourceforge.net >>>>>> https://lists.sourceforge.net/lists/listinfo/gphoto-devel >>>>> >>>>> -- >>>>> Marcus Meissner,SUSE LINUX GmbH; Maxfeldstrasse 5; D-90409 Nuernberg; Zi. >>>>> 3.1-33,+49-911-740 53-432,,serv=loki,mail=wotan,type=real >>>>> <meiss...@suse.de> >>>>> <xx.pat> >>>>> _______________________________________________ >>>>> Gphoto-devel mailing list >>>>> Gphoto-devel@lists.sourceforge.net >>>>> https://lists.sourceforge.net/lists/listinfo/gphoto-devel >>> >> >> >> _______________________________________________ >> Gphoto-devel mailing list >> Gphoto-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/gphoto-devel > <xx.pat>_______________________________________________ > Gphoto-devel mailing list > Gphoto-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/gphoto-devel _______________________________________________ Gphoto-devel mailing list Gphoto-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gphoto-devel