Merged in masayuki2009/nuttx.apps/nxplayer_with_http_streaming (pull request #126)

nxplayer with http streaming

Approved-by: Gregory Nutt <gnutt@nuttx.org>
This commit is contained in:
Masayuki Ishikawa 2017-12-19 11:43:55 +00:00 committed by Gregory Nutt
commit ac1a7048c4
4 changed files with 242 additions and 72 deletions

View File

@ -64,7 +64,7 @@ struct nxplayer_s
pthread_t playId; /* Thread ID of the playthread */
int crefs; /* Number of references to the player */
sem_t sem; /* Thread sync semaphore */
FILE* fileFd; /* File descriptor of open file */
int fd; /* File descriptor of open file */
#ifdef CONFIG_NXPLAYER_INCLUDE_PREFERRED_DEVICE
char prefdevice[CONFIG_NAME_MAX]; /* Preferred audio device */
int prefformat; /* Formats supported by preferred device */
@ -74,7 +74,7 @@ struct nxplayer_s
char mediadir[CONFIG_NAME_MAX]; /* Root media directory where media is located */
#endif
#ifdef CONFIG_AUDIO_MULTI_SESSION
FAR void* session; /* Session assigment from device */
FAR void *session; /* Session assigment from device */
#endif
#ifndef CONFIG_AUDIO_EXCLUDE_VOLUME
uint16_t volume; /* Volume as a whole percentage (0-100) */
@ -88,7 +88,7 @@ struct nxplayer_s
#endif
};
typedef int (*nxplayer_func)(FAR struct nxplayer_s* pPlayer, char* pargs);
typedef int (*nxplayer_func)(FAR struct nxplayer_s *pPlayer, char *pargs);
/****************************************************************************
* Public Data

View File

@ -114,4 +114,12 @@ config NXPLAYER_INCLUDE_SYSTEM_RESET
a HW reset via program call. The system reset will perform
a reset on all registered audio devices.
config NXPLAYER_HTTP_STREAMING_SUPPORT
bool "Include support for http streaming"
default n
depends on NET_IPv4 && NET_TCP
---help---
When enabled, this feature will add code to enable HTTP
audio streaming as well as local file playback.
endif

View File

@ -49,6 +49,13 @@
#include <sys/types.h>
#include <sys/ioctl.h>
#ifdef CONFIG_NXPLAYER_HTTP_STREAMING_SUPPORT
# include <sys/time.h>
# include <sys/socket.h>
# include <arpa/inet.h>
# include <netdb.h>
#endif
#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
@ -60,6 +67,7 @@
#include <dirent.h>
#include <debug.h>
#include <nuttx/audio/audio.h>
#include "system/nxplayer.h"
@ -96,7 +104,7 @@ struct nxplayer_ext_fmt_s
{
const char *ext;
uint16_t format;
CODE int (*getsubformat)(FAR FILE *fd);
CODE int (*getsubformat)(int fd);
};
#endif
@ -105,7 +113,7 @@ struct nxplayer_ext_fmt_s
****************************************************************************/
#ifdef CONFIG_AUDIO_FORMAT_MIDI
int nxplayer_getmidisubformat(FAR FILE *fd);
int nxplayer_getmidisubformat(int fd);
#endif
/****************************************************************************
@ -145,6 +153,139 @@ static const int g_known_ext_count = sizeof(g_known_ext) /
* Private Functions
****************************************************************************/
/****************************************************************************
****************************************************************************/
#ifdef CONFIG_NXPLAYER_HTTP_STREAMING_SUPPORT
/****************************************************************************
* Name: _open_with_http
*
* _open_with_http() opens specified fullurl which is http:// or local file
* path and returns a file descriptor.
*
****************************************************************************/
static int _open_with_http(const char *fullurl)
{
char relativeurl[32];
char hostname[32];
int resp_chk = 0;
char resp_msg[] = "\r\n\r\n";
struct timeval tv;
int a[4];
int port;
char buf[64];
int s;
int n;
char c;
if (NULL == strstr(fullurl, "http://"))
{
/* assumes local file specified */
s = open(fullurl, O_RDONLY);
return s;
}
memset(relativeurl, 0, sizeof(relativeurl));
#ifdef CONFIG_NET_IPv4
n = sscanf(fullurl, "http://%d.%d.%d.%d:%d/%s",
&a[0], &a[1], &a[2], &a[3], &port, relativeurl);
if (6 != n)
{
n = sscanf(fullurl, "http://%d.%d.%d.%d/%s",
&a[0], &a[1], &a[2], &a[3], relativeurl);
ASSERT(n == 5);
port = 80;
}
snprintf(hostname, sizeof(hostname),
"%d.%d.%d.%d", a[0], a[1], a[2], a[3]);
#else
#error "Only IPv4 is supported. "
#endif
s = socket(AF_INET, SOCK_STREAM, 0);
ASSERT(s != -1);
tv.tv_sec = 10; /* TODO */
tv.tv_usec = 0;
(void)setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (FAR const void *)&tv,
sizeof(struct timeval));
(void)setsockopt(s, SOL_SOCKET, SO_SNDTIMEO, (FAR const void *)&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,
he->h_addr, sizeof(in_addr_t));
n = connect(s,
(struct sockaddr *)&server,
sizeof(struct sockaddr_in));
if (-1 == n)
{
close(s);
return -1;
}
/* Send GET request */
snprintf(buf, sizeof(buf), "GET /%s HTTP/1.0\r\n\r\n", relativeurl);
n = write(s, buf, strlen(buf));
usleep(100 * 1000); /* TODO */
/* Check status line : e.g. "HTTP/1.x XXX" */
memset(buf, 0, sizeof(buf));
read(s, buf, 12);
n = atoi(buf + 9);
if (200 != n)
{
close(s);
return -1;
}
/* Skip response header */
while (1)
{
n = read(s, &c, 1);
if (1 == n)
{
if (resp_msg[resp_chk] == c)
{
resp_chk++;
}
else
{
resp_chk = 0;
}
}
if (resp_chk == 4)
{
break;
}
}
return s;
}
#endif
/****************************************************************************
* Name: nxplayer_opendevice
*
@ -355,15 +496,15 @@ static int nxplayer_opendevice(FAR struct nxplayer_s *pPlayer, int format,
****************************************************************************/
#ifdef CONFIG_AUDIO_FORMAT_MIDI
int nxplayer_getmidisubformat(FAR FILE *fd)
int nxplayer_getmidisubformat(int fd)
{
char type[2];
int ret;
/* Seek to location 8 in the file (the format type) */
fseek(fd, 8, SEEK_SET);
fread(type, 1, 2, fd);
lseek(fd, 8, SEEK_SET);
read(fd, type, sizeof(type));
/* Set return value based on type */
@ -381,7 +522,7 @@ int nxplayer_getmidisubformat(FAR FILE *fd)
ret = AUDIO_SUBFMT_MIDI_2;
break;
}
fseek(fd, 0, SEEK_SET);
lseek(fd, 0, SEEK_SET);
return ret;
}
@ -426,7 +567,7 @@ static inline int nxplayer_fmtfromextension(FAR struct nxplayer_s *pPlayer,
if (subfmt && g_known_ext[c].getsubformat)
{
*subfmt = g_known_ext[c].getsubformat(pPlayer->fileFd);
*subfmt = g_known_ext[c].getsubformat(pPlayer->fd);
}
/* Return the format for this extension */
@ -492,14 +633,14 @@ static int nxplayer_mediasearch(FAR struct nxplayer_s *pPlayer,
****************************************************************************/
static int nxplayer_readbuffer(FAR struct nxplayer_s *pPlayer,
FAR struct ap_buffer_s* apb)
FAR struct ap_buffer_s *apb)
{
/* Validate the file is still open. It will be closed automatically when
* we encounter the end of file (or, perhaps, a read error that we cannot
* handle.
*/
if (pPlayer->fileFd == NULL)
if (pPlayer->fd == -1)
{
/* Return -ENODATA to indicate that there is nothing more to read from
* the file.
@ -510,26 +651,43 @@ static int nxplayer_readbuffer(FAR struct nxplayer_s *pPlayer,
/* Read data into the buffer. */
apb->nbytes = fread(&apb->samp, 1, apb->nmaxbytes, pPlayer->fileFd);
apb->nbytes = read(pPlayer->fd, &apb->samp, apb->nmaxbytes);
apb->curbyte = 0;
apb->flags = 0;
#ifdef CONFIG_NXPLAYER_HTTP_STREAMING_SUPPORT
/* read data up to nmaxbytes from network */
while (0 < apb->nbytes && apb->nbytes < apb->nmaxbytes)
{
int n = apb->nmaxbytes - apb->nbytes;
int ret = read(pPlayer->fd, &apb->samp[apb->nbytes], n);
if (0 >= ret)
{
break;
}
apb->nbytes += ret;
usleep(10 * 1000);
}
#endif
if (apb->nbytes < apb->nmaxbytes)
{
#ifdef CONFIG_DEBUG_AUDIO_INFO
int errcode = errno;
int readerror = ferror(pPlayer->fileFd);
audinfo("Closing audio file, nbytes=%d readerr=%d\n",
apb->nbytes, readerror);
audinfo("Closing audio file, nbytes=%d errcode=%d\n",
apb->nbytes, errorcode);
#endif
/* End of file or read error.. We are finished with this file in any
* event.
*/
fclose(pPlayer->fileFd);
pPlayer->fileFd = NULL;
close(pPlayer->fd);
pPlayer->fd = -1;
/* Set a flag to indicate that this is the final buffer in the stream */
@ -574,7 +732,7 @@ static int nxplayer_readbuffer(FAR struct nxplayer_s *pPlayer,
****************************************************************************/
static int nxplayer_enqueuebuffer(FAR struct nxplayer_s *pPlayer,
FAR struct ap_buffer_s* apb)
FAR struct ap_buffer_s *apb)
{
struct audio_buf_desc_s bufdesc;
int ret;
@ -629,9 +787,9 @@ static void *nxplayer_playthread(pthread_addr_t pvarg)
bool failed = false;
#ifdef CONFIG_AUDIO_DRIVER_SPECIFIC_BUFFERS
struct ap_buffer_info_s buf_info;
FAR struct ap_buffer_s** pBuffers;
FAR struct ap_buffer_s **pBuffers;
#else
FAR struct ap_buffer_s* pBuffers[CONFIG_AUDIO_NUM_BUFFERS];
FAR struct ap_buffer_s *pBuffers[CONFIG_AUDIO_NUM_BUFFERS];
#endif
#ifdef CONFIG_DEBUG_FEATURES
int outstanding = 0;
@ -760,8 +918,8 @@ static void *nxplayer_playthread(pthread_addr_t pvarg)
* file so that no further data is read.
*/
fclose(pPlayer->fileFd);
pPlayer->fileFd = NULL;
close(pPlayer->fd);
pPlayer->fd = -1;
/* We are no longer streaming data from the file. Be we will
* need to wait for any outstanding buffers to be recovered. We
@ -919,8 +1077,8 @@ static void *nxplayer_playthread(pthread_addr_t pvarg)
* Close the file so that no further data is read.
*/
fclose(pPlayer->fileFd);
pPlayer->fileFd = NULL;
close(pPlayer->fd);
pPlayer->fd = -1;
/* Stop streaming and wait for buffers to be
* returned and to receive the AUDIO_MSG_COMPLETE
@ -1032,10 +1190,10 @@ err_out:
/* Close the files */
if (pPlayer->fileFd != NULL)
if (0 < pPlayer->fd)
{
fclose(pPlayer->fileFd); /* Close the file */
pPlayer->fileFd = NULL; /* Clear out the FD */
close(pPlayer->fd); /* Close the file */
pPlayer->fd = -1; /* Clear out the FD */
}
close(pPlayer->devFd); /* Close the device */
@ -1091,7 +1249,7 @@ int nxplayer_setvolume(FAR struct nxplayer_s *pPlayer, uint16_t volume)
/* Send a CONFIGURE ioctl to the device to set the volume */
#ifdef CONFIG_AUDIO_MULTI_SESSION
cap_desc.session= pPlayer->session;
cap_desc.session = pPlayer->session;
#endif
cap_desc.caps.ac_len = sizeof(struct audio_caps_s);
cap_desc.caps.ac_type = AUDIO_TYPE_FEATURE;
@ -1177,7 +1335,7 @@ int nxplayer_setbass(FAR struct nxplayer_s *pPlayer, uint8_t level)
/* Send a CONFIGURE ioctl to the device to set the volume */
#ifdef CONFIG_AUDIO_MULTI_SESSION
cap_desc.session= pPlayer->session;
cap_desc.session = pPlayer->session;
#endif
cap_desc.caps.ac_len = sizeof(struct audio_caps_s);
cap_desc.caps.ac_type = AUDIO_TYPE_FEATURE;
@ -1229,7 +1387,7 @@ int nxplayer_settreble(FAR struct nxplayer_s *pPlayer, uint8_t level)
/* Send a CONFIGURE ioctl to the device to set the volume */
#ifdef CONFIG_AUDIO_MULTI_SESSION
cap_desc.session= pPlayer->session;
cap_desc.session = pPlayer->session;
#endif
cap_desc.caps.ac_len = sizeof(struct audio_caps_s);
cap_desc.caps.ac_type = AUDIO_TYPE_FEATURE;
@ -1446,7 +1604,7 @@ int nxplayer_rewind(FAR struct nxplayer_s *pPlayer, uint8_t subsample)
/* Send a CONFIGURE ioctl to the device to set the forward rate */
#ifdef CONFIG_AUDIO_MULTI_SESSION
cap_desc.session= pPlayer->session;
cap_desc.session = pPlayer->session;
#endif
cap_desc.caps.ac_len = sizeof(struct audio_caps_s);
cap_desc.caps.ac_type = AUDIO_TYPE_PROCESSING;
@ -1587,7 +1745,7 @@ int nxplayer_setdevice(FAR struct nxplayer_s *pPlayer, FAR const char *pDevice)
int nxplayer_stop(FAR struct nxplayer_s *pPlayer)
{
struct audio_msg_s term_msg;
FAR void* value;
FAR void *value;
DEBUGASSERT(pPlayer != NULL);
@ -1668,14 +1826,18 @@ int nxplayer_playfile(FAR struct nxplayer_s *pPlayer,
/* Test that the specified file exists */
if ((pPlayer->fileFd = fopen(pFilename, "r")) == NULL)
#ifdef CONFIG_NXPLAYER_HTTP_STREAMING_SUPPORT
if ((pPlayer->fd = _open_with_http(pFilename)) == -1)
#else
if ((pPlayer->fd = open(pFilename, O_RDONLY)) == -1)
#endif
{
/* File not found. Test if its in the mediadir */
#ifdef CONFIG_NXPLAYER_INCLUDE_MEDIADIR
snprintf(path, sizeof(path), "%s/%s", pPlayer->mediadir, pFilename);
if ((pPlayer->fileFd = fopen(path, "r")) == NULL)
if ((pPlayer->fd = open(path, O_RDONLY)) == -1)
{
#ifdef CONFIG_NXPLAYER_MEDIA_SEARCH
/* File not found in the media dir. Do a search */
@ -1828,10 +1990,10 @@ err_out:
pPlayer->devFd = -1;
err_out_nodev:
if (pPlayer->fileFd != NULL)
if (0 < pPlayer->fd)
{
fclose(pPlayer->fileFd);
pPlayer->fileFd = NULL;
close(pPlayer->fd);
pPlayer->fd = -1;
}
return ret;
@ -1882,7 +2044,7 @@ FAR struct nxplayer_s *nxplayer_create(void)
pPlayer->state = NXPLAYER_STATE_IDLE;
pPlayer->devFd = -1;
pPlayer->fileFd = NULL;
pPlayer->fd = -1;
#ifdef CONFIG_NXPLAYER_INCLUDE_PREFERRED_DEVICE
pPlayer->prefdevice[0] = '\0';
pPlayer->prefformat = 0;
@ -1931,10 +2093,10 @@ FAR struct nxplayer_s *nxplayer_create(void)
*
****************************************************************************/
void nxplayer_release(FAR struct nxplayer_s* pPlayer)
void nxplayer_release(FAR struct nxplayer_s *pPlayer)
{
int refcount;
FAR void* value;
FAR void *value;
/* Grab the semaphore */
@ -1996,7 +2158,7 @@ void nxplayer_release(FAR struct nxplayer_s* pPlayer)
*
****************************************************************************/
void nxplayer_reference(FAR struct nxplayer_s* pPlayer)
void nxplayer_reference(FAR struct nxplayer_s *pPlayer)
{
/* Grab the semaphore */
@ -2032,7 +2194,7 @@ void nxplayer_reference(FAR struct nxplayer_s* pPlayer)
*
****************************************************************************/
void nxplayer_detach(FAR struct nxplayer_s* pPlayer)
void nxplayer_detach(FAR struct nxplayer_s *pPlayer)
{
#if 0
/* Grab the semaphore */

View File

@ -56,7 +56,7 @@
* Pre-processor Definitions
****************************************************************************/
#define NXPLAYER_VER "1.04"
#define NXPLAYER_VER "1.05"
#ifdef CONFIG_NXPLAYER_INCLUDE_HELP
# define NXPLAYER_HELP_TEXT(x) #x
@ -79,44 +79,44 @@ struct mp_cmd_s {
* Private Function Prototypes
****************************************************************************/
static int nxplayer_cmd_quit(FAR struct nxplayer_s *pPlayer, char* parg);
static int nxplayer_cmd_play(FAR struct nxplayer_s *pPlayer, char* parg);
static int nxplayer_cmd_quit(FAR struct nxplayer_s *pPlayer, char *parg);
static int nxplayer_cmd_play(FAR struct nxplayer_s *pPlayer, char *parg);
#ifdef CONFIG_NXPLAYER_INCLUDE_SYSTEM_RESET
static int nxplayer_cmd_reset(FAR struct nxplayer_s *pPlayer, char* parg);
static int nxplayer_cmd_reset(FAR struct nxplayer_s *pPlayer, char *parg);
#endif
#ifdef CONFIG_NXPLAYER_INCLUDE_PREFERRED_DEVICE
static int nxplayer_cmd_device(FAR struct nxplayer_s *pPlayer, char* parg);
static int nxplayer_cmd_device(FAR struct nxplayer_s *pPlayer, char *parg);
#endif
#ifndef CONFIG_AUDIO_EXCLUDE_PAUSE_RESUME
static int nxplayer_cmd_pause(FAR struct nxplayer_s *pPlayer, char* parg);
static int nxplayer_cmd_resume(FAR struct nxplayer_s *pPlayer, char* parg);
static int nxplayer_cmd_pause(FAR struct nxplayer_s *pPlayer, char *parg);
static int nxplayer_cmd_resume(FAR struct nxplayer_s *pPlayer, char *parg);
#endif
#ifdef CONFIG_NXPLAYER_INCLUDE_MEDIADIR
static int nxplayer_cmd_mediadir(FAR struct nxplayer_s *pPlayer, char* parg);
static int nxplayer_cmd_mediadir(FAR struct nxplayer_s *pPlayer, char *parg);
#endif
#ifndef CONFIG_AUDIO_EXCLUDE_STOP
static int nxplayer_cmd_stop(FAR struct nxplayer_s *pPlayer, char* parg);
static int nxplayer_cmd_stop(FAR struct nxplayer_s *pPlayer, char *parg);
#endif
#ifndef CONFIG_AUDIO_EXCLUDE_VOLUME
static int nxplayer_cmd_volume(FAR struct nxplayer_s *pPlayer, char* parg);
static int nxplayer_cmd_volume(FAR struct nxplayer_s *pPlayer, char *parg);
#ifndef CONFIG_AUDIO_EXCLUDE_BALANCE
static int nxplayer_cmd_balance(FAR struct nxplayer_s *pPlayer, char* parg);
static int nxplayer_cmd_balance(FAR struct nxplayer_s *pPlayer, char *parg);
#endif
#endif
#ifndef CONFIG_AUDIO_EXCLUDE_TONE
static int nxplayer_cmd_bass(FAR struct nxplayer_s *pPlayer, char* parg);
static int nxplayer_cmd_treble(FAR struct nxplayer_s *pPlayer, char* parg);
static int nxplayer_cmd_bass(FAR struct nxplayer_s *pPlayer, char *parg);
static int nxplayer_cmd_treble(FAR struct nxplayer_s *pPlayer, char *parg);
#endif
#ifdef CONFIG_NXPLAYER_INCLUDE_HELP
static int nxplayer_cmd_help(FAR struct nxplayer_s *pPlayer, char* parg);
static int nxplayer_cmd_help(FAR struct nxplayer_s *pPlayer, char *parg);
#endif
/****************************************************************************
@ -156,7 +156,7 @@ static struct mp_cmd_s g_nxplayer_cmds[] =
#ifndef CONFIG_AUDIO_EXCLUDE_STOP
{ "stop", "", nxplayer_cmd_stop, NXPLAYER_HELP_TEXT(Stop playback) },
#endif
{ "tone", "freq secs",NULL, NXPLAYER_HELP_TEXT(Produce a pure tone) },
{ "tone", "freq secs", NULL, NXPLAYER_HELP_TEXT(Produce a pure tone) },
#ifndef CONFIG_AUDIO_EXCLUDE_TONE
{ "treble", "d%", nxplayer_cmd_treble, NXPLAYER_HELP_TEXT(Set treble level percentage) },
#endif
@ -181,7 +181,7 @@ static const int g_nxplayer_cmd_count = sizeof(g_nxplayer_cmds) / sizeof(struct
*
****************************************************************************/
static int nxplayer_cmd_play(FAR struct nxplayer_s *pPlayer, char* parg)
static int nxplayer_cmd_play(FAR struct nxplayer_s *pPlayer, char *parg)
{
int ret;
@ -235,7 +235,7 @@ static int nxplayer_cmd_play(FAR struct nxplayer_s *pPlayer, char* parg)
****************************************************************************/
#ifndef CONFIG_AUDIO_EXCLUDE_VOLUME
static int nxplayer_cmd_volume(FAR struct nxplayer_s *pPlayer, char* parg)
static int nxplayer_cmd_volume(FAR struct nxplayer_s *pPlayer, char *parg)
{
uint16_t percent;
@ -265,7 +265,7 @@ static int nxplayer_cmd_volume(FAR struct nxplayer_s *pPlayer, char* parg)
****************************************************************************/
#ifndef CONFIG_AUDIO_EXCLUDE_TONE
static int nxplayer_cmd_bass(FAR struct nxplayer_s *pPlayer, char* parg)
static int nxplayer_cmd_bass(FAR struct nxplayer_s *pPlayer, char *parg)
{
uint8_t level_percent;
@ -295,7 +295,7 @@ static int nxplayer_cmd_bass(FAR struct nxplayer_s *pPlayer, char* parg)
****************************************************************************/
#ifndef CONFIG_AUDIO_EXCLUDE_TONE
static int nxplayer_cmd_treble(FAR struct nxplayer_s *pPlayer, char* parg)
static int nxplayer_cmd_treble(FAR struct nxplayer_s *pPlayer, char *parg)
{
uint8_t level_percent;
@ -326,7 +326,7 @@ static int nxplayer_cmd_treble(FAR struct nxplayer_s *pPlayer, char* parg)
#ifndef CONFIG_AUDIO_EXCLUDE_VOLUME
#ifndef CONFIG_AUDIO_EXCLUDE_BALANCE
static int nxplayer_cmd_balance(FAR struct nxplayer_s *pPlayer, char* parg)
static int nxplayer_cmd_balance(FAR struct nxplayer_s *pPlayer, char *parg)
{
uint16_t percent;
@ -357,7 +357,7 @@ static int nxplayer_cmd_balance(FAR struct nxplayer_s *pPlayer, char* parg)
****************************************************************************/
#ifdef CONFIG_NXPLAYER_INCLUDE_SYSTEM_RESET
static int nxplayer_cmd_reset(FAR struct nxplayer_s *pPlayer, char* parg)
static int nxplayer_cmd_reset(FAR struct nxplayer_s *pPlayer, char *parg)
{
nxplayer_systemreset(pPlayer);
@ -374,7 +374,7 @@ static int nxplayer_cmd_reset(FAR struct nxplayer_s *pPlayer, char* parg)
****************************************************************************/
#ifdef CONFIG_NXPLAYER_INCLUDE_MEDIADIR
static int nxplayer_cmd_mediadir(FAR struct nxplayer_s *pPlayer, char* parg)
static int nxplayer_cmd_mediadir(FAR struct nxplayer_s *pPlayer, char *parg)
{
/* If no arg given, then print current media dir */
@ -396,7 +396,7 @@ static int nxplayer_cmd_mediadir(FAR struct nxplayer_s *pPlayer, char* parg)
****************************************************************************/
#ifndef CONFIG_AUDIO_EXCLUDE_STOP
static int nxplayer_cmd_stop(FAR struct nxplayer_s *pPlayer, char* parg)
static int nxplayer_cmd_stop(FAR struct nxplayer_s *pPlayer, char *parg)
{
/* Stop the playback */
@ -415,7 +415,7 @@ static int nxplayer_cmd_stop(FAR struct nxplayer_s *pPlayer, char* parg)
****************************************************************************/
#ifndef CONFIG_AUDIO_EXCLUDE_PAUSE_RESUME
static int nxplayer_cmd_pause(FAR struct nxplayer_s *pPlayer, char* parg)
static int nxplayer_cmd_pause(FAR struct nxplayer_s *pPlayer, char *parg)
{
/* Pause the playback */
@ -434,7 +434,7 @@ static int nxplayer_cmd_pause(FAR struct nxplayer_s *pPlayer, char* parg)
****************************************************************************/
#ifndef CONFIG_AUDIO_EXCLUDE_PAUSE_RESUME
static int nxplayer_cmd_resume(FAR struct nxplayer_s *pPlayer, char* parg)
static int nxplayer_cmd_resume(FAR struct nxplayer_s *pPlayer, char *parg)
{
/* Resume the playback */
@ -452,7 +452,7 @@ static int nxplayer_cmd_resume(FAR struct nxplayer_s *pPlayer, char* parg)
****************************************************************************/
#ifdef CONFIG_NXPLAYER_INCLUDE_PREFERRED_DEVICE
static int nxplayer_cmd_device(FAR struct nxplayer_s *pPlayer, char* parg)
static int nxplayer_cmd_device(FAR struct nxplayer_s *pPlayer, char *parg)
{
int ret;
char path[32];
@ -511,7 +511,7 @@ static int nxplayer_cmd_device(FAR struct nxplayer_s *pPlayer, char* parg)
* nxplayer_cmd_quit() terminates the application
****************************************************************************/
static int nxplayer_cmd_quit(FAR struct nxplayer_s *pPlayer, char* parg)
static int nxplayer_cmd_quit(FAR struct nxplayer_s *pPlayer, char *parg)
{
/* Stop the playback if any */
@ -530,7 +530,7 @@ static int nxplayer_cmd_quit(FAR struct nxplayer_s *pPlayer, char* parg)
****************************************************************************/
#ifdef CONFIG_NXPLAYER_INCLUDE_HELP
static int nxplayer_cmd_help(FAR struct nxplayer_s *pPlayer, char* parg)
static int nxplayer_cmd_help(FAR struct nxplayer_s *pPlayer, char *parg)
{
int x, len, maxlen = 0;
int c;
@ -673,7 +673,7 @@ int nxplayer_main(int argc, char *argv[])
/* Release the NxPlayer context */
// nxplayer_detach(pPlayer);
/* nxplayer_detach(pPlayer); */
nxplayer_release(pPlayer);
return OK;