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) {
