| @@ -359,11 +359,6 @@ static int update_frame_pool(AVCodecContext *avctx, AVFrame *frame) | |||||
| avcodec_align_dimensions2(avctx, &w, &h, pool->stride_align); | avcodec_align_dimensions2(avctx, &w, &h, pool->stride_align); | ||||
| if (!(avctx->flags & CODEC_FLAG_EMU_EDGE)) { | |||||
| w += EDGE_WIDTH * 2; | |||||
| h += EDGE_WIDTH * 2; | |||||
| } | |||||
| do { | do { | ||||
| // NOTE: do not align linesizes individually, this breaks e.g. assumptions | // NOTE: do not align linesizes individually, this breaks e.g. assumptions | ||||
| // that linesize[0] == 2*linesize[1] in the MPEG-encoder for 4:2:2 | // that linesize[0] == 2*linesize[1] in the MPEG-encoder for 4:2:2 | ||||
| @@ -487,9 +482,6 @@ fail: | |||||
| static int video_get_buffer(AVCodecContext *s, AVFrame *pic) | static int video_get_buffer(AVCodecContext *s, AVFrame *pic) | ||||
| { | { | ||||
| FramePool *pool = s->internal->pool; | FramePool *pool = s->internal->pool; | ||||
| const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pic->format); | |||||
| int pixel_size = desc->comp[0].step_minus1 + 1; | |||||
| int h_chroma_shift, v_chroma_shift; | |||||
| int i; | int i; | ||||
| if (pic->data[0] != NULL) { | if (pic->data[0] != NULL) { | ||||
| @@ -500,26 +492,14 @@ static int video_get_buffer(AVCodecContext *s, AVFrame *pic) | |||||
| memset(pic->data, 0, sizeof(pic->data)); | memset(pic->data, 0, sizeof(pic->data)); | ||||
| pic->extended_data = pic->data; | pic->extended_data = pic->data; | ||||
| av_pix_fmt_get_chroma_sub_sample(s->pix_fmt, &h_chroma_shift, &v_chroma_shift); | |||||
| for (i = 0; i < 4 && pool->pools[i]; i++) { | for (i = 0; i < 4 && pool->pools[i]; i++) { | ||||
| const int h_shift = i == 0 ? 0 : h_chroma_shift; | |||||
| const int v_shift = i == 0 ? 0 : v_chroma_shift; | |||||
| pic->linesize[i] = pool->linesize[i]; | pic->linesize[i] = pool->linesize[i]; | ||||
| pic->buf[i] = av_buffer_pool_get(pool->pools[i]); | pic->buf[i] = av_buffer_pool_get(pool->pools[i]); | ||||
| if (!pic->buf[i]) | if (!pic->buf[i]) | ||||
| goto fail; | goto fail; | ||||
| // no edge if EDGE EMU or not planar YUV | |||||
| if ((s->flags & CODEC_FLAG_EMU_EDGE) || !pool->pools[2]) | |||||
| pic->data[i] = pic->buf[i]->data; | |||||
| else { | |||||
| pic->data[i] = pic->buf[i]->data + | |||||
| FFALIGN((pic->linesize[i] * EDGE_WIDTH >> v_shift) + | |||||
| (pixel_size * EDGE_WIDTH >> h_shift), pool->stride_align[i]); | |||||
| } | |||||
| pic->data[i] = pic->buf[i]->data; | |||||
| } | } | ||||
| for (; i < AV_NUM_DATA_POINTERS; i++) { | for (; i < AV_NUM_DATA_POINTERS; i++) { | ||||
| pic->data[i] = NULL; | pic->data[i] = NULL; | ||||