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:
parent
0c3ee06fb3
commit
16c6e1f0b8
@ -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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user