From: "Martin Storsjö" <martin@martin.st> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Cc: JonHGee <JonHGee@gmail.com> Subject: Re: [FFmpeg-devel] [PATCH] libavcodec/libfdk-aacnc: send encoder delay/padding in packet side data Date: Tue, 28 Feb 2023 14:18:38 +0200 (EET) Message-ID: <75b9dd84-a20-e85f-2e1-f37716b780c7@martin.st> (raw) In-Reply-To: <20230224231440.3107063-1-JonHGee@gmail.com> On Fri, 24 Feb 2023, JonHGee wrote: > --- > libavcodec/libfdk-aacenc.c | 27 ++++++++++++++++++++++++++- > 1 file changed, 26 insertions(+), 1 deletion(-) > > diff --git a/libavcodec/libfdk-aacenc.c b/libavcodec/libfdk-aacenc.c > index 54549de473..55d10990e4 100644 > --- a/libavcodec/libfdk-aacenc.c > +++ b/libavcodec/libfdk-aacenc.c > @@ -21,6 +21,7 @@ > > #include "libavutil/channel_layout.h" > #include "libavutil/common.h" > +#include "libavutil/intreadwrite.h" > #include "libavutil/opt.h" > #include "avcodec.h" > #include "audio_frame_queue.h" > @@ -46,6 +47,7 @@ typedef struct AACContext { > int latm; > int header_period; > int vbr; > + int delay_sent; > > AudioFrameQueue afq; > } AACContext; > @@ -368,7 +370,7 @@ static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, > int out_buffer_identifier = OUT_BITSTREAM_DATA; > int out_buffer_size, out_buffer_element_size; > void *in_ptr, *out_ptr; > - int ret; > + int ret, discard_padding; > uint8_t dummy_buf[1]; > AACENC_ERROR err; > > @@ -428,6 +430,29 @@ static int aac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, > ff_af_queue_remove(&s->afq, avctx->frame_size, &avpkt->pts, > &avpkt->duration); > > + discard_padding = avctx->frame_size - avpkt->duration; > + // Check if subtraction resulted in an overflow > + if ((discard_padding < avctx->frame_size) != (avpkt->duration > 0)) { > + av_log(avctx, AV_LOG_ERROR, "discard padding overflow\n"); > + av_packet_unref(avpkt); > + av_free(avpkt); I don't think we can or should free the avpkt pointer here (which is allocated by the caller). > + return AVERROR(EINVAL); > + } > + if ((!s->delay_sent && avctx->initial_padding > 0) || discard_padding > 0) { > + uint8_t *side_data = > + av_packet_new_side_data(avpkt, AV_PKT_DATA_SKIP_SAMPLES, 10); > + if (!side_data) { > + av_packet_unref(avpkt); > + av_free(avpkt); > + return AVERROR(ENOMEM); > + } > + if (!s->delay_sent) { > + AV_WL32(side_data, avctx->initial_padding); > + s->delay_sent = 1; > + } > + AV_WL32(side_data + 4, discard_padding); > + } > + Other than that, this seems reasonable. There's a bunch of stylistic choices that I'd do slightly differently here, but this seems to match existing code in libavcodec/libmp3lame.c, so it's probably ok to keep it matching. // Martin _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2023-02-28 12:18 UTC|newest] Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-02-24 23:14 JonHGee 2023-02-27 21:33 ` Jonathan Gee 2023-02-28 12:18 ` Martin Storsjö [this message] 2023-02-28 23:08 ` JonHGee 2023-03-01 8:31 ` Martin Storsjö
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=75b9dd84-a20-e85f-2e1-f37716b780c7@martin.st \ --to=martin@martin.st \ --cc=JonHGee@gmail.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git