summaryrefslogtreecommitdiff
path: root/libavcodec/crystalhd.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-09-23 23:19:24 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-11-07 17:26:41 +0100
commit9b851c4b92b7c55ec9d626b729350a5761aef183 (patch)
tree3bca114588023da87de006b546812e2686a0d730 /libavcodec/crystalhd.c
parente3533006225d35107c29f984ef4c4bbd9eefeb1c (diff)
downloadffmpeg-9b851c4b92b7c55ec9d626b729350a5761aef183.tar.gz
avcodec/crystalhd: Use AVCodecInternal.in_pkt instead of stack packet
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavcodec/crystalhd.c')
-rw-r--r--libavcodec/crystalhd.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/libavcodec/crystalhd.c b/libavcodec/crystalhd.c
index 0238ab7378..9202a16a77 100644
--- a/libavcodec/crystalhd.c
+++ b/libavcodec/crystalhd.c
@@ -90,6 +90,9 @@ typedef struct OpaqueList {
typedef struct {
AVClass *av_class;
AVCodecContext *avctx;
+ /* This packet coincides with AVCodecInternal.in_pkt
+ * and is not owned by us. */
+ AVPacket *pkt;
HANDLE dev;
uint8_t is_70012;
@@ -328,6 +331,7 @@ static av_cold int init(AVCodecContext *avctx)
/* Initialize the library */
priv = avctx->priv_data;
priv->avctx = avctx;
+ priv->pkt = avctx->internal->in_pkt;
priv->draining = 0;
subtype = id2subtype(priv, avctx->codec->id);
@@ -703,19 +707,19 @@ static int crystalhd_receive_frame(AVCodecContext *avctx, AVFrame *frame)
BC_DTS_STATUS decoder_status = { 0, };
CopyRet rec_ret;
CHDContext *priv = avctx->priv_data;
+ AVPacket *const pkt = priv->pkt;
HANDLE dev = priv->dev;
int got_frame = 0;
int ret = 0;
- AVPacket pkt = {0};
av_log(avctx, AV_LOG_VERBOSE, "CrystalHD: receive_frame\n");
- ret = ff_decode_get_packet(avctx, &pkt);
+ ret = ff_decode_get_packet(avctx, pkt);
if (ret < 0 && ret != AVERROR_EOF) {
return ret;
}
- while (pkt.size > DtsTxFreeSize(dev)) {
+ while (pkt->size > DtsTxFreeSize(dev)) {
/*
* Block until there is space in the buffer for the next packet.
* We assume that the hardware will make forward progress at this
@@ -724,8 +728,8 @@ static int crystalhd_receive_frame(AVCodecContext *avctx, AVFrame *frame)
av_log(avctx, AV_LOG_TRACE, "CrystalHD: Waiting for space in input buffer\n");
}
- ret = crystalhd_decode_packet(avctx, &pkt);
- av_packet_unref(&pkt);
+ ret = crystalhd_decode_packet(avctx, pkt);
+ av_packet_unref(pkt);
// crystalhd_is_buffer_full() should avoid this.
if (ret == AVERROR(EAGAIN)) {
ret = AVERROR_EXTERNAL;