From: "Harlozinski, Pawel" <pawel.harlozinski@linux.intel.com>
To: "Amadeusz Sławiński" <amadeuszx.slawinski@linux.intel.com>,
"Kai Vehmanen" <kai.vehmanen@linux.intel.com>,
"Takashi Iwai" <tiwai@suse.de>
Cc: alsa-devel@alsa-project.org, patch@alsa-project.org,
broonie@kernel.org, lgirdwood@gmail.com,
pierre-louis.bossart@linux.intel.com
Subject: Re: [PATCH] ALSA: hda: Refactor calculating SDnFMT according to specification
Date: Wed, 2 Sep 2020 15:29:04 +0200 [thread overview]
Message-ID: <239a61b4-c9af-dced-96ab-933511a2869f@linux.intel.com> (raw)
In-Reply-To: <2dbc0b8b-2ea3-19e5-cc19-ad2f59b213c1@linux.intel.com>
> Hey!
>
> Thanks for Your input!
>
> I've created that patch because our validation is actually checking if
> values
> in SDnFMT are matching their expectations, and they've found it
> indicates 32 bits in 32 container while playing 24 bits in 32 container.
> This could be fixed without touching checks of maxbps:
>
> switch (snd_pcm_format_width(format)) {
> case 8:
> val |= AC_FMT_BITS_8;
> break;
> case 16:
> val |= AC_FMT_BITS_16;
> break;
> case 20:
> val |= AC_FMT_BITS_20;
> break;
> case 24:
> if (maxbps >= 24)
> val |= AC_FMT_BITS_24;
> else
> val |= AC_FMT_BITS_20;
> break;
> case 32:
> if (maxbps >= 32 || format == SNDRV_PCM_FORMAT_FLOAT_LE)
> val |= AC_FMT_BITS_32;
> else if (maxbps >= 24)
> val |= AC_FMT_BITS_24;
> else
> val |= AC_FMT_BITS_20;
> break;
> default:
> return 0;
> }
>
>
> I've simplified that because maxbps seems redundant here - thansk for
> catching Kai!
> Although reason of usage maxbps is still not clear (at least for me).
>
> On 8/25/2020 10:25 AM, Takashi Iwai wrote:
>
>> On Mon, 24 Aug 2020 14:16:26 +0200,
>> Kai Vehmanen wrote:
>>> Hey,
>>>
>>> On Mon, 24 Aug 2020, Pawel Harlozinski wrote:
>>>
>>>> Set SDnFMT depending on which format was given, as maxbps only describes container size.
>>> hmm, I'm not entirely sure that is correct. Usage may be a bit varied, but
>>> most places in existing code, "maxbps" is treated as number of significant
>>> bits, not the container size. E.g. in hdac_hda.c:
>>>
>>> » if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
>>> » » maxbps = dai->driver->playback.sig_bits;
>>> » else
>>> » » maxbps = dai->driver->capture.sig_bits;
>>>
>>> It would seem "maxbps" is a bit superfluous given the same information can
>>> be relayed in "format" as well. But currently it's still used. E.g. if you
>>> look at snd_hdac_query_supported_pcm(), if codec reports 24bit support,
>>> format is always set to SNDRV_PCM_FMTBIT_S32_LE even if only 24bit are valid.
> So, for me looks like place where we can align with actual format,
> right ?
>>> So snd_pcm_format_width() will not return the expected significant
>>> bits info, but you have to use "maxbps". So original code seems correct
>>> (or at least you'd need to update both places).
>
>> Hm, we need to check the call pattern, then. The maxbps passed to
>> this function was supposed to be the value obtained from
>> snd_hdac_query_supported_pcm(), i.e. the codec capability.
> Here I'm also not sure if we should just "cut" format in
> snd_hdac_calc_stream_format (eg. 32 to 24) if codec does not support 32?
>
>> But, basically this patch wouldn't change any practical behavior. In
>> the current code, snd_pcm_format_width() can be never 20 or 24,
>> because the 24 and 24bit supports are also with SNDRV_PCM_FMT_S32_LE.
>> That is, the cases 20 and 24 there are superfluous from the
>> beginning (although the checks of maxbps are still needed
>>
>> Instead, what we could improve is:
>> - Set up the proper msbits hw_constraint to reflect the maxbps value
>> - Choose the right AC_FMT_BITS_* depending on the hw_params msbitsWe may change the query function not to return a single maxbps value
>> but rather storing the raw PCM parameter value (AC_SUPPCM_*), and pass
>> it at re-encoding the format value, too, if we want to make
>>
>> thanks,
>>
>> Takashi
prev parent reply other threads:[~2020-09-02 13:30 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-24 10:00 [PATCH] ALSA: hda: Refactor calculating SDnFMT according to specification Pawel Harlozinski
2020-08-24 12:16 ` Kai Vehmanen
2020-08-25 8:25 ` Takashi Iwai
2020-09-02 13:13 ` Harlozinski, Pawel
2020-09-02 13:29 ` Harlozinski, Pawel [this message]
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=239a61b4-c9af-dced-96ab-933511a2869f@linux.intel.com \
--to=pawel.harlozinski@linux.intel.com \
--cc=alsa-devel@alsa-project.org \
--cc=amadeuszx.slawinski@linux.intel.com \
--cc=broonie@kernel.org \
--cc=kai.vehmanen@linux.intel.com \
--cc=lgirdwood@gmail.com \
--cc=patch@alsa-project.org \
--cc=pierre-louis.bossart@linux.intel.com \
--cc=tiwai@suse.de \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox