Module: libav Branch: master Commit: c34a96a5ddfa390ce2a352eca79190766c9056d4
Author: Janne Grunau <[email protected]> Committer: Janne Grunau <[email protected]> Date: Sat Aug 17 12:36:36 2013 +0200 dxa: fix decoding of first I-frame by separating I/P-frame decoding 5ef7c84 broke decoding for the first keyframe due to an unnecessary check for a reference frame. CC: [email protected] --- libavcodec/dxa.c | 25 +++++++++++++++---------- 1 files changed, 15 insertions(+), 10 deletions(-) diff --git a/libavcodec/dxa.c b/libavcodec/dxa.c index ddc31f3..30fd1ce 100644 --- a/libavcodec/dxa.c +++ b/libavcodec/dxa.c @@ -252,22 +252,27 @@ 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) { av_log(avctx, AV_LOG_ERROR, "Missing reference frame.\n"); 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){ - for(i = 0; i < avctx->width; i++) - outptr[i] = srcptr[i] ^ tmpptr[i]; - tmpptr += stride; - }else - memcpy(outptr, srcptr, avctx->width); + frame->key_frame = 0; + frame->pict_type = AV_PICTURE_TYPE_P; + for (j = 0; j < avctx->height; j++) { + for (i = 0; i < avctx->width; i++) + outptr[i] = srcptr[i] ^ tmpptr[i]; + tmpptr += stride; outptr += stride; srcptr += avctx->width; } _______________________________________________ libav-commits mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-commits
