Skip to content

Commit

Permalink
Merge remote-tracking branch 'qatar/master'
Browse files Browse the repository at this point in the history
* qatar/master:
  mpegvideo_enc: fix indentation in load_input_picture()

Conflicts:
	libavcodec/mpegvideo_enc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
  • Loading branch information
michaelni committed Jan 26, 2013
2 parents c46943e + 04f4dbc commit 5cb0782
Showing 1 changed file with 72 additions and 70 deletions.
142 changes: 72 additions & 70 deletions libavcodec/mpegvideo_enc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1047,87 +1047,89 @@ static int load_input_picture(MpegEncContext *s, const AVFrame *pic_arg)
}
}

if (pic_arg) {
if (encoding_delay && !(s->flags & CODEC_FLAG_INPUT_PRESERVED))
direct = 0;
if (pic_arg->linesize[0] != s->linesize)
direct = 0;
if (pic_arg->linesize[1] != s->uvlinesize)
direct = 0;
if (pic_arg->linesize[2] != s->uvlinesize)
direct = 0;

av_dlog(s->avctx, "%d %d %d %d\n", pic_arg->linesize[0],
pic_arg->linesize[1], s->linesize, s->uvlinesize);

if (direct) {
i = ff_find_unused_picture(s, 1);
if (i < 0)
return i;

pic = &s->picture[i].f;
pic->reference = 3;
if (pic_arg) {
if (encoding_delay && !(s->flags & CODEC_FLAG_INPUT_PRESERVED))
direct = 0;
if (pic_arg->linesize[0] != s->linesize)
direct = 0;
if (pic_arg->linesize[1] != s->uvlinesize)
direct = 0;
if (pic_arg->linesize[2] != s->uvlinesize)
direct = 0;

av_dlog(s->avctx, "%d %d %d %d\n", pic_arg->linesize[0],
pic_arg->linesize[1], s->linesize, s->uvlinesize);

if (direct) {
i = ff_find_unused_picture(s, 1);
if (i < 0)
return i;

for (i = 0; i < 4; i++) {
pic->data[i] = pic_arg->data[i];
pic->linesize[i] = pic_arg->linesize[i];
}
if (ff_alloc_picture(s, (Picture *) pic, 1) < 0) {
return -1;
}
} else {
i = ff_find_unused_picture(s, 0);
if (i < 0)
return i;
pic = &s->picture[i].f;
pic->reference = 3;

pic = &s->picture[i].f;
pic->reference = 3;
for (i = 0; i < 4; i++) {
pic->data[i] = pic_arg->data[i];
pic->linesize[i] = pic_arg->linesize[i];
}
if (ff_alloc_picture(s, (Picture *) pic, 1) < 0) {
return -1;
}
} else {
i = ff_find_unused_picture(s, 0);
if (i < 0)
return i;

if (ff_alloc_picture(s, (Picture *) pic, 0) < 0) {
return -1;
}
pic = &s->picture[i].f;
pic->reference = 3;

if (pic->data[0] + INPLACE_OFFSET == pic_arg->data[0] &&
pic->data[1] + INPLACE_OFFSET == pic_arg->data[1] &&
pic->data[2] + INPLACE_OFFSET == pic_arg->data[2]) {
// empty
} else {
int h_chroma_shift, v_chroma_shift;
avcodec_get_chroma_sub_sample(s->avctx->pix_fmt, &h_chroma_shift, &v_chroma_shift);

for (i = 0; i < 3; i++) {
int src_stride = pic_arg->linesize[i];
int dst_stride = i ? s->uvlinesize : s->linesize;
int h_shift = i ? h_chroma_shift : 0;
int v_shift = i ? v_chroma_shift : 0;
int w = s->width >> h_shift;
int h = s->height >> v_shift;
uint8_t *src = pic_arg->data[i];
uint8_t *dst = pic->data[i];

if(s->codec_id == AV_CODEC_ID_AMV && !(s->avctx->flags & CODEC_FLAG_EMU_EDGE)){
h= ((s->height+15)/16*16)>>v_shift;
}
if (ff_alloc_picture(s, (Picture *) pic, 0) < 0) {
return -1;
}

if (pic->data[0] + INPLACE_OFFSET == pic_arg->data[0] &&
pic->data[1] + INPLACE_OFFSET == pic_arg->data[1] &&
pic->data[2] + INPLACE_OFFSET == pic_arg->data[2]) {
// empty
} else {
int h_chroma_shift, v_chroma_shift;
av_pix_fmt_get_chroma_sub_sample(s->avctx->pix_fmt,
&h_chroma_shift,
&v_chroma_shift);

for (i = 0; i < 3; i++) {
int src_stride = pic_arg->linesize[i];
int dst_stride = i ? s->uvlinesize : s->linesize;
int h_shift = i ? h_chroma_shift : 0;
int v_shift = i ? v_chroma_shift : 0;
int w = s->width >> h_shift;
int h = s->height >> v_shift;
uint8_t *src = pic_arg->data[i];
uint8_t *dst = pic->data[i];

if (s->codec_id == AV_CODEC_ID_AMV && !(s->avctx->flags & CODEC_FLAG_EMU_EDGE)) {
h = ((s->height + 15)/16*16) >> v_shift;
}

if (!s->avctx->rc_buffer_size)
dst += INPLACE_OFFSET;
if (!s->avctx->rc_buffer_size)
dst += INPLACE_OFFSET;

if (src_stride == dst_stride)
memcpy(dst, src, src_stride * h);
else {
while (h--) {
memcpy(dst, src, w);
dst += dst_stride;
src += src_stride;
if (src_stride == dst_stride)
memcpy(dst, src, src_stride * h);
else {
while (h--) {
memcpy(dst, src, w);
dst += dst_stride;
src += src_stride;
}
}
}
}
}
copy_picture_attributes(s, pic, pic_arg);
pic->display_picture_number = display_picture_number;
pic->pts = pts; // we set this here to avoid modifiying pic_arg
}
copy_picture_attributes(s, pic, pic_arg);
pic->display_picture_number = display_picture_number;
pic->pts = pts; // we set this here to avoid modifiying pic_arg
}

/* shift buffer entries */
for (i = 1; i < MAX_PICTURE_COUNT /*s->encoding_delay + 1*/; i++)
Expand Down

0 comments on commit 5cb0782

Please sign in to comment.