This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git


The following commit(s) were added to refs/heads/master by this push:
     new e949e207e nxplayer: add support which mp3 file which has no ID3 header
e949e207e is described below

commit e949e207e020b561ca206b02880113745252d3c5
Author: qiaohaijiao1 <[email protected]>
AuthorDate: Tue Jan 31 11:36:02 2023 +0800

    nxplayer: add support which mp3 file which has no ID3 header
    
    Signed-off-by: qiaohaijiao1 <[email protected]>
---
 system/nxplayer/nxplayer.c     |  9 +++++++++
 system/nxplayer/nxplayer_mp3.c | 23 +++++++++++++++--------
 2 files changed, 24 insertions(+), 8 deletions(-)

diff --git a/system/nxplayer/nxplayer.c b/system/nxplayer/nxplayer.c
index 09b0a17d9..0a4d4c580 100644
--- a/system/nxplayer/nxplayer.c
+++ b/system/nxplayer/nxplayer.c
@@ -520,10 +520,19 @@ int nxplayer_getmidisubformat(int fd)
 }
 #endif
 
+/****************************************************************************
+ * Name: nxplayer_getmp3subformat
+ *
+ *   nxplayer_getmp3subformat() just return AUDIO_SUBFMT_PCM_MP3
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_AUDIO_FORMAT_MP3
 int nxplayer_getmp3subformat(int fd)
 {
   return AUDIO_SUBFMT_PCM_MP3;
 }
+#endif
 
 /****************************************************************************
  * Name: nxplayer_fmtfromextension
diff --git a/system/nxplayer/nxplayer_mp3.c b/system/nxplayer/nxplayer_mp3.c
index f5445ec02..a1b94cc1d 100644
--- a/system/nxplayer/nxplayer_mp3.c
+++ b/system/nxplayer/nxplayer_mp3.c
@@ -235,15 +235,22 @@ int nxplayer_parse_mp3(int fd, FAR uint32_t *samplerate,
       return -ENODATA;
     }
 
-  position = (buffer[6] & ID3V2_BIT_MASK) * 0x200000 +
-             (buffer[7] & ID3V2_BIT_MASK) * 0x4000 +
-             (buffer[8] & ID3V2_BIT_MASK) * 0x80 +
-             (buffer[9] & ID3V2_BIT_MASK) +
-             sizeof(buffer);
-
-  lseek(fd, position, SEEK_SET);
+  if (!memcmp(buffer, "ID3", 3))
+    {
+      position = (buffer[6] & ID3V2_BIT_MASK) * 0x200000 +
+                 (buffer[7] & ID3V2_BIT_MASK) * 0x4000 +
+                 (buffer[8] & ID3V2_BIT_MASK) * 0x80 +
+                 (buffer[9] & ID3V2_BIT_MASK) +
+                 sizeof(buffer);
+
+      lseek(fd, position, SEEK_SET);
+      read(fd, buffer, 4);
+    }
+  else
+    {
+      position = 0;
+    }
 
-  read(fd, buffer, 4);
   mpa_header = buffer[0] << 24 |
                buffer[1] << 16 |
                buffer[2] << 8  |

Reply via email to