Commit a9f79728 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit '1b04eb20'

* commit '1b04eb20':
  lavc: do not allocate edges in the default get_buffer2()

Conflicts:
	libavcodec/utils.c
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents e059ac59 1b04eb20
...@@ -530,11 +530,6 @@ static int update_frame_pool(AVCodecContext *avctx, AVFrame *frame) ...@@ -530,11 +530,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
...@@ -663,9 +658,6 @@ fail: ...@@ -663,9 +658,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) {
...@@ -676,27 +668,14 @@ static int video_get_buffer(AVCodecContext *s, AVFrame *pic) ...@@ -676,27 +668,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;
int is_planar = pool->pools[2] || (i==0 && s->pix_fmt == AV_PIX_FMT_GRAY8);
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 pic->data[i] = pic->buf[i]->data;
if ((s->flags & CODEC_FLAG_EMU_EDGE) || !is_planar)
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]);
}
} }
for (; i < AV_NUM_DATA_POINTERS; i++) { for (; i < AV_NUM_DATA_POINTERS; i++) {
pic->data[i] = NULL; pic->data[i] = NULL;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment