All pastes #673897 Raw Edit

Anonymous

public diff v1 · immutable
#673897 ·published 2007-08-28 19:47 UTC
rendered paste body
--- libhb/hb.c	(revision 884)+++ libhb/hb.c	(working copy)@@ -311,14 +311,26 @@     hb_job_t           * job = title->job;     char                 filename[1024];     FILE               * file;-    uint8_t            * pen;+    uint8_t            * buf1, * buf2, * buf3, * buf4, * pen;     uint32_t           * p32;     AVPicture            pic_in, pic_preview, pic_deint, pic_crop, pic_scale;     struct SwsContext  * context;     int                  i; +    buf1 = malloc( title->width * title->height * 3 / 2 );+    buf2 = malloc( title->width * title->height * 3 / 2 );+    buf3 = malloc( title->width * title->height * 3 / 2 );+    buf4 = malloc( title->width * title->height * 4 );+    avpicture_fill( &pic_in, buf1, PIX_FMT_YUV420P,+                    title->width, title->height );+    avpicture_fill( &pic_deint, buf2, PIX_FMT_YUV420P,+                    title->width, title->height );+    avpicture_fill( &pic_scale, buf3, PIX_FMT_YUV420P,+                    job->width, job->height );+    avpicture_fill( &pic_preview, buf4, PIX_FMT_RGBA32,+                    job->width, job->height );+     // Allocate the AVPicture frames and fill in-    avpicture_alloc( &pic_in, PIX_FMT_YUV420P, title->width, title->height );      memset( filename, 0, 1024 ); @@ -332,44 +344,51 @@         return;     } -    fread( pic_in.data[0], title->width * title->height * 3 / 2, 1, file );+    fread( buf1, title->width * title->height * 3 / 2, 1, file );     fclose( file );      if( job->deinterlace )     {-        // Allocate picture to deinterlace into and deinterlace-        avpicture_alloc( &pic_deint, PIX_FMT_YUV420P, title->width, title->height );+        // Deinterlace and crop         avpicture_deinterlace( &pic_deint, &pic_in, PIX_FMT_YUV420P, title->width, title->height );-         av_picture_crop( &pic_crop, &pic_deint, PIX_FMT_YUV420P, job->crop[0], job->crop[2] );     }     else     {+        // Crop         av_picture_crop( &pic_crop, &pic_in, PIX_FMT_YUV420P, job->crop[0], job->crop[2] );     } -    // Allocate picture to scale into, get scaling context and scale-    avpicture_alloc( &pic_scale, PIX_FMT_YUV420P, job->width, job->height );+    // Get scaling context     context = sws_getContext(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,                              SWS_LANCZOS, NULL, NULL, NULL);++    // Scale     sws_scale(context,               pic_crop.data, pic_crop.linesize,               0, title->height - (job->crop[0] + job->crop[1]),               pic_scale.data, pic_scale.linesize); -    // Allocate RGBA32 preview picture and create preview-    avpicture_alloc( &pic_preview, PIX_FMT_RGBA32, job->width, job->height );+    // Free context+    sws_freeContext( context );++    // Get preview context     context = sws_getContext(job->width, job->height, PIX_FMT_YUV420P,                              job->width, job->height, PIX_FMT_RGBA32,                              SWS_LANCZOS, NULL, NULL, NULL);++    // Create preview     sws_scale(context,               pic_scale.data, pic_scale.linesize,               0, job->height,               pic_preview.data, pic_preview.linesize); +    // Free context+    sws_freeContext( context );+     /* Gray background */     p32 = (uint32_t *) buffer;     for( i = 0; i < ( title->width + 2 ) * ( title->height + 2 ); i++ )@@ -388,17 +407,22 @@         nextLine = pen + 4 * ( title->width + 2 );         memset( pen, 0xFF, 4 );         pen += 4;-        memcpy( pen, pic_preview.data[0] + 4 * job->width * i, 4 * job->width );+        memcpy( pen, buf4 + 4 * job->width * i, 4 * job->width );         pen += 4 * job->width;         memset( pen, 0xFF, 4 );         pen = nextLine;     }     memset( pen, 0xFF, 4 * ( job->width + 2 ) ); +    // Clean up     avpicture_free( &pic_preview );     avpicture_free( &pic_scale );-    if( job->deinterlace ) avpicture_free( &pic_deint );+    avpicture_free( &pic_deint );     avpicture_free( &pic_in );+    free( buf1 );+    free( buf2 );+    free( buf3 );+    free( buf4 ); }  /**