1 /* $Id: HBDVDReader.cpp,v 1.7 2003/08/12 20:10:50 titer Exp $ */
4 #include "HBDVDReader.h"
8 #include <Application.h>
10 #include <dvdread/ifo_types.h>
11 #include <dvdplay/dvdplay.h>
12 #include <dvdplay/info.h>
13 #include <dvdplay/state.h>
14 #include <dvdplay/nav.h>
16 HBDVDReader::HBDVDReader( HBManager * manager,
17 HBTitleInfo * titleInfo )
18 : HBThread( "dvdreader", B_NORMAL_PRIORITY )
21 fTitleInfo = titleInfo;
24 void HBDVDReader::DoWork()
28 vmg = dvdplay_open( fTitleInfo->fDevice, NULL, NULL );
31 Log( "HBDVDReader: dvdplay_open() failed" );
37 dvdplay_start( vmg, fTitleInfo->fIndex );
41 int beginPosition = dvdplay_position( vmg );
42 int endPosition = dvdplay_title_end( vmg );
43 while( dvdplay_position( vmg ) < endPosition )
45 dvdBuffer = new HBBuffer( DVD_VIDEO_LB_LEN );
46 dvdBuffer->fPosition = (float) ( dvdplay_position( vmg ) - beginPosition ) /
47 (float) ( endPosition - beginPosition ) ;
49 if( dvdplay_read( vmg, dvdBuffer->fData, 1 ) < 0 )
51 Log( "HBDVDReader: could not dvdplay_read()" );
56 if( !( fTitleInfo->fPSFifo->Push( dvdBuffer ) ) )
62 if( dvdplay_position( vmg ) == dvdplay_title_end( vmg ) )