[FFmpeg-cvslog] dxa: fix decoding of first I-frame by separating I/P-frame decoding
Janne Grunau
git at videolan.org
Sun Aug 18 12:00:48 CEST 2013
ffmpeg | branch: master | Janne Grunau <janne-libav at jannau.net> | Sat Aug 17 12:36:36 2013 +0200| [c34a96a5ddfa390ce2a352eca79190766c9056d4] | committer: Janne Grunau
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: libav-stable at libav.org
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c34a96a5ddfa390ce2a352eca79190766c9056d4
---
libavcodec/dxa.c | 25 +++++++++++++++----------
1 file 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;
}
More information about the ffmpeg-cvslog
mailing list