OSDN Git Service

Adds a parity parameter to detelecine and rewires it in decomb, so that TFF can be...
authorjbrjake <jbrjake@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Sat, 31 Oct 2009 15:09:22 +0000 (15:09 +0000)
committerjbrjake <jbrjake@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Sat, 31 Oct 2009 15:09:22 +0000 (15:09 +0000)
git-svn-id: svn://localhost/HandBrake/trunk@2903 b64f7644-9d1e-0410-96f1-a4d463321fa5

libhb/decomb.c
libhb/detelecine.c
test/test.c

index fc5e863..370f18e 100644 (file)
@@ -1644,7 +1644,7 @@ hb_filter_private_t * hb_decomb_init( int pix_fmt,
 
     if( settings )
     {
-        sscanf( settings, "%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d",
+        sscanf( settings, "%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d:%d",
                 &pv->mode,
                 &pv->spatial_metric,
                 &pv->motion_threshold,
@@ -1659,7 +1659,8 @@ hb_filter_private_t * hb_decomb_init( int pix_fmt,
                 &pv->erosion_threshold,
                 &pv->noise_threshold,
                 &pv->maximum_search_distance,
-                &pv->post_processing );
+                &pv->post_processing,
+                &pv->parity );
     }
     
     pv->cpu_count = hb_get_cpu_count();
index 5262b61..2021038 100644 (file)
@@ -60,6 +60,7 @@ struct pullup_context
     int metric_plane;
     int strict_breaks;
     int strict_pairs;
+    int parity;
     /* Internal data */
     struct pullup_field *first, *last, *head;
     struct pullup_buffer *buffers;
@@ -838,16 +839,18 @@ hb_filter_private_t * hb_detelecine_init( int pix_fmt,
     ctx->junk_top  = ctx->junk_bottom = 4;
     ctx->strict_breaks = -1;
     ctx->metric_plane  = 0;
-
+    ctx->parity = -1;
+    
     if( settings )
     {
-        sscanf( settings, "%d:%d:%d:%d:%d:%d",
+        sscanf( settings, "%d:%d:%d:%d:%d:%d:%d",
                 &ctx->junk_left,
                 &ctx->junk_right,
                 &ctx->junk_top,
                 &ctx->junk_bottom,
                 &ctx->strict_breaks,
-                &ctx->metric_plane );
+                &ctx->metric_plane,
+                &ctx->parity );
     }
 
     ctx->format = PULLUP_FMT_Y;
@@ -947,12 +950,25 @@ int hb_detelecine_work( const hb_buffer_t * buf_in,
     memcpy( buf->planes[2], pv->pic_in.data[2],
             pv->width[2] * pv->height[2] * sizeof(uint8_t) );
 
-    /* Submit buffer fields based on buffer flags */
+    /* Submit buffer fields based on buffer flags.
+       Detelecine assumes BFF when the TFF flag isn't present. */
     int parity = 1;
     if( buf_in->flags & PIC_FLAG_TOP_FIELD_FIRST )
     {
+        /* Source signals TFF */
         parity = 0;
     }
+    else if( ctx->parity == 0 )
+    {
+        /* Many non-MPEG-2 sources lack parity flags even though
+           they are TFF, so this allow users to override. */
+        parity = 0;
+    }
+    if( ctx->parity == 1 )
+    {
+        /* Override autodetected parity with BFF */
+        parity = 1;
+    }
     pullup_submit_field( ctx, buf, parity );
     pullup_submit_field( ctx, buf, parity^1 );
     if( buf_in->flags & PIC_FLAG_REPEAT_FIRST_FIELD )
index 7b5f11b..913b723 100644 (file)
@@ -2305,12 +2305,12 @@ static void ShowHelp()
      "           or\n"
      "          <fast/slow/slower>\n"
      "    -5, --decomb            Selectively deinterlaces when it detects combing\n"
-     "          <MO:ME:MT:ST:BT:BX:BY>     (default: 1:2:6:9:80:16:16)\n"
+     "          <MO:ME:MT:ST:BT:BX:BY:FD>   (default: 1:2:6:9:80:16:16:-1)\n"
      "    -9, --detelecine        Detelecine (ivtc) video with pullup filter\n"
      "                            Note: this filter drops duplicate frames to\n"
      "                            restore the pre-telecine framerate, unless you\n"
      "                            specify a constant framerate (--rate 29.97)\n"
-     "          <L:R:T:B:SB:MP>   (default 1:1:4:4:0:0)\n"
+     "          <L:R:T:B:SB:MP:FD>   (default 1:1:4:4:0:0:-1)\n"
      "    -8, --denoise           Denoise video with hqdn3d filter\n"
      "          <SL:SC:TL:TC>     (default 4:3:6:4.5)\n"
      "           or\n"