Message ID | 20240829194105.1504814-26-quic_wcheng@quicinc.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Introduce QC USB SND audio offloading support | expand |
On 8/29/24 21:40, Wesley Cheng wrote: > Within the UAC descriptor, there is information describing the size of a > sample (bSubframeSize/bSubslotSize) and the number of relevant bits > (bBitResolution). Currently, fmt_bits carries only the bit resolution, > however, some offloading entities may also require the overall size of the > sample. Save this information in a separate parameter, as depending on the > UAC format type, the sample size can not easily be decoded from other > existing parameters. > > Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com> > --- > sound/usb/card.h | 1 + > sound/usb/format.c | 1 + > 2 files changed, 2 insertions(+) > > diff --git a/sound/usb/card.h b/sound/usb/card.h > index 23d9e6fc69e7..15cda1730076 100644 > --- a/sound/usb/card.h > +++ b/sound/usb/card.h > @@ -15,6 +15,7 @@ struct audioformat { > unsigned int channels; /* # channels */ > unsigned int fmt_type; /* USB audio format type (1-3) */ > unsigned int fmt_bits; /* number of significant bits */ > + unsigned int fmt_sz; /* overall audio sub frame/slot size */ > unsigned int frame_size; /* samples per frame for non-audio */ > unsigned char iface; /* interface number */ > unsigned char altsetting; /* corresponding alternate setting */ > diff --git a/sound/usb/format.c b/sound/usb/format.c > index 3b45d0ee7693..5fde543536a8 100644 > --- a/sound/usb/format.c > +++ b/sound/usb/format.c > @@ -80,6 +80,7 @@ static u64 parse_audio_format_i_type(struct snd_usb_audio *chip, > } > > fp->fmt_bits = sample_width; > + fp->fmt_sz = sample_bytes; > > if ((pcm_formats == 0) && > (format == 0 || format == (1 << UAC_FORMAT_TYPE_I_UNDEFINED))) { Should this patch be added first? I mean, I don't see any dependency on USB offload I am actually confused as to how the regular USB audio path deals with format, this must be inferred somewhere from the fmt_bits. Probably a question for Takashi :-)
diff --git a/sound/usb/card.h b/sound/usb/card.h index 23d9e6fc69e7..15cda1730076 100644 --- a/sound/usb/card.h +++ b/sound/usb/card.h @@ -15,6 +15,7 @@ struct audioformat { unsigned int channels; /* # channels */ unsigned int fmt_type; /* USB audio format type (1-3) */ unsigned int fmt_bits; /* number of significant bits */ + unsigned int fmt_sz; /* overall audio sub frame/slot size */ unsigned int frame_size; /* samples per frame for non-audio */ unsigned char iface; /* interface number */ unsigned char altsetting; /* corresponding alternate setting */ diff --git a/sound/usb/format.c b/sound/usb/format.c index 3b45d0ee7693..5fde543536a8 100644 --- a/sound/usb/format.c +++ b/sound/usb/format.c @@ -80,6 +80,7 @@ static u64 parse_audio_format_i_type(struct snd_usb_audio *chip, } fp->fmt_bits = sample_width; + fp->fmt_sz = sample_bytes; if ((pcm_formats == 0) && (format == 0 || format == (1 << UAC_FORMAT_TYPE_I_UNDEFINED))) {
Within the UAC descriptor, there is information describing the size of a sample (bSubframeSize/bSubslotSize) and the number of relevant bits (bBitResolution). Currently, fmt_bits carries only the bit resolution, however, some offloading entities may also require the overall size of the sample. Save this information in a separate parameter, as depending on the UAC format type, the sample size can not easily be decoded from other existing parameters. Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com> --- sound/usb/card.h | 1 + sound/usb/format.c | 1 + 2 files changed, 2 insertions(+)