OSDN Git Service

Getting rid of dvd open failure error, it is not an error when
[handbrake-jp/handbrake-jp-git.git] / libhb / dvd.c
index 3c78e2c..3cfc1b9 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id: dvd.c,v 1.12 2005/11/25 15:05:25 titer Exp $
 
    This file is part of the HandBrake source code.
-   Homepage: <http://handbrake.m0k.org/>.
+   Homepage: <http://handbrake.fr/>.
    It may be used under the terms of the GNU General Public License. */
 
 #include "hb.h"
@@ -83,7 +83,10 @@ hb_dvd_t * hb_dvd_init( char * path )
     /* Open device */
     if( !( d->reader = DVDOpen( path ) ) )
     {
-        hb_error( "dvd: DVDOpen failed (%s)", path );
+        /*
+         * Not an error, may be a stream - which we'll try in a moment.
+         */
+        hb_log( "dvd: not a dvd - trying as a stream/file instead" );
         goto fail;
     }
 
@@ -868,11 +871,14 @@ int hb_dvd_read( hb_dvd_t * d, hb_buffer_t * b )
             }
             else
             {
-                hb_log( "dvd: Beginning of Cell (%d) at block %d", d->cell_cur,
-                       d->block );
+                if ( d->block != d->pgc->cell_playback[d->cell_cur].first_sector )
+                {
+                    hb_log( "dvd: beginning of cell %d at block %d", d->cell_cur,
+                           d->block );
+                }
                 if( d->in_cell )
                 {
-                    hb_error( "dvd: Assuming missed End of Cell (%d)", d->cell_cur );
+                    hb_error( "dvd: assuming missed end of cell %d", d->cell_cur );
                     d->cell_cur  = d->cell_next;
                     d->next_vobu = d->pgc->cell_playback[d->cell_cur].first_sector;
                     FindNextCell( d );
@@ -895,8 +901,12 @@ int hb_dvd_read( hb_dvd_t * d, hb_buffer_t * b )
         if( ( dsi_pack.vobu_sri.next_vobu & (1 << 31 ) ) == 0 ||
             ( dsi_pack.vobu_sri.next_vobu & 0x3fffffff ) == 0x3fffffff )
         {
-            hb_log( "dvd: End of Cell (%d) at block %d", d->cell_cur,
-                    d->block );
+            if ( d->block <= d->pgc->cell_playback[d->cell_cur].first_sector ||
+                 d->block > d->pgc->cell_playback[d->cell_cur].last_sector )
+            {
+                hb_log( "dvd: end of cell %d at block %d", d->cell_cur,
+                        d->block );
+            }
             d->cell_cur  = d->cell_next;
             d->in_cell = 0;
             d->next_vobu = d->pgc->cell_playback[d->cell_cur].first_sector;
@@ -962,7 +972,7 @@ int hb_dvd_chapter( hb_dvd_t * d )
 /***********************************************************************
  * hb_dvd_is_break
  ***********************************************************************
- * Returns 1 if the current block is a new chapter start
+ * Returns chapter number if the current block is a new chapter start
  **********************************************************************/
 int hb_dvd_is_break( hb_dvd_t * d )
 {
@@ -988,8 +998,7 @@ int hb_dvd_is_break( hb_dvd_t * d )
         // This must not match against the start cell.
         if( pgc->cell_playback[cell].first_sector == d->block && cell != d->cell_start )
         {
-            hb_log("dvd: Chapter Break Cell Found");
-            return 1;
+            return i + 1;
         }
     }