mpegvideo: Initialize chroma_*_shift and codec_tag even if the size is 0
authorMartin Storsjö <martin@martin.st>
Tue, 24 Sep 2013 09:02:39 +0000 (12:02 +0300)
committerLuca Barbato <lu_zero@gentoo.org>
Tue, 7 Jan 2014 08:43:58 +0000 (09:43 +0100)
This fixes breakage in a few fate tests on certain setups
(that for some reason didn't break on OS X) after the previous
commit (8812a8057). Currently, some video streams are initialized
in ff_MPV_common_init with width/height set at 0 and only changed
to a proper video size with ff_MPV_common_frame_size_change later.

The breakage was diagnosed by Anton Khirnov.

Signed-off-by: Martin Storsjö <martin@martin.st>
libavcodec/mpegvideo.c

index fa89886..8df3061 100644 (file)
@@ -696,6 +696,15 @@ av_cold int MPV_common_init(MpegEncContext *s)
     s->flags  = s->avctx->flags;
     s->flags2 = s->avctx->flags2;
 
+    /* set chroma shifts */
+    avcodec_get_chroma_sub_sample(s->avctx->pix_fmt, &s->chroma_x_shift,
+                                  &s->chroma_y_shift);
+
+    /* convert fourcc to upper case */
+    s->codec_tag          = avpriv_toupper4(s->avctx->codec_tag);
+
+    s->stream_codec_tag   = avpriv_toupper4(s->avctx->stream_codec_tag);
+
     if (s->width && s->height) {
         s->mb_width   = (s->width + 15) / 16;
         s->mb_stride  = s->mb_width + 1;
@@ -704,10 +713,6 @@ av_cold int MPV_common_init(MpegEncContext *s)
         mb_array_size = s->mb_height * s->mb_stride;
         mv_table_size = (s->mb_height + 2) * s->mb_stride + 1;
 
-        /* set chroma shifts */
-        avcodec_get_chroma_sub_sample(s->avctx->pix_fmt, &s->chroma_x_shift,
-                                      &s->chroma_y_shift);
-
         /* set default edge pos, will be overriden
          * in decode_header if needed */
         s->h_edge_pos = s->mb_width * 16;
@@ -726,11 +731,6 @@ av_cold int MPV_common_init(MpegEncContext *s)
         c_size  = s->mb_stride * (s->mb_height + 1);
         yc_size = y_size + 2   * c_size;
 
-        /* convert fourcc to upper case */
-        s->codec_tag          = avpriv_toupper4(s->avctx->codec_tag);
-
-        s->stream_codec_tag   = avpriv_toupper4(s->avctx->stream_codec_tag);
-
         s->avctx->coded_frame = (AVFrame *)&s->current_picture;
 
         FF_ALLOCZ_OR_GOTO(s->avctx, s->mb_index2xy, (s->mb_num + 1) * sizeof(int),