|
|
|
@@ -101,7 +101,6 @@ typedef struct { |
|
|
|
|
|
|
|
/* Options */ |
|
|
|
uint32_t sWidth; |
|
|
|
uint8_t bframe_bug; |
|
|
|
} CHDContext; |
|
|
|
|
|
|
|
static const AVOption options[] = { |
|
|
|
@@ -631,16 +630,6 @@ 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 (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"); |
|
|
|
} |
|
|
|
DtsReleaseOutputBuffs(dev, NULL, FALSE); |
|
|
|
return RET_COPY_AGAIN; |
|
|
|
} |
|
|
|
|
|
|
|
print_frame_info(priv, &output); |
|
|
|
|
|
|
|
copy_ret = copy_frame(avctx, &output, frame, got_frame); |
|
|
|
@@ -675,21 +664,6 @@ static int crystalhd_decode_packet(AVCodecContext *avctx, const AVPacket *avpkt) |
|
|
|
|
|
|
|
if (avpkt && avpkt->size) { |
|
|
|
uint64_t pts; |
|
|
|
if (!priv->bframe_bug && (avpkt->size == 6 || avpkt->size == 7)) { |
|
|
|
/* |
|
|
|
* Drop frames trigger the bug |
|
|
|
*/ |
|
|
|
av_log(avctx, AV_LOG_WARNING, |
|
|
|
"CrystalHD: Enabling work-around for packed b-frame bug\n"); |
|
|
|
priv->bframe_bug = 1; |
|
|
|
} else if (priv->bframe_bug && avpkt->size == 8) { |
|
|
|
/* |
|
|
|
* Delay frames don't trigger the bug |
|
|
|
*/ |
|
|
|
av_log(avctx, AV_LOG_WARNING, |
|
|
|
"CrystalHD: Disabling work-around for packed b-frame bug\n"); |
|
|
|
priv->bframe_bug = 0; |
|
|
|
} |
|
|
|
|
|
|
|
/* |
|
|
|
* Despite being notionally opaque, either libcrystalhd or |
|
|
|
@@ -825,7 +799,7 @@ DEFINE_CRYSTALHD_DECODER(mpeg2, MPEG2VIDEO, NULL) |
|
|
|
#endif |
|
|
|
|
|
|
|
#if CONFIG_MPEG4_CRYSTALHD_DECODER |
|
|
|
DEFINE_CRYSTALHD_DECODER(mpeg4, MPEG4, NULL) |
|
|
|
DEFINE_CRYSTALHD_DECODER(mpeg4, MPEG4, "mpeg4_unpack_bframes") |
|
|
|
#endif |
|
|
|
|
|
|
|
#if CONFIG_MSMPEG4_CRYSTALHD_DECODER |
|
|
|
|