[FFmpeg-devel] [PATCH 05/10] crystalhd: We don't need the track the last picture number anymore
Philip Langdale
philipl at overt.org
Wed Oct 26 22:40:23 EEST 2016
This was needed to detect an interlaced failure case that doesn't
happen with the new decode api.
Signed-off-by: Philip Langdale <philipl at overt.org>
---
libavcodec/crystalhd.c | 40 ----------------------------------------
1 file changed, 40 deletions(-)
diff --git a/libavcodec/crystalhd.c b/libavcodec/crystalhd.c
index d738ddb..3db0e17 100644
--- a/libavcodec/crystalhd.c
+++ b/libavcodec/crystalhd.c
@@ -133,8 +133,6 @@ typedef struct {
uint8_t is_nal;
uint8_t need_second_field;
- uint64_t last_picture;
-
OpaqueList *head;
OpaqueList *tail;
@@ -310,7 +308,6 @@ static void flush(AVCodecContext *avctx)
{
CHDContext *priv = avctx->priv_data;
- priv->last_picture = -1;
priv->need_second_field = 0;
av_frame_unref (priv->pic);
@@ -446,7 +443,6 @@ static av_cold int init(AVCodecContext *avctx)
priv = avctx->priv_data;
priv->avctx = avctx;
priv->is_nal = avctx->extradata_size > 0 && *(avctx->extradata) == 1;
- priv->last_picture = -1;
priv->pic = av_frame_alloc();
subtype = id2subtype(priv, avctx->codec->id);
@@ -609,19 +605,6 @@ static inline CopyRet copy_frame(AVCodecContext *avctx,
return RET_ERROR;
}
- /*
- * If we got a false negative for interlaced on the first field,
- * we will realise our mistake here when we see that the picture number is that
- * of the previous picture. We cannot recover the frame and should discard the
- * second field to keep the correct number of output frames.
- */
- if (output->PicInfo.picture_number == priv->last_picture && !priv->need_second_field) {
- av_log(avctx, AV_LOG_WARNING,
- "Incorrectly guessed progressive frame. Discarding second field\n");
- /* Returning without providing a picture. */
- return RET_OK;
- }
-
interlaced = output->PicInfo.flags & VDEC_FLAG_INTERLACED_SRC;
av_log(avctx, AV_LOG_VERBOSE, "Interlaced state: %d\n",
@@ -786,42 +769,19 @@ static inline CopyRet receive_frame(AVCodecContext *avctx,
} else if (ret == BC_STS_SUCCESS) {
int copy_ret = -1;
if (output.PoutFlags & BC_POUT_FLAGS_PIB_VALID) {
- if (priv->last_picture == -1) {
- /*
- * Init to one less, so that the incrementing code doesn't
- * need to be special-cased.
- */
- priv->last_picture = output.PicInfo.picture_number - 1;
- }
-
if (avctx->codec->id == AV_CODEC_ID_MPEG4 &&
output.PicInfo.timeStamp == 0 && priv->bframe_bug) {
if (!priv->bframe_bug) {
av_log(avctx, AV_LOG_VERBOSE,
"CrystalHD: Not returning packed frame twice.\n");
}
- priv->last_picture++;
DtsReleaseOutputBuffs(dev, NULL, FALSE);
return RET_COPY_AGAIN;
}
print_frame_info(priv, &output);
- if (priv->last_picture + 1 < output.PicInfo.picture_number) {
- av_log(avctx, AV_LOG_WARNING,
- "CrystalHD: Picture Number discontinuity\n");
- /*
- * XXX: I have no idea what the semantics of this situation
- * are so I don't even know if we've lost frames or which
- * ones.
- */
- priv->last_picture = output.PicInfo.picture_number - 1;
- }
-
copy_ret = copy_frame(avctx, &output, data, got_frame);
- if (*got_frame > 0) {
- priv->last_picture++;
- }
} else {
/*
* An invalid frame has been consumed.
--
2.9.3
More information about the ffmpeg-devel
mailing list