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-apps.git

commit fc5971e3ab6939c2472e6e7cdf8e6595cdda87d2
Author: Megha Rajput <[email protected]>
AuthorDate: Thu Oct 15 19:45:07 2026 +0000

    system/nxplayer: Refactor decoder callback interface.
    
    Pass the player context to decoder pre-parse and fill callbacks,
    and allow pre-parse callbacks to select the playback subformat.
    Update the existing PCM, MP3, and SBC callbacks to use the common
    interface.
    
    Assisted-by: ChatGPT:GPT-6
    Signed-off-by: Megha Rajput <[email protected]>
---
 include/system/nxplayer.h         | 26 ++++++++++++++++++--------
 system/nxplayer/nxplayer.c        |  6 +++---
 system/nxplayer/nxplayer_common.c |  4 +++-
 system/nxplayer/nxplayer_mp3.c    |  9 +++++++--
 system/nxplayer/nxplayer_sbc.c    |  9 +++++++--
 5 files changed, 38 insertions(+), 16 deletions(-)

diff --git a/include/system/nxplayer.h b/include/system/nxplayer.h
index 61c26e63d..4508ae86e 100644
--- a/include/system/nxplayer.h
+++ b/include/system/nxplayer.h
@@ -40,12 +40,17 @@
  * Public Type Declarations
  ****************************************************************************/
 
+struct nxplayer_s;
+
 struct nxplayer_dec_ops_s
 {
   int format;
-  CODE int (*pre_parse)(int fd, FAR uint32_t *samplerate,
-                        FAR uint8_t *chans, FAR uint8_t *bps);
-  CODE int (*fill_data)(int fd, FAR struct ap_buffer_s *apb);
+  CODE int (*pre_parse)(FAR struct nxplayer_s *pplayer, int fd,
+                        FAR uint32_t *samplerate,
+                        FAR uint8_t *chans, FAR uint8_t *bps,
+                        FAR int *subfmt);
+  CODE int (*fill_data)(FAR struct nxplayer_s *pplayer, int fd,
+                        FAR struct ap_buffer_s *apb);
 };
 
 struct nxplayer_tone_s
@@ -539,8 +544,10 @@ int nxplayer_systemreset(FAR struct nxplayer_s *pplayer);
  *
  ****************************************************************************/
 
-int nxplayer_parse_mp3(int fd, FAR uint32_t *samplerate,
-                       FAR uint8_t *chans, FAR uint8_t *bps);
+int nxplayer_parse_mp3(FAR struct nxplayer_s *pplayer, int fd,
+                       FAR uint32_t *samplerate,
+                       FAR uint8_t *chans, FAR uint8_t *bps,
+                       FAR int *subfmt);
 
 /****************************************************************************
  * Name: nxplayer_parse_sbc
@@ -556,8 +563,10 @@ int nxplayer_parse_mp3(int fd, FAR uint32_t *samplerate,
  *
  ****************************************************************************/
 
-int nxplayer_parse_sbc(int fd, FAR uint32_t *samplerate,
-                       FAR uint8_t *chans, FAR uint8_t *bps);
+int nxplayer_parse_sbc(FAR struct nxplayer_s *pplayer, int fd,
+                       FAR uint32_t *samplerate,
+                       FAR uint8_t *chans, FAR uint8_t *bps,
+                       FAR int *subfmt);
 
 /****************************************************************************
  * Name: nxplayer_fill_mp3
@@ -587,7 +596,8 @@ int nxplayer_fill_mp3(int fd, FAR struct ap_buffer_s *apb);
  *
  ****************************************************************************/
 
-int nxplayer_fill_common(int fd, FAR struct ap_buffer_s *apb);
+int nxplayer_fill_common(FAR struct nxplayer_s *pplayer, int fd,
+                         FAR struct ap_buffer_s *apb);
 
 #ifdef __cplusplus
 }
diff --git a/system/nxplayer/nxplayer.c b/system/nxplayer/nxplayer.c
index f1b7f943b..3c22382a9 100644
--- a/system/nxplayer/nxplayer.c
+++ b/system/nxplayer/nxplayer.c
@@ -723,7 +723,7 @@ static int nxplayer_readbuffer(FAR struct nxplayer_s 
*pplayer,
       return -ENODATA;
     }
 
-  ret = pplayer->ops->fill_data(pplayer->fd, apb);
+  ret = pplayer->ops->fill_data(pplayer, pplayer->fd, apb);
   if (ret < 0)
     {
       /* End of file or read error.. We are finished with this file in any
@@ -2174,8 +2174,8 @@ int nxplayer_playraw(FAR struct nxplayer_s *pplayer,
 
   if (pplayer->ops->pre_parse)
     {
-      ret = pplayer->ops->pre_parse(pplayer->fd, &samprate,
-                                    &nchannels, &bpsamp);
+      ret = pplayer->ops->pre_parse(pplayer, pplayer->fd, &samprate,
+                                    &nchannels, &bpsamp, &subfmt);
       if (ret < 0)
         {
           goto err_out;
diff --git a/system/nxplayer/nxplayer_common.c 
b/system/nxplayer/nxplayer_common.c
index c33c38690..0ac4b1d97 100644
--- a/system/nxplayer/nxplayer_common.c
+++ b/system/nxplayer/nxplayer_common.c
@@ -48,8 +48,10 @@
  *
  ****************************************************************************/
 
-int nxplayer_fill_common(int fd, FAR struct ap_buffer_s *apb)
+int nxplayer_fill_common(FAR struct nxplayer_s *pplayer, int fd,
+                         FAR struct ap_buffer_s *apb)
 {
+  (void)pplayer;
   /* Read data into the buffer. */
 
   apb->nbytes  = read(fd, apb->samp, apb->nmaxbytes);
diff --git a/system/nxplayer/nxplayer_mp3.c b/system/nxplayer/nxplayer_mp3.c
index 56dc183ae..582c783b2 100644
--- a/system/nxplayer/nxplayer_mp3.c
+++ b/system/nxplayer/nxplayer_mp3.c
@@ -226,14 +226,19 @@ static int nxplayer_parse_mpeg(uint32_t header, FAR 
uint32_t *samplerate,
  *
  ****************************************************************************/
 
-int nxplayer_parse_mp3(int fd, FAR uint32_t *samplerate,
-                       FAR uint8_t *chans, FAR uint8_t *bps)
+int nxplayer_parse_mp3(FAR struct nxplayer_s *pplayer, int fd,
+                       FAR uint32_t *samplerate,
+                       FAR uint8_t *chans, FAR uint8_t *bps,
+                       FAR int *subfmt)
 {
   uint32_t mpa_header;
   uint8_t buffer[10];
   off_t position;
   int ret;
 
+  (void)pplayer;
+  (void)subfmt;
+
   ret = read(fd, buffer, sizeof(buffer));
   if (ret < sizeof(buffer))
     {
diff --git a/system/nxplayer/nxplayer_sbc.c b/system/nxplayer/nxplayer_sbc.c
index 17ebc173a..b4712166a 100644
--- a/system/nxplayer/nxplayer_sbc.c
+++ b/system/nxplayer/nxplayer_sbc.c
@@ -186,13 +186,18 @@ static int check_sbc_frame_header_info(FAR struct 
sbc_frame_header *sbc)
  *
  ****************************************************************************/
 
-int nxplayer_parse_sbc(int fd, FAR uint32_t *samplerate,
-                       FAR uint8_t *chans, FAR uint8_t *bps)
+int nxplayer_parse_sbc(FAR struct nxplayer_s *pplayer, int fd,
+                       FAR uint32_t *samplerate,
+                       FAR uint8_t *chans, FAR uint8_t *bps,
+                       FAR int *subfmt)
 {
   char buffer[SBC_FRAME_HEADER_SIZE];
   struct sbc_frame_header sbc;
   int ret = OK;
 
+  (void)pplayer;
+  (void)subfmt;
+
   ret = read(fd, buffer, SBC_FRAME_HEADER_SIZE);
   if (ret < SBC_FRAME_HEADER_SIZE)
     {

Reply via email to