Skip to content

Commit 6d0a039

Browse files
anchaoxiaoxiang781216
authored andcommitted
system/nxplayer/nxrecorder: move apb buffer instance to stack
move apb buffer instance to stack to avoid alloc buffer from heap Signed-off-by: chao an <[email protected]>
1 parent e280e9b commit 6d0a039

File tree

2 files changed

+22
-63
lines changed

2 files changed

+22
-63
lines changed

system/nxplayer/nxplayer.c

+11-31
Original file line numberDiff line numberDiff line change
@@ -796,7 +796,6 @@ static FAR void *nxplayer_playthread(pthread_addr_t pvarg)
796796
bool streaming = true;
797797
bool failed = false;
798798
struct ap_buffer_info_s buf_info;
799-
FAR struct ap_buffer_s **buffers;
800799
unsigned int prio;
801800
#ifdef CONFIG_DEBUG_FEATURES
802801
int outstanding = 0;
@@ -819,23 +818,11 @@ static FAR void *nxplayer_playthread(pthread_addr_t pvarg)
819818

820819
/* Create array of pointers to buffers */
821820

822-
buffers = (FAR struct ap_buffer_s **)
823-
malloc(buf_info.nbuffers * sizeof(FAR void *));
824-
if (buffers == NULL)
825-
{
826-
/* Error allocating memory for buffer storage! */
827-
828-
ret = -ENOMEM;
829-
running = false;
830-
goto err_out;
831-
}
821+
FAR struct ap_buffer_s *buffers[buf_info.nbuffers];
832822

833823
/* Create our audio pipeline buffers to use for queueing up data */
834824

835-
for (x = 0; x < buf_info.nbuffers; x++)
836-
{
837-
buffers[x] = NULL;
838-
}
825+
memset(buffers, 0, sizeof(buffers));
839826

840827
for (x = 0; x < buf_info.nbuffers; x++)
841828
{
@@ -1145,27 +1132,20 @@ static FAR void *nxplayer_playthread(pthread_addr_t pvarg)
11451132
err_out:
11461133
audinfo("Clean-up and exit\n");
11471134

1148-
if (buffers != NULL)
1135+
audinfo("Freeing buffers\n");
1136+
for (x = 0; x < buf_info.nbuffers; x++)
11491137
{
1150-
audinfo("Freeing buffers\n");
1151-
for (x = 0; x < buf_info.nbuffers; x++)
1152-
{
1153-
/* Fill in the buffer descriptor struct to issue a free request */
1138+
/* Fill in the buffer descriptor struct to issue a free request */
11541139

1155-
if (buffers[x] != NULL)
1156-
{
1140+
if (buffers[x] != NULL)
1141+
{
11571142
#ifdef CONFIG_AUDIO_MULTI_SESSION
1158-
buf_desc.session = pplayer->session;
1143+
buf_desc.session = pplayer->session;
11591144
#endif
1160-
buf_desc.u.buffer = buffers[x];
1161-
ioctl(pplayer->dev_fd, AUDIOIOC_FREEBUFFER,
1162-
(unsigned long)&buf_desc);
1163-
}
1145+
buf_desc.u.buffer = buffers[x];
1146+
ioctl(pplayer->dev_fd, AUDIOIOC_FREEBUFFER,
1147+
(unsigned long)&buf_desc);
11641148
}
1165-
1166-
/* Free the pointers to the buffers */
1167-
1168-
free(buffers);
11691149
}
11701150

11711151
/* Unregister the message queue and release the session */

system/nxrecorder/nxrecorder.c

+11-32
Original file line numberDiff line numberDiff line change
@@ -528,7 +528,6 @@ static FAR void *nxrecorder_recordthread(pthread_addr_t pvarg)
528528
bool streaming = true;
529529
bool failed = false;
530530
struct ap_buffer_info_s buf_info;
531-
FAR struct ap_buffer_s **pbuffers;
532531
unsigned int prio;
533532
#ifdef CONFIG_DEBUG_FEATURES
534533
int outstanding = 0;
@@ -551,23 +550,11 @@ static FAR void *nxrecorder_recordthread(pthread_addr_t pvarg)
551550

552551
/* Create array of pointers to buffers */
553552

554-
pbuffers = (FAR struct ap_buffer_s **) malloc(buf_info.nbuffers *
555-
sizeof(FAR void *));
556-
if (pbuffers == NULL)
557-
{
558-
/* Error allocating memory for buffer storage! */
559-
560-
ret = -ENOMEM;
561-
running = false;
562-
goto err_out;
563-
}
553+
FAR struct ap_buffer_s *pbuffers[buf_info.nbuffers];
564554

565555
/* Create our audio pipeline buffers to use for queueing up data */
566556

567-
for (x = 0; x < buf_info.nbuffers; x++)
568-
{
569-
pbuffers[x] = NULL;
570-
}
557+
memset(pbuffers, 0, sizeof(pbuffers));
571558

572559
for (x = 0; x < buf_info.nbuffers; x++)
573560
{
@@ -820,28 +807,20 @@ static FAR void *nxrecorder_recordthread(pthread_addr_t pvarg)
820807
err_out:
821808
audinfo("Clean-up and exit\n");
822809

823-
if (pbuffers != NULL)
810+
audinfo("Freeing buffers\n");
811+
for (x = 0; x < buf_info.nbuffers; x++)
824812
{
825-
audinfo("Freeing buffers\n");
826-
for (x = 0; x < buf_info.nbuffers; x++)
827-
{
828-
/* Fill in the buffer descriptor struct to issue a free request */
813+
/* Fill in the buffer descriptor struct to issue a free request */
829814

830-
if (pbuffers[x] != NULL)
831-
{
815+
if (pbuffers[x] != NULL)
816+
{
832817
#ifdef CONFIG_AUDIO_MULTI_SESSION
833-
buf_desc.session = precorder->session;
818+
buf_desc.session = precorder->session;
834819
#endif
835-
buf_desc.u.buffer = pbuffers[x];
836-
ioctl(precorder->dev_fd,
837-
AUDIOIOC_FREEBUFFER,
838-
(uintptr_t)&buf_desc);
839-
}
820+
buf_desc.u.buffer = pbuffers[x];
821+
ioctl(precorder->dev_fd, AUDIOIOC_FREEBUFFER,
822+
(uintptr_t)&buf_desc);
840823
}
841-
842-
/* Free the pointers to the buffers */
843-
844-
free(pbuffers);
845824
}
846825

847826
/* Unregister the message queue and release the session */

0 commit comments

Comments
 (0)