Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH] Fix WAV bitrate calculation when bits_per_coded_sample != 8
@ 2025-11-17 13:01 Erdinc Kaya via ffmpeg-devel
  2025-11-25  1:24 ` [FFmpeg-devel] " Michael Niedermayer via ffmpeg-devel
  2025-11-25  2:15 ` James Almer via ffmpeg-devel
  0 siblings, 2 replies; 3+ messages in thread
From: Erdinc Kaya via ffmpeg-devel @ 2025-11-17 13:01 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Erdinc Kaya

- Correctly scale bitrate by bits_per_coded_sample instead of assuming 8 
bits per byte.
- Prevents wrong bitrate reports for 16-bit PCM WAV files.

Signed-off-by: Erdinc Kaya <erdinc@veed.io>
---
  libavformat/riffdec.c | 4 ++++
  1 file changed, 4 insertions(+)

diff --git a/libavformat/riffdec.c b/libavformat/riffdec.c
index 30835d5f36..d63edc6377 100644
--- a/libavformat/riffdec.c
+++ b/libavformat/riffdec.c
@@ -130,6 +130,10 @@ int ff_get_wav_header(AVFormatContext *s, 
AVIOContext *pb,
              par->bits_per_coded_sample = avio_rb16(pb);
          }
      }
+
+    if (par->bits_per_coded_sample)
+        bitrate *= 8.0 / par->bits_per_coded_sample;
+
      if (id == 0xFFFE) {
          par->codec_tag = 0;
      } else {
-- 
2.43.0

_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [FFmpeg-devel] Re: [PATCH] Fix WAV bitrate calculation when bits_per_coded_sample != 8
  2025-11-17 13:01 [FFmpeg-devel] [PATCH] Fix WAV bitrate calculation when bits_per_coded_sample != 8 Erdinc Kaya via ffmpeg-devel
@ 2025-11-25  1:24 ` Michael Niedermayer via ffmpeg-devel
  2025-11-25  2:15 ` James Almer via ffmpeg-devel
  1 sibling, 0 replies; 3+ messages in thread
From: Michael Niedermayer via ffmpeg-devel @ 2025-11-25  1:24 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Michael Niedermayer


[-- Attachment #1.1: Type: text/plain, Size: 6381 bytes --]

On Mon, Nov 17, 2025 at 02:01:19PM +0100, Erdinc Kaya via ffmpeg-devel wrote:
> - Correctly scale bitrate by bits_per_coded_sample instead of assuming 8
> bits per byte.
> - Prevents wrong bitrate reports for 16-bit PCM WAV files.
> 
> Signed-off-by: Erdinc Kaya <erdinc@veed.io>
> ---
>  libavformat/riffdec.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/libavformat/riffdec.c b/libavformat/riffdec.c
> index 30835d5f36..d63edc6377 100644
> --- a/libavformat/riffdec.c
> +++ b/libavformat/riffdec.c
> @@ -130,6 +130,10 @@ int ff_get_wav_header(AVFormatContext *s, AVIOContext
> *pb,
>              par->bits_per_coded_sample = avio_rb16(pb);
>          }
>      }
> +
> +    if (par->bits_per_coded_sample)
> +        bitrate *= 8.0 / par->bits_per_coded_sample;
> +
>      if (id == 0xFFFE) {
>          par->codec_tag = 0;
>      } else {

breaks fate

--- ./tests/ref/seek/acodec-adpcm-ms-trellis	2025-11-19 00:07:58.826436074 +0100
+++ tests/data/fate/seek-acodec-adpcm-ms-trellis	2025-11-25 02:24:33.522013997 +0100
@@ -2,52 +2,52 @@
 ret: 0         st:-1 flags:0  ts:-1.000000
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:     90 size:  4096
 ret: 0         st:-1 flags:1  ts: 1.894167
-ret: 0         st: 0 flags:1 dts: 1.856009 pts: 1.856009 pos:  29786 size:  4096
+ret: 0         st: 0 flags:1 dts: 1.888005 pts: 1.888005 pos:  60506 size:  4096
 ret: 0         st: 0 flags:0  ts: 0.788345
-ret: 0         st: 0 flags:1 dts: 0.831995 pts: 0.831995 pos:  13402 size:  4096
+ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:  25690 size:  4096
 ret: 0         st: 0 flags:1  ts:-0.317506
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:     90 size:  4096
 ret: 0         st:-1 flags:0  ts: 2.576668
-ret: 0         st: 0 flags:1 dts: 2.623991 pts: 2.623991 pos:  42074 size:  4096
+ret: 0         st: 0 flags:1 dts: 2.591995 pts: 2.591995 pos:  83034 size:  4096
 ret: 0         st:-1 flags:1  ts: 1.470835
-ret: 0         st: 0 flags:1 dts: 1.408005 pts: 1.408005 pos:  22618 size:  4096
+ret: 0         st: 0 flags:1 dts: 1.440000 pts: 1.440000 pos:  46170 size:  4096
 ret: 0         st: 0 flags:0  ts: 0.365011
-ret: 0         st: 0 flags:1 dts: 0.383991 pts: 0.383991 pos:   6234 size:  4096
+ret: 0         st: 0 flags:1 dts: 0.383991 pts: 0.383991 pos:  12378 size:  4096
 ret: 0         st: 0 flags:1  ts:-0.740839
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:     90 size:  4096
 ret: 0         st:-1 flags:0  ts: 2.153336
-ret: 0         st: 0 flags:1 dts: 2.176009 pts: 2.176009 pos:  34906 size:  4096
+ret: 0         st: 0 flags:1 dts: 2.176009 pts: 2.176009 pos:  69722 size:  4096
 ret: 0         st:-1 flags:1  ts: 1.047503
-ret: 0         st: 0 flags:1 dts: 1.023991 pts: 1.023991 pos:  16474 size:  4096
+ret: 0         st: 0 flags:1 dts: 1.023991 pts: 1.023991 pos:  32858 size:  4096
 ret: 0         st: 0 flags:0  ts:-0.058322
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:     90 size:  4096
 ret: 0         st: 0 flags:1  ts: 2.835828
-ret: 0         st: 0 flags:1 dts: 2.816009 pts: 2.816009 pos:  45146 size:  4096
+ret: 0         st: 0 flags:1 dts: 2.816009 pts: 2.816009 pos:  90202 size:  4096
 ret: 0         st:-1 flags:0  ts: 1.730004
-ret: 0         st: 0 flags:1 dts: 1.791995 pts: 1.791995 pos:  28762 size:  4096
+ret: 0         st: 0 flags:1 dts: 1.760000 pts: 1.760000 pos:  56410 size:  4096
 ret: 0         st:-1 flags:1  ts: 0.624171
-ret: 0         st: 0 flags:1 dts: 0.576009 pts: 0.576009 pos:   9306 size:  4096
+ret: 0         st: 0 flags:1 dts: 0.608005 pts: 0.608005 pos:  19546 size:  4096
 ret: 0         st: 0 flags:0  ts:-0.481655
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:     90 size:  4096
 ret: 0         st: 0 flags:1  ts: 2.412494
-ret: 0         st: 0 flags:1 dts: 2.368005 pts: 2.368005 pos:  37978 size:  4096
+ret: 0         st: 0 flags:1 dts: 2.400000 pts: 2.400000 pos:  76890 size:  4096
 ret: 0         st:-1 flags:0  ts: 1.306672
-ret: 0         st: 0 flags:1 dts: 1.343991 pts: 1.343991 pos:  21594 size:  4096
+ret: 0         st: 0 flags:1 dts: 1.311995 pts: 1.311995 pos:  42074 size:  4096
 ret: 0         st:-1 flags:1  ts: 0.200839
-ret: 0         st: 0 flags:1 dts: 0.191995 pts: 0.191995 pos:   3162 size:  4096
+ret: 0         st: 0 flags:1 dts: 0.191995 pts: 0.191995 pos:   6234 size:  4096
 ret: 0         st: 0 flags:0  ts:-0.904989
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:     90 size:  4096
 ret: 0         st: 0 flags:1  ts: 1.989184
-ret: 0         st: 0 flags:1 dts: 1.983991 pts: 1.983991 pos:  31834 size:  4096
+ret: 0         st: 0 flags:1 dts: 1.983991 pts: 1.983991 pos:  63578 size:  4096
 ret: 0         st:-1 flags:0  ts: 0.883340
-ret: 0         st: 0 flags:1 dts: 0.896009 pts: 0.896009 pos:  14426 size:  4096
+ret: 0         st: 0 flags:1 dts: 0.896009 pts: 0.896009 pos:  28762 size:  4096
 ret: 0         st:-1 flags:1  ts:-0.222493
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:     90 size:  4096
 ret: 0         st: 0 flags:0  ts: 2.671678
-ret: 0         st: 0 flags:1 dts: 2.688005 pts: 2.688005 pos:  43098 size:  4096
+ret: 0         st: 0 flags:1 dts: 2.688005 pts: 2.688005 pos:  86106 size:  4096
 ret: 0         st: 0 flags:1  ts: 1.565850
-ret: 0         st: 0 flags:1 dts: 1.536009 pts: 1.536009 pos:  24666 size:  4096
+ret: 0         st: 0 flags:1 dts: 1.536009 pts: 1.536009 pos:  49242 size:  4096
 ret: 0         st:-1 flags:0  ts: 0.460008
-ret: 0         st: 0 flags:1 dts: 0.511995 pts: 0.511995 pos:   8282 size:  4096
+ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:  15450 size:  4096
 ret: 0         st:-1 flags:1  ts:-0.645825
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:     90 size:  4096
Test seek-acodec-adpcm-ms-trellis failed. Look at tests/data/fate/seek-acodec-adpcm-ms-trellis.err for details.
make: *** [tests/Makefile:321: fate-seek-acodec-adpcm-ms-trellis] Error 1



[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Let us carefully observe those good qualities wherein our enemies excel us
and endeavor to excel them, by avoiding what is faulty, and imitating what
is excellent in them. -- Plutarch

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

[-- Attachment #2: Type: text/plain, Size: 163 bytes --]

_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [FFmpeg-devel] Re: [PATCH] Fix WAV bitrate calculation when bits_per_coded_sample != 8
  2025-11-17 13:01 [FFmpeg-devel] [PATCH] Fix WAV bitrate calculation when bits_per_coded_sample != 8 Erdinc Kaya via ffmpeg-devel
  2025-11-25  1:24 ` [FFmpeg-devel] " Michael Niedermayer via ffmpeg-devel
@ 2025-11-25  2:15 ` James Almer via ffmpeg-devel
  1 sibling, 0 replies; 3+ messages in thread
From: James Almer via ffmpeg-devel @ 2025-11-25  2:15 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: James Almer


[-- Attachment #1.1.1: Type: text/plain, Size: 1432 bytes --]

On 11/17/2025 10:01 AM, Erdinc Kaya via ffmpeg-devel wrote:
> - Correctly scale bitrate by bits_per_coded_sample instead of assuming 8 
> bits per byte.

When is a byte not 8 bits?

> - Prevents wrong bitrate reports for 16-bit PCM WAV files.

Do you have a sample that gets the wrong bitrate? I generated one just 
now, a 1 second 44100Hz 16bit stereo pcm wav file, and it gave me the 
correct bitrate of 1411 kb/s.

This function reads bitrate from a coded value in the container, 
BytePerSec, which is converted to bits. So not sure why you think it 
needs to be altered.

> 
> Signed-off-by: Erdinc Kaya <erdinc@veed.io>
> ---
>   libavformat/riffdec.c | 4 ++++
>   1 file changed, 4 insertions(+)
> 
> diff --git a/libavformat/riffdec.c b/libavformat/riffdec.c
> index 30835d5f36..d63edc6377 100644
> --- a/libavformat/riffdec.c
> +++ b/libavformat/riffdec.c
> @@ -130,6 +130,10 @@ int ff_get_wav_header(AVFormatContext *s, 
> AVIOContext *pb,
>               par->bits_per_coded_sample = avio_rb16(pb);
>           }
>       }
> +
> +    if (par->bits_per_coded_sample)
> +        bitrate *= 8.0 / par->bits_per_coded_sample;

bits_per_coded_sample is going to be 16 for a 16 bit pcm sample, 
clearly, so this here will halve the value in bitrate.

> +
>       if (id == 0xFFFE) {
>           par->codec_tag = 0;
>       } else {


[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 495 bytes --]

[-- Attachment #2: Type: text/plain, Size: 163 bytes --]

_______________________________________________
ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org
To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-11-25  2:16 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-11-17 13:01 [FFmpeg-devel] [PATCH] Fix WAV bitrate calculation when bits_per_coded_sample != 8 Erdinc Kaya via ffmpeg-devel
2025-11-25  1:24 ` [FFmpeg-devel] " Michael Niedermayer via ffmpeg-devel
2025-11-25  2:15 ` James Almer via ffmpeg-devel

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