system: nxplayer and nxrecorder shouldn't hardcode message length to 16

the audio driver may config a very large buffer count,
so let's adjust the message queue length dynamically.

Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
This commit is contained in:
Xiang Xiao 2020-12-14 18:13:54 +08:00 committed by Alin Jerpelea
parent 0c3ee06fb3
commit 16c6e1f0b8
2 changed files with 28 additions and 6 deletions

View File

@ -791,12 +791,12 @@ static void *nxplayer_playthread(pthread_addr_t pvarg)
audinfo("Entry\n"); audinfo("Entry\n");
/* Query the audio device for it's preferred buffer size / qty */ /* Query the audio device for its preferred buffer size / qty */
if ((ret = ioctl(pplayer->dev_fd, AUDIOIOC_GETBUFFERINFO, if ((ret = ioctl(pplayer->dev_fd, AUDIOIOC_GETBUFFERINFO,
(unsigned long) &buf_info)) != OK) (unsigned long) &buf_info)) != OK)
{ {
/* Driver doesn't report it's buffer size. Use our default. */ /* Driver doesn't report its buffer size. Use our default. */
buf_info.buffer_size = CONFIG_AUDIO_BUFFER_NUMBYTES; buf_info.buffer_size = CONFIG_AUDIO_BUFFER_NUMBYTES;
buf_info.nbuffers = CONFIG_AUDIO_NUM_BUFFERS; buf_info.nbuffers = CONFIG_AUDIO_NUM_BUFFERS;
@ -1797,6 +1797,7 @@ static int nxplayer_playinternal(FAR struct nxplayer_s *pplayer,
pthread_attr_t tattr; pthread_attr_t tattr;
FAR void *value; FAR void *value;
struct audio_caps_desc_s cap_desc; struct audio_caps_desc_s cap_desc;
struct ap_buffer_info_s buf_info;
#ifdef CONFIG_NXPLAYER_INCLUDE_MEDIADIR #ifdef CONFIG_NXPLAYER_INCLUDE_MEDIADIR
char path[128]; char path[128];
#endif #endif
@ -1932,9 +1933,19 @@ static int nxplayer_playinternal(FAR struct nxplayer_s *pplayer,
ioctl(pplayer->dev_fd, AUDIOIOC_CONFIGURE, (unsigned long)&cap_desc); ioctl(pplayer->dev_fd, AUDIOIOC_CONFIGURE, (unsigned long)&cap_desc);
} }
/* Query the audio device for its preferred buffer count */
if (ioctl(pplayer->dev_fd, AUDIOIOC_GETBUFFERINFO,
(unsigned long)&buf_info) != OK)
{
/* Driver doesn't report its buffer size. Use our default. */
buf_info.nbuffers = CONFIG_AUDIO_NUM_BUFFERS;
}
/* Create a message queue for the playthread */ /* Create a message queue for the playthread */
attr.mq_maxmsg = 16; attr.mq_maxmsg = buf_info.nbuffers + 8;
attr.mq_msgsize = sizeof(struct audio_msg_s); attr.mq_msgsize = sizeof(struct audio_msg_s);
attr.mq_curmsgs = 0; attr.mq_curmsgs = 0;
attr.mq_flags = 0; attr.mq_flags = 0;

View File

@ -242,12 +242,12 @@ static void *nxrecorder_recordthread(pthread_addr_t pvarg)
audinfo("Entry\n"); audinfo("Entry\n");
/* Query the audio device for it's preferred buffer size / qty */ /* Query the audio device for its preferred buffer size / qty */
if ((ret = ioctl(precorder->dev_fd, AUDIOIOC_GETBUFFERINFO, if ((ret = ioctl(precorder->dev_fd, AUDIOIOC_GETBUFFERINFO,
(unsigned long) &buf_info)) != OK) (unsigned long) &buf_info)) != OK)
{ {
/* Driver doesn't report it's buffer size. Use our default. */ /* Driver doesn't report its buffer size. Use our default. */
buf_info.buffer_size = CONFIG_AUDIO_BUFFER_NUMBYTES; buf_info.buffer_size = CONFIG_AUDIO_BUFFER_NUMBYTES;
buf_info.nbuffers = CONFIG_AUDIO_NUM_BUFFERS; buf_info.nbuffers = CONFIG_AUDIO_NUM_BUFFERS;
@ -773,6 +773,7 @@ int nxrecorder_recordraw(FAR struct nxrecorder_s *precorder,
struct sched_param sparam; struct sched_param sparam;
pthread_attr_t tattr; pthread_attr_t tattr;
struct audio_caps_desc_s cap_desc; struct audio_caps_desc_s cap_desc;
struct ap_buffer_info_s buf_info;
FAR void *value; FAR void *value;
int ret; int ret;
@ -844,9 +845,19 @@ int nxrecorder_recordraw(FAR struct nxrecorder_s *precorder,
goto err_out; goto err_out;
} }
/* Query the audio device for its preferred buffer count */
if (ioctl(precorder->dev_fd, AUDIOIOC_GETBUFFERINFO,
(unsigned long)&buf_info) != OK)
{
/* Driver doesn't report its buffer size. Use our default. */
buf_info.nbuffers = CONFIG_AUDIO_NUM_BUFFERS;
}
/* Create a message queue for the recordthread */ /* Create a message queue for the recordthread */
attr.mq_maxmsg = 16; attr.mq_maxmsg = buf_info.nbuffers + 8;
attr.mq_msgsize = sizeof(struct audio_msg_s); attr.mq_msgsize = sizeof(struct audio_msg_s);
attr.mq_curmsgs = 0; attr.mq_curmsgs = 0;
attr.mq_flags = 0; attr.mq_flags = 0;