This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 928b9368b453fb3f574461c9ed591a3ab2cdcd17
Author: yangyalei <[email protected]>
AuthorDate: Wed Aug 27 17:12:18 2025 +0800

    nuttx/audio: Add compress audio macros
    
    add compress audio macors and some subfmt
    
    Signed-off-by: yangyalei <[email protected]>
---
 audio/audio.c               |   8 +-
 include/nuttx/audio/audio.h | 325 ++++++++++++++++++++++++++++++++++++++++----
 2 files changed, 309 insertions(+), 24 deletions(-)

diff --git a/audio/audio.c b/audio/audio.c
index c783f9a83f0..861da7e94df 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -418,6 +418,7 @@ static int audio_configure(FAR struct file *filep,
       upper->info.subformat = caps->ac_format.b[0];
       upper->info.samplerate =
           caps->ac_controls.hw[0] | (caps->ac_controls.b[3] << 16);
+      memcpy(&upper->info.codec, &caps->ac_codec, sizeof(caps->ac_codec));
     }
 
   priv->state = AUDIO_STATE_PREPARED;
@@ -1062,7 +1063,12 @@ static int audio_ioctl(FAR struct file *filep, int cmd, 
unsigned long arg)
 
       case AUDIOIOC_GETAUDIOINFO:
         {
-          memcpy((void *)arg, &upper->info, sizeof(struct audio_info_s));
+          if (lower->ops->ioctl == NULL ||
+              lower->ops->ioctl(lower, AUDIOIOC_GETAUDIOINFO, arg) < 0)
+            {
+              memcpy((void *)arg, &upper->info, sizeof(struct audio_info_s));
+            }
+
           ret = OK;
         }
         break;
diff --git a/include/nuttx/audio/audio.h b/include/nuttx/audio/audio.h
index 588ecc8c9d3..d175b049e87 100644
--- a/include/nuttx/audio/audio.h
+++ b/include/nuttx/audio/audio.h
@@ -165,31 +165,183 @@
 #define AUDIO_FMT_MSBC              0x0e
 #define AUDIO_FMT_CVSD              0x0f
 #define AUDIO_FMT_AMR               0x10
-#define AUDIO_FMT_OPUS              0x11
-
-/* Audio Sub-Format Types ***************************************************/
+#define AUDIO_FMT_AMRWB             0x11
+#define AUDIO_FMT_AMRWBPLUS         0x12
+#define AUDIO_FMT_OPUS              0x13
+#define AUDIO_FMT_REAL              0x14
+#define AUDIO_FMT_IEC61937          0x15
+#define AUDIO_FMT_G723_1            0x16
+#define AUDIO_FMT_G729              0x17
+#define AUDIO_FMT_ALAC              0x18
+#define AUDIO_FMT_APE               0x19
 
 #define AUDIO_SUBFMT_END            0x00
-#define AUDIO_SUBFMT_PCM_MP1        0x01
-#define AUDIO_SUBFMT_PCM_MP2        0x02
-#define AUDIO_SUBFMT_PCM_MP3        0x03
-#define AUDIO_SUBFMT_PCM_MU_LAW     0x04
-#define AUDIO_SUBFMT_PCM_A_LAW      0x05
-#define AUDIO_SUBFMT_PCM_U8         0x06
-#define AUDIO_SUBFMT_PCM_S8         0x07
-#define AUDIO_SUBFMT_PCM_U16_LE     0x08
-#define AUDIO_SUBFMT_PCM_S16_BE     0x09
-#define AUDIO_SUBFMT_PCM_S16_LE     0x0a
-#define AUDIO_SUBFMT_PCM_U16_BE     0x0b
-#define AUDIO_SUBFMT_PCM_U32_LE     0x0c
-#define AUDIO_SUBFMT_PCM_U32_BE     0x0d
-#define AUDIO_SUBFMT_PCM_S32_LE     0x0e
-#define AUDIO_SUBFMT_PCM_S32_BE     0x0f
-#define AUDIO_SUBFMT_MIDI_0         0x10
-#define AUDIO_SUBFMT_MIDI_1         0x11
-#define AUDIO_SUBFMT_MIDI_2         0x12
-#define AUDIO_SUBFMT_AMRNB          0x13
-#define AUDIO_SUBFMT_AMRWB          0x14
+
+#define AUDIO_PROFILE_PCM                  0x01
+
+#define AUDIO_SUBFMT_PCM_MP1               0x01
+#define AUDIO_SUBFMT_PCM_MP2               0x02
+#define AUDIO_SUBFMT_PCM_MP3               0x03
+#define AUDIO_SUBFMT_PCM_MU_LAW            0x04
+#define AUDIO_SUBFMT_PCM_A_LAW             0x05
+#define AUDIO_SUBFMT_PCM_U8                0x06
+#define AUDIO_SUBFMT_PCM_S8                0x07
+#define AUDIO_SUBFMT_PCM_U16_LE            0x08
+#define AUDIO_SUBFMT_PCM_S16_BE            0x09
+#define AUDIO_SUBFMT_PCM_S16_LE            0x0a
+#define AUDIO_SUBFMT_PCM_U16_BE            0x0b
+#define AUDIO_SUBFMT_PCM_U24_LE            0x0c
+#define AUDIO_SUBFMT_PCM_S24_BE            0x0d
+#define AUDIO_SUBFMT_PCM_S24_LE            0x0e
+#define AUDIO_SUBFMT_PCM_U24_BE            0x0f
+#define AUDIO_SUBFMT_PCM_U32_LE            0x10
+#define AUDIO_SUBFMT_PCM_U32_BE            0x11
+#define AUDIO_SUBFMT_PCM_S32_LE            0x12
+#define AUDIO_SUBFMT_PCM_S32_BE            0x13
+#define AUDIO_SUBFMT_PCM_FLOAT_LE          0x14
+#define AUDIO_SUBFMT_PCM_FLOAT_BE          0x15
+
+#define AUDIO_SUBFMT_MIDI_0                0x01
+#define AUDIO_SUBFMT_MIDI_1                0x02
+#define AUDIO_SUBFMT_MIDI_2                0x03
+
+#define AUDIO_CHANMODE_MP3_MONO            0x01
+#define AUDIO_CHANMODE_MP3_STEREO          0x02
+#define AUDIO_CHANMODE_MP3_JOINTSTEREO     0x03
+#define AUDIO_CHANMODE_MP3_DUAL            0x04
+
+#define AUDIO_PROFILE_AMR                  0x01
+
+#define AUDIO_SUBFMT_AMR_DTX_OFF           0x01
+#define AUDIO_SUBFMT_AMR_VAD1              0x02
+#define AUDIO_SUBFMT_AMR_VAD2              0x03
+
+#define AUDIO_STREAMFORMAT_UNDEF           0x01
+#define AUDIO_STREAMFORMAT_CONFORMANCE     0x02
+#define AUDIO_STREAMFORMAT_IF1             0x03
+#define AUDIO_STREAMFORMAT_IF2             0x04
+#define AUDIO_STREAMFORMAT_FSF             0x05
+#define AUDIO_STREAMFORMAT_RTPPAYLOAD      0x06
+#define AUDIO_STREAMFORMAT_ITU             0x07
+
+#define AUDIO_PROFILE_AMRWB                0x01
+
+#define AUDIO_SUBFMT_AMRWB_DTX_OFF         0x01
+#define AUDIO_SUBFMT_AMRWB_VAD1            0x02
+#define AUDIO_SUBFMT_AMRWB_VAD2            0x03
+
+#define AUDIO_PROFILE_AMRWBPLUS            0x01
+
+#define AUDIO_PROFILE_AAC                  0x01
+
+#define AUDIO_SUBFMT_AAC_MAIN              0x01
+#define AUDIO_SUBFMT_AAC_LC                0x02
+#define AUDIO_SUBFMT_AAC_SSR               0x03
+#define AUDIO_SUBFMT_AAC_LTP               0x04
+#define AUDIO_SUBFMT_AAC_HE                0x05
+#define AUDIO_SUBFMT_AAC_SCALABLE          0x06
+#define AUDIO_SUBFMT_AAC_ERLC              0x07
+#define AUDIO_SUBFMT_AAC_LD                0x08
+#define AUDIO_SUBFMT_AAC_HE_PS             0x09
+#define AUDIO_SUBFMT_AAC_HE_MPS            0x0a
+
+#define AUDIO_STREAMFORMAT_MP2ADTS         0x01
+#define AUDIO_STREAMFORMAT_MP4ADTS         0x02
+#define AUDIO_STREAMFORMAT_MP4LOAS         0x03
+#define AUDIO_STREAMFORMAT_MP4LATM         0x04
+#define AUDIO_STREAMFORMAT_ADIF            0x05
+#define AUDIO_STREAMFORMAT_MP4FF           0x06
+#define AUDIO_STREAMFORMAT_RAW             0x07
+#define AUDIO_STREAMFORMAT_LATM            0x08
+
+#define AUDIO_PROFILE_WMA7                 0x01
+#define AUDIO_PROFILE_WMA8                 0x02
+#define AUDIO_PROFILE_WMA9                 0x03
+#define AUDIO_PROFILE_WMA10                0x04
+#define AUDIO_PROFILE_WMA9_PRO             0x05
+#define AUDIO_PROFILE_WMA9_LOSSLESS        0x06
+#define AUDIO_PROFILE_WMA10_LOSSLESS       0x07
+
+#define AUDIO_SUBFMT_WMA_LEVEL1            0x01
+#define AUDIO_SUBFMT_WMA_LEVEL2            0x02
+#define AUDIO_SUBFMT_WMA_LEVEL3            0x03
+#define AUDIO_SUBFMT_WMA_LEVEL4            0x04
+#define AUDIO_SUBFMT_WMAPRO_LEVELM0        0x05
+#define AUDIO_SUBFMT_WMAPRO_LEVELM1        0x06
+#define AUDIO_SUBFMT_WMAPRO_LEVELM2        0x07
+#define AUDIO_SUBFMT_WMAPRO_LEVELM3        0x08
+
+#define AUDIO_STREAMFORMAT_WMA_ASF         0x01
+#define AUDIO_STREAMFORMAT_WMA_NOASF_HDR   0x02
+
+#define AUDIO_PROFILE_SBC                  0x01
+
+#define AUDIO_SUBFMT_SBC                   0x01
+
+#define AUDIO_STREAMFORMAT_SBC_PACKED      0x01 /* SBC data with MTU packed */
+
+#define AUDIO_PROFILE_REALAUDIO            0x01
+
+#define AUDIO_SUBFMT_REALAUDIO_G2          0x01
+#define AUDIO_SUBFMT_REALAUDIO_8           0x02
+#define AUDIO_SUBFMT_REALAUDIO_10          0x03
+#define AUDIO_SUBFMT_REALAUDIO_SURROUND    0x04
+
+#define AUDIO_PROFILE_VORBIS               0x01
+
+#define AUDIO_SUBFMT_VORBIS                0x01
+
+#define AUDIO_PROFILE_FLAC                 0x01
+
+#define AUDIO_SUBFMT_FLAC_LEVEL0           0x01
+#define AUDIO_SUBFMT_FLAC_LEVEL1           0x02
+#define AUDIO_SUBFMT_FLAC_LEVEL2           0x03
+#define AUDIO_SUBFMT_FLAC_LEVEL3           0x04
+#define AUDIO_SUBFMT_FLAC_LEVEL4           0x05
+#define AUDIO_SUBFMT_FLAC_LEVEL5           0x06
+#define AUDIO_SUBFMT_FLAC_LEVEL6           0x07
+#define AUDIO_SUBFMT_FLAC_LEVEL7           0x08
+#define AUDIO_SUBFMT_FLAC_LEVEL8           0x09
+
+#define AUDIO_STREAMFORMAT_FLAC            0x01
+#define AUDIO_STREAMFORMAT_FLAC_OGG        0x02
+
+#define AUDIO_PROFILE_IEC61937             0x01
+#define AUDIO_PROFILE_IEC61937_SPDIF       0x02
+
+#define AUDIO_SUBFMT_IEC_REF_STREAM_HEADER 0x01
+#define AUDIO_SUBFMT_IEC_LPCM              0x02
+#define AUDIO_SUBFMT_IEC_AC3               0x03
+#define AUDIO_SUBFMT_IEC_MPEG1             0x04
+#define AUDIO_SUBFMT_IEC_MP3               0x05
+#define AUDIO_SUBFMT_IEC_MPEG2             0x06
+#define AUDIO_SUBFMT_IEC_AACLC             0x07
+#define AUDIO_SUBFMT_IEC_DTS               0x08
+#define AUDIO_SUBFMT_IEC_ATRAC             0x09
+#define AUDIO_SUBFMT_IEC_SACD              0x0a
+#define AUDIO_SUBFMT_IEC_EAC3              0x0b
+#define AUDIO_SUBFMT_IEC_DTS_HD            0x0c
+#define AUDIO_SUBFMT_IEC_MLP               0x0d
+#define AUDIO_SUBFMT_IEC_DST               0x0e
+#define AUDIO_SUBFMT_IEC_WMAPRO            0x0f
+#define AUDIO_SUBFMT_IEC_REF_CXT           0x10
+#define AUDIO_SUBFMT_IEC_HE_AAC            0x11
+#define AUDIO_SUBFMT_IEC_HE_AAC2           0x12
+#define AUDIO_SUBFMT_IEC_MPEG_SURROUND     0x13
+
+#define AUDIO_PROFILE_G723_1               0x01
+
+#define AUDIO_SUBFMT_G723_1_ANNEX_A        0x01
+#define AUDIO_SUBFMT_G723_1_ANNEX_B        0x02
+#define AUDIO_SUBFMT_G723_1_ANNEX_C        0x03
+
+#define AUDIO_PROFILE_G729                 0x01
+
+#define AUDIO_SUBFMT_G729_ANNEX_A          0x01
+#define AUDIO_SUBFMT_G729_ANNEX_B          0x02
+
+#define AUDIO_RATECONTROL_CONSTANT         0x01
+#define AUDIO_RATECONTROL_VARIABLE         0x02
 
 /* Audio Hardware-Format Types **********************************************/
 
@@ -410,6 +562,125 @@ struct audio_status_s
 
 /* This structure is used to describe the audio device capabilities */
 
+struct audio_enc_wma_s
+{
+  uint32_t super_block_align;
+};
+
+struct audio_enc_vorbis_s
+{
+  int32_t  quality;
+  uint32_t managed;
+  uint32_t max_bit_rate;
+  uint32_t min_bit_rate;
+  uint32_t downmix;
+};
+
+struct audio_enc_real_s
+{
+  uint32_t quant_bits;
+  uint32_t start_region;
+  uint32_t num_regions;
+};
+
+struct audio_enc_flac_s
+{
+  uint32_t num;
+  uint32_t gain;
+};
+
+struct audio_enc_sbc_s
+{
+  uint8_t blocks;
+  uint8_t subbands;
+  uint8_t alloc_method;
+  uint8_t bitpool;
+};
+
+struct audio_enc_lc3_s
+{
+  float frame_duration;
+};
+
+struct audio_enc_generic_s
+{
+  uint32_t bw;
+  int32_t  reserved[15];
+};
+
+struct audio_dec_flac_s
+{
+  uint16_t sample_size;
+  uint16_t min_blk_size;
+  uint16_t max_blk_size;
+  uint16_t min_frame_size;
+  uint16_t max_frame_size;
+  uint16_t reserved;
+};
+
+struct audio_dec_wma_s
+{
+  uint32_t encoder_option;
+  uint32_t adv_encoder_option;
+  uint32_t adv_encoder_option2;
+  uint32_t reserved;
+};
+
+struct audio_dec_alac_s
+{
+  uint32_t frame_length;
+  uint8_t  compatible_version;
+  uint8_t  pb;
+  uint8_t  mb;
+  uint8_t  kb;
+  uint32_t max_run;
+  uint32_t max_frame_bytes;
+};
+
+struct audio_dec_ape_s
+{
+  uint16_t compatible_version;
+  uint16_t compression_level;
+  uint32_t format_flags;
+  uint32_t blocks_per_frame;
+  uint32_t final_frame_blocks;
+  uint32_t total_frames;
+  uint32_t seek_table_present;
+};
+
+struct audio_dec_lc3_s
+{
+  float frame_duration;
+};
+
+union audio_codec_options_u
+{
+  struct audio_enc_wma_s wma;
+  struct audio_enc_vorbis_s vorbis;
+  struct audio_enc_real_s real;
+  struct audio_enc_flac_s flac;
+  struct audio_enc_sbc_s sbc;
+  struct audio_enc_lc3_s lc3;
+  struct audio_enc_generic_s generic;
+  struct audio_dec_flac_s flac_d;
+  struct audio_dec_wma_s wma_d;
+  struct audio_dec_alac_s alac_d;
+  struct audio_dec_ape_s ape_d;
+  struct audio_dec_lc3_s lc3_d;
+};
+
+struct audio_codec_s
+{
+  uint32_t bit_rate;
+  uint32_t rate_control;
+  uint32_t profile;
+  uint32_t level;
+  uint32_t ch_mode;
+  uint32_t format;
+  uint32_t align;
+  union audio_codec_options_u options;
+};
+
 struct audio_caps_s
 {
   uint8_t ac_len;           /* Length of the structure */
@@ -443,6 +714,10 @@ struct audio_caps_s
     uint64_t qw;
 #endif
   } ac_controls;
+
+  /* Codec info */
+
+  struct audio_codec_s ac_codec;
 };
 
 struct audio_caps_desc_s
@@ -463,6 +738,10 @@ struct audio_info_s
   uint8_t  subformat;    /* Audio subformat
                           * (maybe should be combined with format?)
                           */
+
+  /* Codec extra params */
+
+  struct audio_codec_s codec;
 };
 
 /* This structure describes the preferred number and size of

Reply via email to