All pastes #1038317 Raw Edit

par changes

public diff v1 · immutable
#1038317 ·published 2008-06-04 00:47 UTC
rendered paste body
Index: libhb/hb.c===================================================================--- libhb/hb.c	(revision 1485)+++ libhb/hb.c	(working copy)@@ -656,8 +656,9 @@      int pixel_aspect_width = job->pixel_aspect_width;     int pixel_aspect_height = job->pixel_aspect_height;--    if (cropped_width <= 706)+    +    /* Only try to guess a pixel aspect if there isn't one set by the source.*/+    if (cropped_width <= 706 && !title->pixel_aspect_width && !title->pixel_aspect_height)     {         /* Handle ITU PARs */         if (title->height == 480)Index: libhb/decavcodec.c===================================================================--- libhb/decavcodec.c	(revision 1485)+++ libhb/decavcodec.c	(working copy)@@ -473,21 +473,24 @@         info->rate = 27000000;         info->rate_base = (int64_t)context->time_base.num * 27000000LL /                           context->time_base.den;+        +        /* Sometimes there's no pixel aspect set in the source. In that case,+           assume a 1:1 PAR. Otherwise, preserve the source PAR.             */+        info->pixel_aspect_width = context->sample_aspect_ratio.num ?+                                        context->sample_aspect_ratio.num : 1;+        info->pixel_aspect_height = context->sample_aspect_ratio.den ?+                                        context->sample_aspect_ratio.num : 1;          /* ffmpeg returns the Pixel Aspect Ratio (PAR). Handbrake wants the          * Display Aspect Ratio so we convert by scaling by the Storage          * Aspect Ratio (w/h). We do the calc in floating point to get the          * rounding right. We round in the second decimal digit because we          * scale the (integer) aspect by 9 to preserve the 1st digit.  */-        info->aspect = ( (double)context->sample_aspect_ratio.num * +        info->aspect = ( (double)info->pixel_aspect_width *                           (double)context->width /-                         (double)context->sample_aspect_ratio.den /+                         (double)info->pixel_aspect_height /                          (double)context->height + 0.05 ) * HB_ASPECT_BASE; -		if( context->sample_aspect_ratio.num == 0 )-		{-			info->aspect = (double)context->width / (double)context->height * HB_ASPECT_BASE;-		}         info->profile = context->profile;         info->level = context->level;         info->name = context->codec->name;Index: libhb/scan.c===================================================================--- libhb/scan.c	(revision 1487)+++ libhb/scan.c	(working copy)@@ -176,6 +176,13 @@         /* Autocrop by default. Gnark gnark */         memcpy( job->crop, title->crop, 4 * sizeof( int ) ); +        /* Preserve a source's pixel aspect, if it's available. */+        if( title->pixel_aspect_width && title->pixel_aspect_height )+        {+            job->pixel_aspect_width  = title->pixel_aspect_width;+            job->pixel_aspect_height = title->pixel_aspect_height;+        }+         if( title->aspect == 16 && !job->pixel_aspect_width && !job->pixel_aspect_height)         {             hb_reduce( &job->pixel_aspect_width, &job->pixel_aspect_height,@@ -345,6 +352,9 @@          title->width = vid_info.width;         title->height = vid_info.height;+        title->pixel_aspect_width = vid_info.pixel_aspect_width;+        title->pixel_aspect_height = vid_info.pixel_aspect_height;+                 title->rate = vid_info.rate;         title->rate_base = vid_info.rate_base;         if ( vid_info.aspect != 0 )@@ -354,21 +364,27 @@                 hb_log( "aspect ratio changed from %g to %g",                         last_ar, vid_info.aspect );             }-            switch ( (int)vid_info.aspect )+            +            if( !title->pixel_aspect_width && !title->pixel_aspect_height )             {-                case HB_ASPECT_BASE * 4 / 3:-                    ++ar4_count;-                    break;-                case HB_ASPECT_BASE * 16 / 9:-                    ++ar16_count;-                    break;-                default:-                    hb_log( "unknown aspect ratio %g", vid_info.aspect );-                    /* if the aspect is closer to 4:3 use that-                     * otherwise use 16:9 */-                    vid_info.aspect < HB_ASPECT_BASE * 14 / 9 ? ++ar4_count :-                                                                ++ar16_count;-                    break;+                /* We don't have pixel aspect info from the source, so we're+                   going to have to make a guess on the display aspect ratio. */+                switch ( (int)vid_info.aspect )+                {+                    case HB_ASPECT_BASE * 4 / 3:+                        ++ar4_count;+                        break;+                    case HB_ASPECT_BASE * 16 / 9:+                        ++ar16_count;+                        break;+                    default:+                        hb_log( "unknown aspect ratio %g", vid_info.aspect );+                        /* if the aspect is closer to 4:3 use that+                         * otherwise use 16:9 */+                        vid_info.aspect < HB_ASPECT_BASE * 14 / 9 ? ++ar4_count :+                                                                    ++ar16_count;+                        break;+                }             }             last_ar = vid_info.aspect;         }@@ -489,23 +505,31 @@         if ( vid_buf )             hb_buffer_close( &vid_buf );     }+    +    if( title->pixel_aspect_width && title->pixel_aspect_width )+    {+        title->aspect = ( (double)title->pixel_aspect_width * +                         (double)title->width /+                         (double)title->pixel_aspect_height /+                         (double)title->height + 0.05 ) * HB_ASPECT_BASE;+    }+    else+    {+        /* if we found mostly 4:3 previews use that as the aspect ratio otherwise+           use 16:9 */+        title->aspect = ar4_count > ar16_count ?+                            HB_ASPECT_BASE * 4 / 3 : HB_ASPECT_BASE * 16 / 9;+    } -    /* if we found mostly 4:3 previews use that as the aspect ratio otherwise-       use 16:9 */-    title->aspect = ar4_count > ar16_count ?-                        HB_ASPECT_BASE * 4 / 3 : HB_ASPECT_BASE * 16 / 9;-     title->crop[0] = EVEN( title->crop[0] );     title->crop[1] = EVEN( title->crop[1] );     title->crop[2] = EVEN( title->crop[2] );     title->crop[3] = EVEN( title->crop[3] ); -    hb_log( "scan: %d previews, %dx%d, %.3f fps, autocrop = %d/%d/%d/%d, aspect %s",+    hb_log( "scan: %d previews, %dx%d, %.3f fps, autocrop = %d/%d/%d/%d, aspect %.2f",             npreviews, title->width, title->height, (float) title->rate /             (float) title->rate_base, title->crop[0], title->crop[1],-            title->crop[2], title->crop[3],-            title->aspect == HB_ASPECT_BASE * 16 / 9 ? "16:9" :-                title->aspect == HB_ASPECT_BASE * 4 / 3 ? "4:3" : "none" );+            title->crop[2], title->crop[3], (float)title->aspect/(float)HB_ASPECT_BASE);      if( interlaced_preview_count >= ( npreviews / 2 ) )     {Index: libhb/common.h===================================================================--- libhb/common.h	(revision 1485)+++ libhb/common.h	(working copy)@@ -437,6 +437,8 @@     int         width;     int         height;     int         aspect;+    int         pixel_aspect_width;+    int         pixel_aspect_height;     int         rate;     int         rate_base;     int         crop[4];@@ -521,6 +523,8 @@         struct {    // info only valid for video decoders             int     width;             int     height;+            int     pixel_aspect_width;+            int     pixel_aspect_height;             double  aspect;         };         struct {    // info only valid for audio decoders