Browse Source

Merge commit 'c34a96a5ddfa390ce2a352eca79190766c9056d4'

* commit 'c34a96a5ddfa390ce2a352eca79190766c9056d4':
  dxa: fix decoding of first I-frame by separating I/P-frame decoding

Conflicts:
	libavcodec/dxa.c

See: 186e47ef6d7d90bfd8b16e77cfa5e7aeb2a497c0
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Michael Niedermayer 11 years ago
parent
commit
66722b4ba9
1 changed files with 14 additions and 6 deletions
  1. 14 6
      libavcodec/dxa.c

+ 14 - 6
libavcodec/dxa.c

@@ -263,18 +263,26 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPac
         }
         break;
     case 2:
-    case 3:
     case 4:
+        frame->key_frame = 1;
+        frame->pict_type = AV_PICTURE_TYPE_I;
+        for (j = 0; j < avctx->height; j++) {
+                memcpy(outptr, srcptr, avctx->width);
+            outptr += stride;
+            srcptr += avctx->width;
+        }
+        break;
+    case 3:
     case 5:
-        if (!tmpptr && (compr & 1)) {
+        if (!tmpptr) {
             av_log(avctx, AV_LOG_ERROR, "Missing reference frame.\n");
             if (!(avctx->flags2 & CODEC_FLAG2_SHOW_ALL))
                 return AVERROR_INVALIDDATA;
         }
-        frame->key_frame = !(compr & 1);
-        frame->pict_type = (compr & 1) ? AV_PICTURE_TYPE_P : AV_PICTURE_TYPE_I;
-        for(j = 0; j < avctx->height; j++){
-            if((compr & 1) && tmpptr){
+        frame->key_frame = 0;
+        frame->pict_type = AV_PICTURE_TYPE_P;
+        for (j = 0; j < avctx->height; j++) {
+            if(tmpptr){
                 for(i = 0; i < avctx->width; i++)
                     outptr[i] = srcptr[i] ^ tmpptr[i];
                 tmpptr += stride;