[FFmpeg-cvslog] avcodec/snow: fix support for odd dimensions

Michael Niedermayer git at videolan.org
Sun Mar 22 23:36:26 CET 2015


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Sun Mar 22 23:07:03 2015 +0100| [7517e932ffacdc99d34239f86314b376ffb63726] | committer: Michael Niedermayer

avcodec/snow: fix support for odd dimensions

Fixes Ticket3914

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7517e932ffacdc99d34239f86314b376ffb63726
---

 libavcodec/snow.c    |    8 ++++----
 libavcodec/snowenc.c |    6 +++---
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/libavcodec/snow.c b/libavcodec/snow.c
index 101c8f8..33a2dbc 100644
--- a/libavcodec/snow.c
+++ b/libavcodec/snow.c
@@ -535,8 +535,8 @@ int ff_snow_common_init_after_header(AVCodecContext *avctx) {
         int h= s->avctx->height;
 
         if(plane_index){
-            w>>= s->chroma_h_shift;
-            h>>= s->chroma_v_shift;
+            w = FF_CEIL_RSHIFT(w, s->chroma_h_shift);
+            h = FF_CEIL_RSHIFT(h, s->chroma_v_shift);
         }
         s->plane[plane_index].width = w;
         s->plane[plane_index].height= h;
@@ -590,8 +590,8 @@ static int halfpel_interpol(SnowContext *s, uint8_t *halfpel[4][4], AVFrame *fra
 
     for(p=0; p < s->nb_planes; p++){
         int is_chroma= !!p;
-        int w= is_chroma ? s->avctx->width >>s->chroma_h_shift : s->avctx->width;
-        int h= is_chroma ? s->avctx->height>>s->chroma_v_shift : s->avctx->height;
+        int w= is_chroma ? FF_CEIL_RSHIFT(s->avctx->width,  s->chroma_h_shift) : s->avctx->width;
+        int h= is_chroma ? FF_CEIL_RSHIFT(s->avctx->height, s->chroma_v_shift) : s->avctx->height;
         int ls= frame->linesize[p];
         uint8_t *src= frame->data[p];
 
diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c
index 544efbf..e03dc13 100644
--- a/libavcodec/snowenc.c
+++ b/libavcodec/snowenc.c
@@ -1565,12 +1565,12 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
     for(i=0; i < s->nb_planes; i++){
         int hshift= i ? s->chroma_h_shift : 0;
         int vshift= i ? s->chroma_v_shift : 0;
-        for(y=0; y<(height>>vshift); y++)
+        for(y=0; y<FF_CEIL_RSHIFT(height, vshift); y++)
             memcpy(&s->input_picture->data[i][y * s->input_picture->linesize[i]],
                    &pict->data[i][y * pict->linesize[i]],
-                   width>>hshift);
+                   FF_CEIL_RSHIFT(width, hshift));
         s->mpvencdsp.draw_edges(s->input_picture->data[i], s->input_picture->linesize[i],
-                                width >> hshift, height >> vshift,
+                                FF_CEIL_RSHIFT(width, hshift), FF_CEIL_RSHIFT(height, vshift),
                                 EDGE_WIDTH >> hshift, EDGE_WIDTH >> vshift,
                                 EDGE_TOP | EDGE_BOTTOM);
 



More information about the ffmpeg-cvslog mailing list