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 011b18283d43f54c156e2449dc5732d6b9da3a60 Author: Megha Rajput <[email protected]> AuthorDate: Wed Nov 4 18:01:30 2026 +0000 system/nxplayer: Fix reserve cleanup and formatting. Release the audio device on setup failures only when the reserve operation succeeded. Keep generic playback formatting changes separate from WAV support. Assisted-by: Copilot Signed-off-by: Megha Rajput <[email protected]> --- system/nxplayer/nxplayer.c | 27 ++++++++++++++++++++++++--- system/nxplayer/nxplayer_common.c | 1 + 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/system/nxplayer/nxplayer.c b/system/nxplayer/nxplayer.c index 3c22382a9..e20ddec64 100644 --- a/system/nxplayer/nxplayer.c +++ b/system/nxplayer/nxplayer.c @@ -218,10 +218,12 @@ static int _open_with_http(const char *fullurl) setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(struct timeval)); struct sockaddr_in server; + server.sin_family = AF_INET; server.sin_port = htons(port); FAR struct hostent *he; + he = gethostbyname(hostname); memcpy(&server.sin_addr.s_addr, @@ -326,6 +328,7 @@ static int nxplayer_opendevice(FAR struct nxplayer_s *pplayer, int format, if (pplayer->dev_fd == -1) { int errcode = errno; + DEBUGASSERT(errcode > 0); auderr("ERROR: Failed to open %s: %d\n", @@ -368,6 +371,7 @@ static int nxplayer_opendevice(FAR struct nxplayer_s *pplayer, int format, if (dirp == NULL) { int errcode = errno; + DEBUGASSERT(errcode > 0); auderr("ERROR: Failed to open /dev/audio: %d\n", -errcode); @@ -780,6 +784,7 @@ static int nxplayer_enqueuebuffer(FAR struct nxplayer_s *pplayer, if (ret < 0) { int errcode = errno; + DEBUGASSERT(errcode > 0); auderr("ERROR: AUDIOIOC_ENQUEUEBUFFER ioctl failed: %d\n", errcode); @@ -963,9 +968,9 @@ static FAR void *nxplayer_playthread(pthread_addr_t pvarg) * been returned. */ - streaming = false; - failed = true; - break; + streaming = false; + failed = true; + break; } #ifdef CONFIG_DEBUG_FEATURES else @@ -1305,6 +1310,7 @@ int nxplayer_setvolume(FAR struct nxplayer_s *pplayer, uint16_t volume) if (ret < 0) { int errcode = errno; + DEBUGASSERT(errcode > 0); auderr("ERROR: AUDIOIOC_CONFIGURE ioctl failed: %d\n", errcode); @@ -1601,6 +1607,7 @@ int nxplayer_fforward(FAR struct nxplayer_s *pplayer, uint8_t subsample) if (ret < 0) { int errcode = errno; + DEBUGASSERT(errcode > 0); auderr("ERROR: ioctl AUDIOIOC_CONFIGURE failed: %d\n", errcode); @@ -1659,6 +1666,7 @@ int nxplayer_rewind(FAR struct nxplayer_s *pplayer, uint8_t subsample) if (ret < 0) { int errcode = errno; + DEBUGASSERT(errcode > 0); auderr("ERROR: ioctl AUDIOIOC_CONFIGURE failed: %d\n", errcode); @@ -1860,6 +1868,7 @@ static int nxplayer_playinternal(FAR struct nxplayer_s *pplayer, struct ap_buffer_info_s buf_info; struct audio_caps_s caps; int min_channels; + bool reserved = false; int ret; /* Try to open the device */ @@ -1890,6 +1899,8 @@ static int nxplayer_playinternal(FAR struct nxplayer_s *pplayer, goto err_out; } + reserved = true; + caps.ac_len = sizeof(caps); caps.ac_type = AUDIO_TYPE_OUTPUT; caps.ac_subtype = AUDIO_TYPE_QUERY; @@ -1993,6 +2004,16 @@ static int nxplayer_playinternal(FAR struct nxplayer_s *pplayer, return OK; err_out: + if (reserved) + { +#ifdef CONFIG_AUDIO_MULTI_SESSION + ioctl(pplayer->dev_fd, AUDIOIOC_RELEASE, + (unsigned long)pplayer->session); +#else + ioctl(pplayer->dev_fd, AUDIOIOC_RELEASE, 0); +#endif + } + close(pplayer->dev_fd); pplayer->dev_fd = -1; diff --git a/system/nxplayer/nxplayer_common.c b/system/nxplayer/nxplayer_common.c index 0ac4b1d97..118f82c42 100644 --- a/system/nxplayer/nxplayer_common.c +++ b/system/nxplayer/nxplayer_common.c @@ -52,6 +52,7 @@ 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);
