|
|
|
@ -394,6 +394,17 @@ static int decode_p_frame(FourXContext *f, AVFrame *frame, |
|
|
|
|
uint16_t *src; |
|
|
|
|
unsigned int bitstream_size, bytestream_size, wordstream_size, extra, |
|
|
|
|
bytestream_offset, wordstream_offset; |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
if (!f->last_picture->data[0]) { |
|
|
|
|
if ((ret = ff_get_buffer(f->avctx, f->last_picture, |
|
|
|
|
AV_GET_BUFFER_FLAG_REF)) < 0) { |
|
|
|
|
av_log(f->avctx, AV_LOG_ERROR, "get_buffer() failed\n"); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
memset(f->last_picture->data[0], 0, |
|
|
|
|
f->avctx->height * FFABS(f->last_picture->linesize[0])); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
src = (uint16_t *)f->last_picture->data[0]; |
|
|
|
|
|
|
|
|
@ -842,15 +853,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, |
|
|
|
|
if ((ret = decode_i_frame(f, picture, buf, frame_size)) < 0) |
|
|
|
|
return ret; |
|
|
|
|
} else if (frame_4cc == AV_RL32("pfrm") || frame_4cc == AV_RL32("pfr2")) { |
|
|
|
|
if (!f->last_picture->data[0]) { |
|
|
|
|
if ((ret = ff_get_buffer(avctx, f->last_picture, |
|
|
|
|
AV_GET_BUFFER_FLAG_REF)) < 0) { |
|
|
|
|
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); |
|
|
|
|
return ret; |
|
|
|
|
} |
|
|
|
|
memset(f->last_picture->data[0], 0, avctx->height * FFABS(f->last_picture->linesize[0])); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
picture->pict_type = AV_PICTURE_TYPE_P; |
|
|
|
|
if ((ret = decode_p_frame(f, picture, buf, frame_size)) < 0) |
|
|
|
|
return ret; |
|
|
|
|