From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id A9147486C2 for ; Sat, 16 Mar 2024 08:45:20 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 17DAB68D0DD; Sat, 16 Mar 2024 10:45:18 +0200 (EET) Received: from iq.passwd.hu (iq.passwd.hu [217.27.212.140]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0FF4768AD2E for ; Sat, 16 Mar 2024 10:45:11 +0200 (EET) Received: from localhost (localhost [127.0.0.1]) by iq.passwd.hu (Postfix) with ESMTP id 9F1C5E9ECB for ; Sat, 16 Mar 2024 09:45:10 +0100 (CET) X-Virus-Scanned: amavisd-new at passwd.hu Received: from iq.passwd.hu ([127.0.0.1]) by localhost (iq.passwd.hu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id NiCEfn3KORrL for ; Sat, 16 Mar 2024 09:45:07 +0100 (CET) Received: from iq (iq [217.27.212.140]) by iq.passwd.hu (Postfix) with ESMTPS id 9067AE9E68 for ; Sat, 16 Mar 2024 09:45:07 +0100 (CET) Date: Sat, 16 Mar 2024 09:45:07 +0100 (CET) From: Marton Balint To: FFmpeg development discussions and patches In-Reply-To: <20240314231850.8225-1-cus@passwd.hu> Message-ID: <3293dd9c-7f87-04ba-8ebf-63909bdda49b@passwd.hu> References: <20240314231850.8225-1-cus@passwd.hu> MIME-Version: 1.0 Subject: Re: [FFmpeg-devel] [PATCH v3 7/9] avformat/pcm: factorize and improve determining the default packet size X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On Fri, 15 Mar 2024, Marton Balint wrote: > - Remove the 1024 cap on the number of samples, for high sample rate audio it > was suboptimal, calculate the low neighbour power of two for the number of > samples (audio blocks) instead. > - Make the function work correctly also for non-pcm codecs by using the stream > bitrate to estimate the target packet size. A previous version of this patch > used av_get_audio_frame_duration2() the estimate the desired packet size, but > for some codecs that returns the duration of a single audio frame regardless > of frame_bytes. > - Fallback to 4096/block_align*block_align if bitrate is not available. Will apply the this and the rest of the series. Regards, Marton > > Signed-off-by: Marton Balint > --- > libavformat/pcm.c | 41 ++++++++++++++++++++++++++----------- > libavformat/pcm.h | 1 + > tests/ref/seek/lavf-al | 46 +++++++++++++++++++++--------------------- > tests/ref/seek/lavf-ul | 46 +++++++++++++++++++++--------------------- > 4 files changed, 76 insertions(+), 58 deletions(-) > > diff --git a/libavformat/pcm.c b/libavformat/pcm.c > index 9741f73667..9676da3251 100644 > --- a/libavformat/pcm.c > +++ b/libavformat/pcm.c > @@ -24,27 +24,44 @@ > #include "internal.h" > #include "pcm.h" > > -#define RAW_SAMPLES 1024 > +#define PCM_DEMUX_TARGET_FPS 25 > > -int ff_pcm_read_packet(AVFormatContext *s, AVPacket *pkt) > +int ff_pcm_default_packet_size(AVCodecParameters *par) > { > - AVCodecParameters *par = s->streams[0]->codecpar; > - int ret, size; > + int nb_samples, max_samples, bits_per_sample; > + int64_t bitrate; > > if (par->block_align <= 0) > return AVERROR(EINVAL); > > - /* > - * Compute read size to complete a read every 62ms. > - * Clamp to RAW_SAMPLES if larger. > - */ > - size = FFMAX(par->sample_rate/25, 1); > - if (par->block_align <= INT_MAX / RAW_SAMPLES) { > - size = FFMIN(size, RAW_SAMPLES) * par->block_align; > + max_samples = INT_MAX / par->block_align; > + bits_per_sample = av_get_bits_per_sample(par->codec_id); > + bitrate = par->bit_rate; > + > + /* Don't trust the codecpar bitrate if we can calculate it ourselves */ > + if (bits_per_sample > 0 && par->sample_rate > 0 && par->ch_layout.nb_channels > 0) > + if ((int64_t)par->sample_rate * par->ch_layout.nb_channels < INT64_MAX / bits_per_sample) > + bitrate = bits_per_sample * par->sample_rate * par->ch_layout.nb_channels; > + > + if (bitrate > 0) { > + nb_samples = av_clip64(bitrate / 8 / PCM_DEMUX_TARGET_FPS / par->block_align, 1, max_samples); > + nb_samples = 1 << av_log2(nb_samples); > } else { > - size = par->block_align; > + /* Fallback to a size based method for a non-pcm codec with unknown bitrate */ > + nb_samples = av_clip(4096 / par->block_align, 1, max_samples); > } > > + return par->block_align * nb_samples; > +} > + > +int ff_pcm_read_packet(AVFormatContext *s, AVPacket *pkt) > +{ > + int ret, size; > + > + size = ff_pcm_default_packet_size(s->streams[0]->codecpar); > + if (size < 0) > + return size; > + > ret = av_get_packet(s->pb, pkt, size); > > pkt->flags &= ~AV_PKT_FLAG_CORRUPT; > diff --git a/libavformat/pcm.h b/libavformat/pcm.h > index 9af36d5a2e..1928497eed 100644 > --- a/libavformat/pcm.h > +++ b/libavformat/pcm.h > @@ -24,6 +24,7 @@ > > #include "avformat.h" > > +int ff_pcm_default_packet_size(AVCodecParameters *par); > int ff_pcm_read_packet(AVFormatContext *s, AVPacket *pkt); > int ff_pcm_read_seek(AVFormatContext *s, > int stream_index, int64_t timestamp, int flags); > diff --git a/tests/ref/seek/lavf-al b/tests/ref/seek/lavf-al > index 5a4085af4e..ebf7993425 100644 > --- a/tests/ref/seek/lavf-al > +++ b/tests/ref/seek/lavf-al > @@ -1,50 +1,50 @@ > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st:-1 flags:0 ts:-1.000000 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st:-1 flags:1 ts: 1.894167 > -ret: 0 st: 0 flags:1 dts: 1.894150 pts: 1.894150 pos: 41766 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.894150 pts: 1.894150 pos: 41766 size: 512 > ret: 0 st: 0 flags:0 ts: 0.788345 > -ret: 0 st: 0 flags:1 dts: 0.788345 pts: 0.788345 pos: 17383 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.788345 pts: 0.788345 pos: 17383 size: 512 > ret: 0 st: 0 flags:1 ts:-0.317506 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret:-1 st:-1 flags:0 ts: 2.576668 > ret: 0 st:-1 flags:1 ts: 1.470835 > -ret: 0 st: 0 flags:1 dts: 1.470839 pts: 1.470839 pos: 32432 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.470839 pts: 1.470839 pos: 32432 size: 512 > ret: 0 st: 0 flags:0 ts: 0.364989 > -ret: 0 st: 0 flags:1 dts: 0.364989 pts: 0.364989 pos: 8048 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.364989 pts: 0.364989 pos: 8048 size: 512 > ret: 0 st: 0 flags:1 ts:-0.740816 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret:-1 st:-1 flags:0 ts: 2.153336 > ret: 0 st:-1 flags:1 ts: 1.047503 > -ret: 0 st: 0 flags:1 dts: 1.047483 pts: 1.047483 pos: 23097 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.047483 pts: 1.047483 pos: 23097 size: 512 > ret: 0 st: 0 flags:0 ts:-0.058322 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st: 0 flags:1 ts: 2.835828 > -ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos: 43218 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.987029 pts: 1.987029 pos: 43814 size: 286 > ret: 0 st:-1 flags:0 ts: 1.730004 > -ret: 0 st: 0 flags:1 dts: 1.730023 pts: 1.730023 pos: 38147 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.730023 pts: 1.730023 pos: 38147 size: 512 > ret: 0 st:-1 flags:1 ts: 0.624171 > -ret: 0 st: 0 flags:1 dts: 0.624172 pts: 0.624172 pos: 13763 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.624172 pts: 0.624172 pos: 13763 size: 512 > ret: 0 st: 0 flags:0 ts:-0.481678 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st: 0 flags:1 ts: 2.412517 > -ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos: 43218 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.987029 pts: 1.987029 pos: 43814 size: 286 > ret: 0 st:-1 flags:0 ts: 1.306672 > -ret: 0 st: 0 flags:1 dts: 1.306667 pts: 1.306667 pos: 28812 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.306667 pts: 1.306667 pos: 28812 size: 512 > ret: 0 st:-1 flags:1 ts: 0.200839 > -ret: 0 st: 0 flags:1 dts: 0.200816 pts: 0.200816 pos: 4428 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.200816 pts: 0.200816 pos: 4428 size: 512 > ret: 0 st: 0 flags:0 ts:-0.904989 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st: 0 flags:1 ts: 1.989161 > ret: 0 st: 0 flags:1 dts: 1.989161 pts: 1.989161 pos: 43861 size: 239 > ret: 0 st:-1 flags:0 ts: 0.883340 > -ret: 0 st: 0 flags:1 dts: 0.883356 pts: 0.883356 pos: 19478 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.883356 pts: 0.883356 pos: 19478 size: 512 > ret: 0 st:-1 flags:1 ts:-0.222493 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret:-1 st: 0 flags:0 ts: 2.671655 > ret: 0 st: 0 flags:1 ts: 1.565850 > -ret: 0 st: 0 flags:1 dts: 1.565850 pts: 1.565850 pos: 34527 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.565850 pts: 1.565850 pos: 34527 size: 512 > ret: 0 st:-1 flags:0 ts: 0.460008 > -ret: 0 st: 0 flags:1 dts: 0.460000 pts: 0.460000 pos: 10143 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.460000 pts: 0.460000 pos: 10143 size: 512 > ret: 0 st:-1 flags:1 ts:-0.645825 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > diff --git a/tests/ref/seek/lavf-ul b/tests/ref/seek/lavf-ul > index 5a4085af4e..ebf7993425 100644 > --- a/tests/ref/seek/lavf-ul > +++ b/tests/ref/seek/lavf-ul > @@ -1,50 +1,50 @@ > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st:-1 flags:0 ts:-1.000000 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st:-1 flags:1 ts: 1.894167 > -ret: 0 st: 0 flags:1 dts: 1.894150 pts: 1.894150 pos: 41766 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.894150 pts: 1.894150 pos: 41766 size: 512 > ret: 0 st: 0 flags:0 ts: 0.788345 > -ret: 0 st: 0 flags:1 dts: 0.788345 pts: 0.788345 pos: 17383 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.788345 pts: 0.788345 pos: 17383 size: 512 > ret: 0 st: 0 flags:1 ts:-0.317506 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret:-1 st:-1 flags:0 ts: 2.576668 > ret: 0 st:-1 flags:1 ts: 1.470835 > -ret: 0 st: 0 flags:1 dts: 1.470839 pts: 1.470839 pos: 32432 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.470839 pts: 1.470839 pos: 32432 size: 512 > ret: 0 st: 0 flags:0 ts: 0.364989 > -ret: 0 st: 0 flags:1 dts: 0.364989 pts: 0.364989 pos: 8048 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.364989 pts: 0.364989 pos: 8048 size: 512 > ret: 0 st: 0 flags:1 ts:-0.740816 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret:-1 st:-1 flags:0 ts: 2.153336 > ret: 0 st:-1 flags:1 ts: 1.047503 > -ret: 0 st: 0 flags:1 dts: 1.047483 pts: 1.047483 pos: 23097 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.047483 pts: 1.047483 pos: 23097 size: 512 > ret: 0 st: 0 flags:0 ts:-0.058322 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st: 0 flags:1 ts: 2.835828 > -ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos: 43218 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.987029 pts: 1.987029 pos: 43814 size: 286 > ret: 0 st:-1 flags:0 ts: 1.730004 > -ret: 0 st: 0 flags:1 dts: 1.730023 pts: 1.730023 pos: 38147 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.730023 pts: 1.730023 pos: 38147 size: 512 > ret: 0 st:-1 flags:1 ts: 0.624171 > -ret: 0 st: 0 flags:1 dts: 0.624172 pts: 0.624172 pos: 13763 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.624172 pts: 0.624172 pos: 13763 size: 512 > ret: 0 st: 0 flags:0 ts:-0.481678 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st: 0 flags:1 ts: 2.412517 > -ret: 0 st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos: 43218 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.987029 pts: 1.987029 pos: 43814 size: 286 > ret: 0 st:-1 flags:0 ts: 1.306672 > -ret: 0 st: 0 flags:1 dts: 1.306667 pts: 1.306667 pos: 28812 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.306667 pts: 1.306667 pos: 28812 size: 512 > ret: 0 st:-1 flags:1 ts: 0.200839 > -ret: 0 st: 0 flags:1 dts: 0.200816 pts: 0.200816 pos: 4428 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.200816 pts: 0.200816 pos: 4428 size: 512 > ret: 0 st: 0 flags:0 ts:-0.904989 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret: 0 st: 0 flags:1 ts: 1.989161 > ret: 0 st: 0 flags:1 dts: 1.989161 pts: 1.989161 pos: 43861 size: 239 > ret: 0 st:-1 flags:0 ts: 0.883340 > -ret: 0 st: 0 flags:1 dts: 0.883356 pts: 0.883356 pos: 19478 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.883356 pts: 0.883356 pos: 19478 size: 512 > ret: 0 st:-1 flags:1 ts:-0.222493 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > ret:-1 st: 0 flags:0 ts: 2.671655 > ret: 0 st: 0 flags:1 ts: 1.565850 > -ret: 0 st: 0 flags:1 dts: 1.565850 pts: 1.565850 pos: 34527 size: 882 > +ret: 0 st: 0 flags:1 dts: 1.565850 pts: 1.565850 pos: 34527 size: 512 > ret: 0 st:-1 flags:0 ts: 0.460008 > -ret: 0 st: 0 flags:1 dts: 0.460000 pts: 0.460000 pos: 10143 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.460000 pts: 0.460000 pos: 10143 size: 512 > ret: 0 st:-1 flags:1 ts:-0.645825 > -ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 882 > +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size: 512 > -- > 2.35.3 > > _______________________________________________ > 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". > _______________________________________________ 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".