OSDN Git Service

Remove depreciated cpu count from the api
[handbrake-jp/handbrake-jp-git.git] / libhb / hb.c
index e26c8e6..46720c1 100644 (file)
@@ -40,8 +40,6 @@ struct hb_handle_s
     int            work_error;
     hb_thread_t  * work_thread;
 
-    int            cpu_count;
-
     hb_lock_t    * state_lock;
     hb_state_t     state;
 
@@ -91,6 +89,41 @@ int hb_av_find_stream_info(AVFormatContext *ic)
     return ret;
 }
 
+struct SwsContext*
+hb_sws_get_context(int srcW, int srcH, enum PixelFormat srcFormat,
+                   int dstW, int dstH, enum PixelFormat dstFormat,
+                   int flags)
+{
+    struct SwsContext * ctx;
+
+#if 0
+    // sws_getContext is being depricated.  But it appears that
+    // the new method isn't quite wrung out yet.  So when it is
+    // this code should be fixed up and enabled.
+    ctx = sws_alloc_context();
+    if ( ctx )
+    {
+        av_set_int(ctx, "srcw", srcW);
+        av_set_int(ctx, "srch", srcH);
+        av_set_int(ctx, "src_format", srcFormat);
+        av_set_int(ctx, "dstw", dstW);
+        av_set_int(ctx, "dsth", dstH);
+        av_set_int(ctx, "dst_format", dstFormat);
+        av_set_int(ctx, "sws_flags", flags);
+
+        if (sws_init_context(ctx, NULL, NULL) < 0) {
+            fprintf(stderr, "Cannot initialize resampling context\n");
+            sws_freeContext(ctx);
+            ctx = NULL;
+        } 
+    }
+#else
+    ctx = sws_getContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat, 
+                         flags, NULL, NULL, NULL);
+#endif
+    return ctx;
+}
+
 int hb_avcodec_close(AVCodecContext *avctx)
 {
     int ret;
@@ -296,10 +329,6 @@ hb_handle_t * hb_init( int verbose, int update_check )
      */
     hb_buffer_pool_init();
 
-    /* CPU count detection */
-    hb_log( "hb_init: checking cpu count" );
-    h->cpu_count = hb_get_cpu_count();
-
     h->list_title = hb_list_init();
     h->jobs       = hb_list_init();
 
@@ -400,10 +429,6 @@ hb_handle_t * hb_init_dl( int verbose, int update_check )
         }
     }
 
-    /* CPU count detection */
-    hb_log( "hb_init: checking cpu count" );
-    h->cpu_count = hb_get_cpu_count();
-
     h->list_title = hb_list_init();
     h->jobs       = hb_list_init();
     h->current_job = NULL;
@@ -490,18 +515,6 @@ int hb_check_update( hb_handle_t * h, char ** version )
 }
 
 /**
- * Sets the cpu count to the desired value.
- * @param h Handle to hb_handle_t
- * @param cpu_count Number of CPUs to use.
- */
-void hb_set_cpu_count( hb_handle_t * h, int cpu_count )
-{
-    cpu_count    = MAX( 1, cpu_count );
-    cpu_count    = MIN( cpu_count, 8 );
-    h->cpu_count = cpu_count;
-}
-
-/**
  * Deletes current previews associated with titles
  * @param h Handle to hb_handle_t
  */
@@ -665,11 +678,11 @@ void hb_get_preview( hb_handle_t * h, hb_title_t * title, int picture,
     }
 
     // Get scaling context
-    context = sws_getContext(title->width  - (job->crop[2] + job->crop[3]),
+    context = hb_sws_get_context(title->width  - (job->crop[2] + job->crop[3]),
                              title->height - (job->crop[0] + job->crop[1]),
                              PIX_FMT_YUV420P,
                              job->width, job->height, PIX_FMT_YUV420P,
-                             swsflags, NULL, NULL, NULL);
+                             swsflags);
 
     // Scale
     sws_scale(context,
@@ -681,9 +694,9 @@ void hb_get_preview( hb_handle_t * h, hb_title_t * title, int picture,
     sws_freeContext( context );
 
     // Get preview context
-    context = sws_getContext(rgb_width, job->height, PIX_FMT_YUV420P,
+    context = hb_sws_get_context(rgb_width, job->height, PIX_FMT_YUV420P,
                               rgb_width, job->height, PIX_FMT_RGB32,
-                              swsflags, NULL, NULL, NULL);
+                              swsflags);
 
     // Create preview
     sws_scale(context,
@@ -928,10 +941,12 @@ void hb_set_anamorphic_size( hb_job_t * job,
     {
         case 1:
             /* Strict anamorphic */
-            *output_width = cropped_width;
-            *output_height = cropped_height;
-            *output_par_width = title->pixel_aspect_width;
-            *output_par_height = title->pixel_aspect_height;
+            *output_width  = MULTIPLE_MOD( cropped_width, 2 );
+            *output_height = MULTIPLE_MOD( cropped_height, 2 );
+            // adjust the source PAR for new width/height
+            // new PAR = source PAR * ( old width / new_width ) * ( new_height / old_height )
+            pixel_aspect_width = title->pixel_aspect_width * cropped_width * (*output_height);            
+            pixel_aspect_height = title->pixel_aspect_height * (*output_width) * cropped_height;
         break;
 
         case 2:
@@ -972,8 +987,8 @@ void hb_set_anamorphic_size( hb_job_t * job,
             /* The film AR is the source's display width / cropped source height.
                The output display width is the output height * film AR.
                The output PAR is the output display width / output storage width. */
-            pixel_aspect_width = height * source_display_width / cropped_height;
-            pixel_aspect_height = width;
+            pixel_aspect_width = height * cropped_width * pixel_aspect_width;
+            pixel_aspect_height = width * cropped_height * pixel_aspect_height;
 
             /* Pass the results back to the caller */
             *output_width = width;
@@ -1471,8 +1486,7 @@ void hb_start( hb_handle_t * h )
     h->paused = 0;
 
     h->work_die    = 0;
-    h->work_thread = hb_work_init( h->jobs, h->cpu_count,
-                                   &h->work_die, &h->work_error, &h->current_job );
+    h->work_thread = hb_work_init( h->jobs, &h->work_die, &h->work_error, &h->current_job );
 }
 
 /**