mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
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@libav.org
This commit is contained in:
parent
5ef7c84a93
commit
c34a96a5dd
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user