OSDN Git Service

CLI: SubRip Subtitle import
[handbrake-jp/handbrake-jp-git.git] / libhb / hb.c
index f7e3c9d..898650a 100644 (file)
@@ -5,7 +5,7 @@ struct hb_handle_s
 {
     /* The "Check for update" thread */
     int            build;
-    char           version[16];
+    char           version[32];
     hb_thread_t  * update_thread;
 
     /* This thread's only purpose is to check other threads'
@@ -162,6 +162,7 @@ hb_handle_t * hb_init( int verbose, int update_check )
        hb_register( &hb_decvobsub );
     hb_register( &hb_encvobsub );
     hb_register( &hb_deccc608 );
+    hb_register( &hb_decsrtsub );
        hb_register( &hb_render );
        hb_register( &hb_encavcodec );
        hb_register( &hb_encx264 );
@@ -258,6 +259,7 @@ hb_handle_t * hb_init_dl( int verbose, int update_check )
        hb_register( &hb_decvobsub );
     hb_register( &hb_encvobsub );
     hb_register( &hb_deccc608 );
+    hb_register( &hb_decsrtsub );
        hb_register( &hb_render );
        hb_register( &hb_encavcodec );
        hb_register( &hb_encx264 );
@@ -443,7 +445,7 @@ void hb_get_preview( hb_handle_t * h, hb_title_t * title, int picture,
     hb_get_tempory_filename( h, filename, "%" PRIxPTR "%d",
                              (intptr_t) title, picture );
 
-    file = fopen( filename, "r" );
+    file = fopen( filename, "rb" );
     if( !file )
     {
         hb_log( "hb_get_preview: fopen failed" );
@@ -469,7 +471,7 @@ void hb_get_preview( hb_handle_t * h, hb_title_t * title, int picture,
     context = sws_getContext(title->width  - (job->crop[2] + job->crop[3]),
                              title->height - (job->crop[0] + job->crop[1]),
                              PIX_FMT_YUV420P,
-                             rgb_width, job->height, PIX_FMT_YUV420P,
+                             job->width, job->height, PIX_FMT_YUV420P,
                              swsflags, NULL, NULL, NULL);
 
     // Scale
@@ -801,9 +803,19 @@ void hb_set_anamorphic_size( hb_job_t * job,
                    this is an output PAR, to correct a source, and it should not be assumed
                    that it properly creates a display aspect ratio when applied to the source,
                    which could easily be stored in a different resolution. */
-                   
-                int output_display_width = width * (double)pixel_aspect_width /
-                                           (double)pixel_aspect_height ;
+                if( job->anamorphic.keep_display_aspect )
+                {
+                    /* We can ignore the possibility of a PAR change */
+                    pixel_aspect_width = height * ( (double)source_display_width / (double)cropped_height );
+                    pixel_aspect_height = width;
+                }
+                else
+                {
+                    int output_display_width = width * (double)pixel_aspect_width /
+                        (double)pixel_aspect_height;
+                    pixel_aspect_width = output_display_width;
+                    pixel_aspect_height = width;
+                }
             }
             
             /* Back to caller */
@@ -1004,7 +1016,7 @@ void hb_add( hb_handle_t * h, hb_job_t * job )
     title_copy->list_subtitle = hb_list_init();
 
     /*
-     * The following code is confusing, there are three ways in which
+     * The following code is confusing, there are two ways in which
      * we select subtitles and it depends on whether this is single or
      * two pass mode.
      *
@@ -1012,17 +1024,13 @@ void hb_add( hb_handle_t * h, hb_job_t * job )
      * scans all subtitles of that language. The second pass does not
      * select any because they are set at the end of the first pass.
      *
-     * native_language may have a preferred language, in which case we
-     * may be switching the language we want for the subtitles in the
-     * first pass of a single pass, or the second pass of a two pass.
-     *
      * We may have manually selected a subtitle, in which case that is
      * selected in the first pass of a single pass, or the second of a
      * two pass.
      */
     memset( audio_lang, 0, sizeof( audio_lang ) );
 
-    if ( job->indepth_scan || job->native_language ) {
+    if ( job->indepth_scan ) {
 
         /*
          * Find the first audio language that is being encoded
@@ -1035,35 +1043,6 @@ void hb_add( hb_handle_t * h, hb_job_t * job )
                 break;
             }
         }
-
-        /*
-         * In all cases switch the language if we need to to our native
-         * language.
-         */
-        if( job->native_language )
-        {
-            if( strncasecmp( job->native_language, audio_lang,
-                             sizeof( audio_lang ) ) != 0 )
-            {
-
-                if( job->pass != 2 )
-                {
-                    hb_log( "Enabled subtitles in native language '%s', audio is in '%s'",
-                            job->native_language, audio_lang);
-                }
-                /*
-                 * The main audio track is not in our native language, so switch
-                 * the subtitles to use our native language instead.
-                 */
-                strncpy( audio_lang, job->native_language, sizeof( audio_lang ) );
-            } else {
-                /*
-                 * native language is irrelevent, free it.
-                 */
-                free( job->native_language );
-                job->native_language = NULL;
-            }
-        }
     }
 
     /*
@@ -1088,14 +1067,6 @@ void hb_add( hb_handle_t * h, hb_job_t * job )
                 subtitle_copy = malloc( sizeof( hb_subtitle_t ) );
                 memcpy( subtitle_copy, subtitle, sizeof( hb_subtitle_t ) );
                 hb_list_add( title_copy->list_subtitle, subtitle_copy );
-                if ( job->native_language ) {
-                    /*
-                     * With native language just select the
-                     * first match in our langiage, not all of
-                     * them. Subsequent ones are likely to be commentary
-                     */
-                    break;
-                }
             }
         }
     } else {
@@ -1103,46 +1074,17 @@ void hb_add( hb_handle_t * h, hb_job_t * job )
          * Not doing a subtitle scan in this pass, but maybe we are in the
          * first pass?
          */
-        if( job->pass != 1 && job->native_language )
+        if( job->pass != 1 )
         {
             /*
-             * We are not doing a subtitle scan but do want the
-             * native langauge subtitle selected, so select it
-             * for pass 0 or pass 2 of a two pass.
+             * Copy all of them from the input job, to the title_copy/job_copy.
              */
-            for( i=0; i < hb_list_count( title->list_subtitle ); i++ )
-            {
-                subtitle = hb_list_item( title->list_subtitle, i );
-                if( strcmp( subtitle->iso639_2, audio_lang ) == 0 )
+            for(  i = 0; i < hb_list_count(job->list_subtitle); i++ ) {
+                if( ( subtitle = hb_list_item( job->list_subtitle, i ) ) )
                 {
-                    /*
-                     * Matched subtitle language with audio language, so
-                     * add this to our list to scan.
-                     */
                     subtitle_copy = malloc( sizeof( hb_subtitle_t ) );
                     memcpy( subtitle_copy, subtitle, sizeof( hb_subtitle_t ) );
                     hb_list_add( title_copy->list_subtitle, subtitle_copy );
-                    break;
-                }
-            }
-        } else {
-            /*
-             * Manually selected subtitles, in which case only
-             * bother adding them for pass 0 or pass 2 of a two
-             * pass.
-             */
-            if( job->pass != 1 )
-            {
-                /*
-                 * Copy all of them from the input job, to the title_copy/job_copy.
-                 */
-                for(  i = 0; i < hb_list_count(job->list_subtitle); i++ ) {
-                    if( ( subtitle = hb_list_item( job->list_subtitle, i ) ) )
-                    {
-                        subtitle_copy = malloc( sizeof( hb_subtitle_t ) );
-                        memcpy( subtitle_copy, subtitle, sizeof( hb_subtitle_t ) );
-                        hb_list_add( title_copy->list_subtitle, subtitle_copy );
-                    }
                 }
             }
         }