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 f8ab192285ae0caa1b2b642195efe256fb3eb6a4
Author: yangyalei <[email protected]>
AuthorDate: Thu Jun 12 16:46:06 2025 +0800

    nuttx/audio: Update app write head in enqueuebuffer
    
    update aplication pointer in enqueuebuffer
    
    Signed-off-by: yangyalei <[email protected]>
---
 audio/audio.c               | 62 +++++++++++++++++++++++++++++++++------------
 include/nuttx/audio/audio.h |  4 +--
 2 files changed, 48 insertions(+), 18 deletions(-)

diff --git a/audio/audio.c b/audio/audio.c
index aab28fed55a..9275a943c0c 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -739,6 +739,48 @@ static int audio_allocbuffer(FAR struct audio_upperhalf_s 
*upper,
   return ret;
 }
 
+/****************************************************************************
+ * Name: audio_enqueuebuffer
+ *
+ * Description:
+ *   Handle the AUDIOIOC_ENQUEUEBUFFER ioctl command
+ *
+ ****************************************************************************/
+
+static int audio_enqueuebuffer(FAR struct file *filep,
+                               FAR struct audio_buf_desc_s *bufdesc)
+{
+  FAR struct inode *inode = filep->f_inode;
+  FAR struct audio_upperhalf_s *upper = inode->i_private;
+  FAR struct audio_lowerhalf_s *lower = upper->dev;
+  FAR struct audio_openpriv_s *priv = filep->f_priv;
+  irqstate_t flags;
+  int ret;
+
+  DEBUGASSERT(lower->ops->enqueuebuffer != NULL);
+
+  if (bufdesc->u.buffer)
+    {
+      ret = lower->ops->enqueuebuffer(lower, bufdesc->u.buffer);
+      if (ret != OK)
+        {
+          return ret;
+        }
+
+      flags = spin_lock_irqsave(&upper->spinlock);
+      upper->status->head++;
+      spin_unlock_irqrestore(&upper->spinlock, flags);
+    }
+  else
+    {
+      flags = spin_lock_irqsave(&upper->spinlock);
+      priv->head += bufdesc->numbytes;
+      spin_unlock_irqrestore(&upper->spinlock, flags);
+    }
+
+  return OK;
+}
+
 /****************************************************************************
  * Name: audio_ioctl
  *
@@ -753,8 +795,6 @@ static int audio_ioctl(FAR struct file *filep, int cmd, 
unsigned long arg)
   FAR struct audio_upperhalf_s *upper = inode->i_private;
   FAR struct audio_lowerhalf_s *lower = upper->dev;
   FAR struct audio_openpriv_s *priv = filep->f_priv;
-  FAR struct audio_buf_desc_s  *bufdesc;
-  irqstate_t flags;
   int ret;
 
   audinfo("cmd: %d arg: %ld\n", cmd, arg);
@@ -902,8 +942,7 @@ static int audio_ioctl(FAR struct file *filep, int cmd, 
unsigned long arg)
         {
           audinfo("AUDIOIOC_ALLOCBUFFER\n");
 
-          bufdesc = (FAR struct audio_buf_desc_s *) arg;
-          ret = audio_allocbuffer(upper, bufdesc);
+          ret = audio_allocbuffer(upper, (FAR struct audio_buf_desc_s *)arg);
         }
         break;
 
@@ -916,8 +955,7 @@ static int audio_ioctl(FAR struct file *filep, int cmd, 
unsigned long arg)
         {
           audinfo("AUDIOIOC_FREEBUFFER\n");
 
-          bufdesc = (FAR struct audio_buf_desc_s *) arg;
-          ret = audio_freebuffer(upper, bufdesc);
+          ret = audio_freebuffer(upper, (FAR struct audio_buf_desc_s *)arg);
         }
         break;
 
@@ -930,16 +968,8 @@ static int audio_ioctl(FAR struct file *filep, int cmd, 
unsigned long arg)
         {
           audinfo("AUDIOIOC_ENQUEUEBUFFER\n");
 
-          DEBUGASSERT(lower->ops->enqueuebuffer != NULL);
-
-          bufdesc = (FAR struct audio_buf_desc_s *) arg;
-          ret = lower->ops->enqueuebuffer(lower, bufdesc->u.buffer);
-          if (ret == OK)
-            {
-              flags = spin_lock_irqsave_nopreempt(&upper->spinlock);
-              upper->status->head++;
-              spin_unlock_irqrestore_nopreempt(&upper->spinlock, flags);
-            }
+          ret =
+              audio_enqueuebuffer(filep, (FAR struct audio_buf_desc_s *)arg);
         }
         break;
 
diff --git a/include/nuttx/audio/audio.h b/include/nuttx/audio/audio.h
index a206ec25362..952c8a282d0 100644
--- a/include/nuttx/audio/audio.h
+++ b/include/nuttx/audio/audio.h
@@ -460,8 +460,8 @@ struct audio_info_s
   uint8_t  channels;     /* Number of channels (1, 2, 5, 7) */
   uint8_t  format;       /* Audio data format */
   uint8_t  subformat;    /* Audio subformat
-                         * (maybe should be combined with format?
-                         */
+                          * (maybe should be combined with format?)
+                          */
 };
 
 /* This structure describes the preferred number and size of

Reply via email to