OSDN Git Service
(root)
/
handbrake-jp
/
handbrake-jp-git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
LinGui: fix library list for mingw with gstreamer enabled
[handbrake-jp/handbrake-jp-git.git]
/
libhb
/
dvdnav.c
diff --git
a/libhb/dvdnav.c
b/libhb/dvdnav.c
index
dfe847d
..
d525b96
100644
(file)
--- a/
libhb/dvdnav.c
+++ b/
libhb/dvdnav.c
@@
-142,10
+142,21
@@
static hb_dvd_t * hb_dvdnav_init( char * path )
{
hb_dvd_t * e;
hb_dvdnav_t * d;
{
hb_dvd_t * e;
hb_dvdnav_t * d;
+ int region_mask;
e = calloc( sizeof( hb_dvd_t ), 1 );
d = &(e->dvdnav);
e = calloc( sizeof( hb_dvd_t ), 1 );
d = &(e->dvdnav);
+ /* Log DVD drive region code */
+ if ( hb_dvd_region( path, ®ion_mask ) == 0 )
+ {
+ hb_log( "dvd: Region mask 0x%02x", region_mask );
+ if ( region_mask == 0xFF )
+ {
+ hb_log( "dvd: Warning, DVD device has no region set" );
+ }
+ }
+
/* Open device */
if( dvdnav_open(&d->dvdnav, path) != DVDNAV_STATUS_OK )
{
/* Open device */
if( dvdnav_open(&d->dvdnav, path) != DVDNAV_STATUS_OK )
{
@@
-425,7
+436,7
@@
static hb_title_t * hb_dvdnav_title_scan( hb_dvd_t * e, int t )
pgc = ifo->vts_pgcit->pgci_srp[pgcn-1].pgc;
pgc = ifo->vts_pgcit->pgci_srp[pgcn-1].pgc;
- hb_log("pgc_id: %d, pgn: %d: pgc:
0x%x
", pgcn, pgn, pgc);
+ hb_log("pgc_id: %d, pgn: %d: pgc:
%p
", pgcn, pgn, pgc);
if (pgn > pgc->nr_of_programs)
{
hb_error( "invalid PGN %d for title %d, skipping", pgn, t );
if (pgn > pgc->nr_of_programs)
{
hb_error( "invalid PGN %d for title %d, skipping", pgn, t );
@@
-452,7
+463,7
@@
static hb_title_t * hb_dvdnav_title_scan( hb_dvd_t * e, int t )
title->hours = title->duration / 90000 / 3600;
title->minutes = ( ( title->duration / 90000 ) % 3600 ) / 60;
title->seconds = ( title->duration / 90000 ) % 60;
title->hours = title->duration / 90000 / 3600;
title->minutes = ( ( title->duration / 90000 ) % 3600 ) / 60;
title->seconds = ( title->duration / 90000 ) % 60;
- hb_log( "scan: duration is %02d:%02d:%02d (%
lld
ms)",
+ hb_log( "scan: duration is %02d:%02d:%02d (%
"PRId64"
ms)",
title->hours, title->minutes, title->seconds,
title->duration / 90 );
title->hours, title->minutes, title->seconds,
title->duration / 90 );
@@
-577,12
+588,6
@@
static hb_title_t * hb_dvdnav_title_scan( hb_dvd_t * e, int t )
hb_list_add( title->list_audio, audio );
}
hb_list_add( title->list_audio, audio );
}
- if( !hb_list_count( title->list_audio ) )
- {
- hb_log( "scan: ignoring title (no audio track)" );
- goto fail;
- }
-
memcpy( title->palette,
ifo->vts_pgcit->pgci_srp[title_pgcn-1].pgc->palette,
16 * sizeof( uint32_t ) );
memcpy( title->palette,
ifo->vts_pgcit->pgci_srp[title_pgcn-1].pgc->palette,
16 * sizeof( uint32_t ) );
@@
-774,7
+779,7
@@
static hb_title_t * hb_dvdnav_title_scan( hb_dvd_t * e, int t )
chapter->minutes = ( seconds % 3600 ) / 60;
chapter->seconds = seconds % 60;
chapter->minutes = ( seconds % 3600 ) / 60;
chapter->seconds = seconds % 60;
- hb_log( "scan: chap %d c=%d->%d, b=%d->%d (%d), %
lld
ms",
+ hb_log( "scan: chap %d c=%d->%d, b=%d->%d (%d), %
"PRId64"
ms",
chapter->index, chapter->cell_start, chapter->cell_end,
chapter->block_start, chapter->block_end,
chapter->block_count, chapter->duration / 90 );
chapter->index, chapter->cell_start, chapter->cell_end,
chapter->block_start, chapter->block_end,
chapter->block_count, chapter->duration / 90 );
@@
-971,6
+976,7
@@
static int hb_dvdnav_read( hb_dvd_t * e, hb_buffer_t * b )
hb_dvdnav_t * d = &(e->dvdnav);
int result, event, len;
int chapter = 0;
hb_dvdnav_t * d = &(e->dvdnav);
int result, event, len;
int chapter = 0;
+ int error_count = 0;
while ( 1 )
{
while ( 1 )
{
@@
-982,8
+988,21
@@
static int hb_dvdnav_read( hb_dvd_t * e, hb_buffer_t * b )
if ( result == DVDNAV_STATUS_ERR )
{
hb_log("dvdnav: Read Error, %s", dvdnav_err_to_string(d->dvdnav));
if ( result == DVDNAV_STATUS_ERR )
{
hb_log("dvdnav: Read Error, %s", dvdnav_err_to_string(d->dvdnav));
- return 0;
+ if (dvdnav_sector_search(d->dvdnav, 1, SEEK_CUR) != DVDNAV_STATUS_OK)
+ {
+ hb_error( "dvd: dvdnav_sector_search failed - %s",
+ dvdnav_err_to_string(d->dvdnav) );
+ return 0;
+ }
+ error_count++;
+ if (error_count > 10)
+ {
+ hb_log("dvdnav: Error, too many consecutive read errors");
+ return 0;
+ }
+ continue;
}
}
+ error_count = 0;
switch ( event )
{
case DVDNAV_BLOCK_OK:
switch ( event )
{
case DVDNAV_BLOCK_OK: