You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	avcodec/snow: fix support for odd dimensions
Fixes Ticket3914 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		| @@ -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]; | ||||
|  | ||||
|   | ||||
| @@ -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); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user