diff mbox series

[FFmpeg-devel,5/7] avcodec/dsddec: Fix decoding LSBF samples

Message ID GV1P250MB0737E070BC3631C474478FED8F3E2@GV1P250MB0737.EURP250.PROD.OUTLOOK.COM
State Accepted
Commit 6d38c260e57d3dcd9f106f378d0f190b0cb837fe
Headers show
Series [FFmpeg-devel,1/7] avcodec/wavpack: Fix leak and segfault on reallocation error | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished

Commit Message

Andreas Rheinhardt April 2, 2024, 1:37 a.m. UTC
ff_dsd2pcm_translate() works internally by converting LSBF input
to MSBF upon reading; its buffer is therefore always MSBF
and should therefore be initialized with MSBF silence;
but this is not true since e3d8963c3cb5b8cd31460dd9b3b9dba2a2343bf5
which this patch effectively reverts.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/dsddec.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Peter Ross April 2, 2024, 7:21 a.m. UTC | #1
On Tue, Apr 02, 2024 at 03:37:06AM +0200, Andreas Rheinhardt wrote:
> ff_dsd2pcm_translate() works internally by converting LSBF input
> to MSBF upon reading; its buffer is therefore always MSBF
> and should therefore be initialized with MSBF silence;
> but this is not true since e3d8963c3cb5b8cd31460dd9b3b9dba2a2343bf5
> which this patch effectively reverts.
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
> ---
>  libavcodec/dsddec.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/libavcodec/dsddec.c b/libavcodec/dsddec.c
> index 22009c70ef..2bb2e73b75 100644
> --- a/libavcodec/dsddec.c
> +++ b/libavcodec/dsddec.c
> @@ -56,7 +56,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>      if (!s)
>          return AVERROR(ENOMEM);
>  
> -    silence = avctx->codec_id == AV_CODEC_ID_DSD_LSBF || avctx->codec_id == AV_CODEC_ID_DSD_LSBF_PLANAR ? DSD_SILENCE_REVERSED : DSD_SILENCE;
> +    silence = DSD_SILENCE;
>      for (i = 0; i < avctx->ch_layout.nb_channels; i++) {
>          s[i].pos = 0;
>          memset(s[i].buf, silence, sizeof(s[i].buf));
> -- 

ok.

with this patch, DSD_SILENCE, DSD_SILENCE_REVERSED macros and even the silence
var are no longer neccessary.

i suggest reverting the memset line and attached comment back to way it was in
the initial commit (5f4f9ee99f4e9ab980bb18475009c701ba47a74f).

-- Peter
(A907 E02F A6E5 0CD2 34CD 20D2 6760 79C5 AC40 DD6B)
Andreas Rheinhardt April 2, 2024, 10:16 a.m. UTC | #2
Peter Ross:
> On Tue, Apr 02, 2024 at 03:37:06AM +0200, Andreas Rheinhardt wrote:
>> ff_dsd2pcm_translate() works internally by converting LSBF input
>> to MSBF upon reading; its buffer is therefore always MSBF
>> and should therefore be initialized with MSBF silence;
>> but this is not true since e3d8963c3cb5b8cd31460dd9b3b9dba2a2343bf5
>> which this patch effectively reverts.
>>
>> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
>> ---
>>  libavcodec/dsddec.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/libavcodec/dsddec.c b/libavcodec/dsddec.c
>> index 22009c70ef..2bb2e73b75 100644
>> --- a/libavcodec/dsddec.c
>> +++ b/libavcodec/dsddec.c
>> @@ -56,7 +56,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>>      if (!s)
>>          return AVERROR(ENOMEM);
>>  
>> -    silence = avctx->codec_id == AV_CODEC_ID_DSD_LSBF || avctx->codec_id == AV_CODEC_ID_DSD_LSBF_PLANAR ? DSD_SILENCE_REVERSED : DSD_SILENCE;
>> +    silence = DSD_SILENCE;
>>      for (i = 0; i < avctx->ch_layout.nb_channels; i++) {
>>          s[i].pos = 0;
>>          memset(s[i].buf, silence, sizeof(s[i].buf));
>> -- 
> 
> ok.
> 
> with this patch, DSD_SILENCE, DSD_SILENCE_REVERSED macros and even the silence
> var are no longer neccessary.
> 
> i suggest reverting the memset line and attached comment back to way it was in
> the initial commit (5f4f9ee99f4e9ab980bb18475009c701ba47a74f).
> 

I see you haven't made it till the next commit yet.

- Andreas
diff mbox series

Patch

diff --git a/libavcodec/dsddec.c b/libavcodec/dsddec.c
index 22009c70ef..2bb2e73b75 100644
--- a/libavcodec/dsddec.c
+++ b/libavcodec/dsddec.c
@@ -56,7 +56,7 @@  static av_cold int decode_init(AVCodecContext *avctx)
     if (!s)
         return AVERROR(ENOMEM);
 
-    silence = avctx->codec_id == AV_CODEC_ID_DSD_LSBF || avctx->codec_id == AV_CODEC_ID_DSD_LSBF_PLANAR ? DSD_SILENCE_REVERSED : DSD_SILENCE;
+    silence = DSD_SILENCE;
     for (i = 0; i < avctx->ch_layout.nb_channels; i++) {
         s[i].pos = 0;
         memset(s[i].buf, silence, sizeof(s[i].buf));