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

Reply via email to