diff options
author | John Stebbins <[email protected]> | 2019-01-18 14:27:14 -0800 |
---|---|---|
committer | John Stebbins <[email protected]> | 2019-01-20 09:20:47 -0800 |
commit | 563958843beb27b410df19a020e35e51afa298a0 (patch) | |
tree | 9858a9158b3c4812ecae2531e6a7ead8d9ba07dc | |
parent | 96e63ecf50d0bafd273ea17ff3f3bbf49ff42f7b (diff) |
lapsharp: blank frame buffer stride region
Zero is not black. Stride is used in computations and is assumed black.
Fixes https://github.com/HandBrake/HandBrake/issues/1751
-rw-r--r-- | libhb/fifo.c | 28 | ||||
-rw-r--r-- | libhb/internal.h | 1 | ||||
-rw-r--r-- | libhb/lapsharp.c | 1 |
3 files changed, 30 insertions, 0 deletions
diff --git a/libhb/fifo.c b/libhb/fifo.c index 6bf642678..b631e46db 100644 --- a/libhb/fifo.c +++ b/libhb/fifo.c @@ -597,6 +597,34 @@ hb_buffer_t * hb_frame_buffer_init( int pix_fmt, int width, int height ) return buf; } +void hb_frame_buffer_blank_stride(hb_buffer_t * buf) +{ + int pp, xx, yy, stride; + + for (pp = 0; pp < 4; pp++) + { + if (buf->plane[pp].data != NULL) + { + stride = buf->plane[pp].stride; + for (yy = 0; yy < buf->plane[pp].height; yy++) + { + for (xx = buf->plane[pp].width; xx < stride; xx++) + { + *(buf->plane[pp].data + (yy * stride) + xx) = 0x80; + } + } + for (yy = buf->plane[pp].height; + yy < buf->plane[pp].height_stride; yy++) + { + for (xx = 0; xx < stride; xx++) + { + *(buf->plane[pp].data + (yy * stride) + xx) = 0x80; + } + } + } + } +} + // this routine reallocs a buffer for an uncompressed YUV420 video frame // with dimensions width x height. void hb_video_buffer_realloc( hb_buffer_t * buf, int width, int height ) diff --git a/libhb/internal.h b/libhb/internal.h index cd46c1265..1ad82d7f3 100644 --- a/libhb/internal.h +++ b/libhb/internal.h @@ -161,6 +161,7 @@ void hb_buffer_pool_free( void ); hb_buffer_t * hb_buffer_init( int size ); hb_buffer_t * hb_buffer_eof_init( void ); hb_buffer_t * hb_frame_buffer_init( int pix_fmt, int w, int h); +void hb_frame_buffer_blank_stride(hb_buffer_t * buf); void hb_buffer_init_planes( hb_buffer_t * b ); void hb_buffer_realloc( hb_buffer_t *, int size ); void hb_video_buffer_realloc( hb_buffer_t * b, int w, int h ); diff --git a/libhb/lapsharp.c b/libhb/lapsharp.c index eb1c72aee..29d3122f5 100644 --- a/libhb/lapsharp.c +++ b/libhb/lapsharp.c @@ -283,6 +283,7 @@ static int hb_lapsharp_work(hb_filter_object_t *filter, return HB_FILTER_DONE; } + hb_frame_buffer_blank_stride(in); out = hb_frame_buffer_init(in->f.fmt, in->f.width, in->f.height); int c; |