RE: how Helix deal with the scenarion that ausbdisk is pluged out during playback?
"Zhao, Halley" <[email protected]>
| Newsgroups | gmane.comp.multimedia.helix.devel |
|---|---|
| Message-ID | <094BCE01AFBE9646AF220B0B3F367AAB03499AE5@pdsmsx413.ccr.corp.intel.com> |
Another step forward. If I take (m_ulSize == 0) as corrupt file in CheckForCorruptFile(). Then mp3 could be handled gracefully in this scenario-- report error and stop the playback, then you could open another stream for playback. But for rmvb, I got an assert fail in File: intrstrm.cpp, Line 1288. ( I use debug version here). More debug needed. >-----Original Message----- >From: Zhao, Halley >Sent: 2008年7月16日 15:00 >To: Zhao, Halley; [email protected]; [email protected] >Subject: RE: [Helix-client-dev] how Helix deal with the scenarion that >ausbdisk is pluged out during playback? > > I haven't fixed the issue, but got some clue: > 1. memory map is used for file-io, see common/fileio/mmapmgr.cpp. > In GetBlock(), the pBuffer is calculated from the page information, >it may be invalid, then when there is a memcpy(), it will crash the engine. > On Windows system, it used ::IsBadReadPtr()to catch the exception as >early as possible. But there is no such check (error handle) for Linux >platform. > 2. I tried to find some code works like IsBadReadPtr(), and wrap that >in mmapmgr.cpp. see attachment. That works some to me, but need more debug. > 3. after some try above, I found some other issue in smplfsys.cpp > In function CheckForCorruptFile(), I found it fail to determine it is >a corrupt file because m_ulSize equals to 0. it is unexpected. > > BR > > > >-----Original Message----- > >From: [email protected] > >[mailto:[email protected]] On Behalf Of >Zhao, > >Halley > >Sent: 2008年7月16日 8:40 > >To: [email protected]; [email protected] > >Subject: RE: [Helix-client-dev] how Helix deal with the scenarion that > >ausbdisk is pluged out during playback? > > > > I met the same symptom as you. > > Smplfsys think it has got enough data without error. > > > > Where is the IHXDataFile for Linux system? Is it > >common/fileio/bufdataf.cpp? > > > > > > >-----Original Message----- > > >From: Eric Hyche [mailto:[email protected]] > > >Sent: 2008年7月15日 22:32 > > >To: Zhao, Halley; [email protected] > > >Subject: RE: [Helix-client-dev] how Helix deal with the scenarion >that > >a > > >usbdisk is pluged out during playback? > > > > > > > > >Halley, > > > > > >Extensive work was done in filesystem/local/full/smplfsys.cpp > > >to handle cases when the underlying IHXDataFile object > > >returns 0 bytes of returns less than requested (or returns > > >an error). > > > > > >However, in your case, it looks like the IHXDataFile > > >is saying it returned enough data, so the code to > > >handle these cases in smplfsys.cpp is not being > > >triggered. > > > > > >When the USB disk is unplugged, what is the behavior > > >of the IHXDataFile? Does it return 0 bytes when a > > >::Read() is requested? Does it return an error via > > >IHXDataFile::GetLastError()? > > > > > >Eric > > > > > >============================================= > > >Eric Hyche ([email protected]) > > >Technical Lead > > >RealNetworks, Inc. > > > > > >> -----Original Message----- > > >> From: [email protected] > > >> [mailto:[email protected]] On > > >> Behalf Of Zhao, Halley > > >> Sent: Monday, July 14, 2008 5:45 AM > > >> To: [email protected] > > >> Subject: [Helix-client-dev] how Helix deal with the scenarion > > >> that a usbdisk is pluged out during playback? > > >> > > >> When Helix player is playing content on USB disk, then user > > >> unplug the USB disk, helix engine will crash in such scenario. > > >> > > >> I test it for helix-player and player_gtk_test on Linux, > > >> helix engine will crash in such scenario. > > >> > > >> On Windows system, Realplayer works well in such scenario, > > >> the presentation stopped, but you could open another stream. > > >> > > >> > > >> > > >> When I looked into some source code at > > >> filesystem/local/full/smplfsys.cpp, > > >> > > >> I found there seems to be some function to deal with such > > >> scenario: CheckForCorruptFile(). > > >> > > >> However, when I try to debug it, I found the function isn't > > >> invoked in the scenario above. > > >> > > >> > > >> > > >> And I found after the last call to FinishDoRead(), the engine >crash. > > >> > > >> But in this last call, for the condition sentence to > > >> CheckForCorruptFile(): > > >> > > >> if (!pBuffer || actual < m_ulPendingReadCount) > > >> > > >> > > >> > > >> the pBuffer is valid and actual = 2048, and > > >> m_ulPendingReadCount = 2048. > > >> > > >> > > >> > > >> I think the scenario should be a common error handle for > > >> source plugin, > > >> > > >> Did anybody meet such issue before? Or maybe someone fix it > > >> in other branch? > > >> > > >> > > >> > > >> BR > > >> > > >> > > >> > > >> > > >> > > >> > > >> > > >> ZHAO, Halley (Aihua) > > >> > > >> Email: [email protected] <mailto:[email protected]> > > >> > > >> Tel: +86(21)61166476 > > >> > > >> iNet: 8821-6476 > > >> > > >> SSG/OTC/UMD > > >> > > >> > > >> > > >> > > > > > >_______________________________________________ > >Helix-client-dev mailing list > >[email protected] > >http://lists.helixcommunity.org/mailman/listinfo/helix-client-dev _______________________________________________ Helix-client-dev mailing list [email protected] http://lists.helixcommunity.org/mailman/listinfo/helix-client-dev