Maestro Audio Framework v 1.7
NXP Semiconductors
Loading...
Searching...
No Matches
streamer.c File Reference

Af Streamer implementation. More...

#include <string.h>
#include "streamer_element.h"
#include "pipeline.h"

Functions

void streamer_task (void *args)
 Streamer Task.
 
void streamer_init (STREAMER_T *streamer)
 Streamer Initialize.
 
int streamer_msg_handler (STREAMER_T *task_data, STREAMER_MSG_T *msg)
 Streamer Message Handler.
 
int streamer_process_pipelines (STREAMER_T *task_data)
 Streamer Process Pipelines.
 
static int32_t streamer_handle_msg (STREAMER_T *streamer, STREAMER_MSG_T *msg, bool block)
 Streamer handle message.
 
int32_t streamer_create_pipeline (STREAMER_T *streamer, int32_t pipeline_id, const char *in_dev_name, const char *out_dev_name, PipelineElements elements, bool block)
 Create a pipeline that will handle the different connected elements.
 
int32_t streamer_destroy_pipeline (STREAMER_T *streamer, int32_t pipeline_id, bool block)
 Destroy a pipeline.
 
int32_t streamer_get_track_info (STREAMER_T *streamer, int32_t pipeline_id, TrackInfo *info, bool block)
 Get track information.
 
int32_t streamer_set_state (STREAMER_T *streamer, int32_t pipeline_id, PipelineState state, bool block)
 Set streamer state.
 
int32_t streamer_get_state (STREAMER_T *streamer, int32_t pipeline_id, PipelineState *state, bool block)
 Get streamer state.
 
int32_t streamer_query_info (STREAMER_T *streamer, int32_t pipeline_id, StreamInfoType infoType, StreamData *query_data, bool block)
 Query streamer information.
 
int32_t streamer_seek_pipeline (STREAMER_T *streamer, int32_t pipeline_id, int32_t seek_time_ms, bool block)
 Seek pipeline.
 
int32_t streamer_set_property (STREAMER_T *streamer, int8_t pipeline_id, ELEMENT_PROPERTY_T prop, bool block)
 Set element property.
 
int32_t streamer_get_property (STREAMER_T *streamer, int8_t pipeline_id, uint16_t prop, uint32_t *val_ptr, bool block)
 Get element property.
 
int32_t streamer_set_file (STREAMER_T *streamer, int32_t pipeline_id, char *path, PipelineState state, bool block)
 Set file source.
 
int32_t streamer_set_repeat (STREAMER_T *streamer, int32_t pipeline_id, bool repeat_on, bool block)
 Set pipeline to repeat.
 

Variables

char g_cci_meta_location [MAX_LOCATION_PATH_LENGTH]
 
#define MAX_MSG_RECV_PER_CYCLE   (5)
 Maximum messages received per streamer task cycle.
 
static ElementTypeLookup type_lookup_table []
 Element type lookup table for getting element type from element index.
 
const STREAMER_MSG_HANDLER_T msg_handler_table []
 
 OSA_TASK_HANDLE_DEFINE (thread_hdl)
 Osa task handle object.
 
static int32_t streamer_deinit (STREAMER_T *streamer)
 Streamer deinit.
 
STREAMER_Tstreamer_create (STREAMER_CREATE_PARAM *task_param)
 Create a streamer.
 
int32_t streamer_destroy (STREAMER_T *streamer)
 Destroy a streamer object.
 

Function Documentation

◆ streamer_deinit()

int32_t streamer_deinit ( STREAMER_T * streamer)
static

Deinit all data associated with Streamer Task

Parameters
[in]streamerPointer to streamer task data structure

◆ streamer_create()

STREAMER_T * streamer_create ( STREAMER_CREATE_PARAM * task_param)

Function for creating of a streamer object serving as the core of the framework. A streamer task is created that is responsible for handling the messages between the framework and the application. Then a pipeline for audio processing is created using streamer_create_pipeline.

Parameters
task_paramparemeters for creating the core streamer task
Returns
STREAMER_T*

◆ streamer_destroy()

int32_t streamer_destroy ( STREAMER_T * streamer)
Parameters
streamerThe streamer object to be destroyed

◆ streamer_task()

void streamer_task ( void * arg)

This is the streamer task function that processes the main streamer loop. The loop will look to receive messages from the application and to initiate the processing of data through active pipelines.

Parameters
[in]argPointer to input argument structure (STREAMER_ARGS_T)
Returns
N/A

◆ streamer_init()

void streamer_init ( STREAMER_T * streamer)

Initialize data structure associated with Streamer Task

Parameters
[in]streamerPointer to streamer task data structure

◆ streamer_msg_handler()

int streamer_msg_handler ( STREAMER_T * streamer,
STREAMER_MSG_T * msg )

Processes a single message that was received in the streamer task message queue. Messages should follow the format defined in STREAMER_MSG_T structure.

Parameters
[in]streamerPointer to streamer task data structure
[in]msgPointer to message data.
Return values
ERRCODE_NO_ERRORMessage was successfully processed
ERRCODE_INVALID_ARGUMENTInvalid Message
Returns
int

◆ streamer_process_pipelines()

int streamer_process_pipelines ( STREAMER_T * streamer)

Loops through the pipelines present in the streamer task and if the pipeline is in Playing state calls the process pipeline function to start the flow of data.

Parameters
[in]streamerPointer to streamer task data structure
Return values
ERRCODE_NO_ERRORMessage was successfully processed
ERRCODE_INVALID_ARGUMENTInvalid Message
Returns
int

◆ streamer_handle_msg()

static int32_t streamer_handle_msg ( STREAMER_T * streamer,
STREAMER_MSG_T * msg,
bool block )
static
Parameters
streamerPointer to a streamer object
msgStreamer message
blockBlocking/non-blocking
Returns
int32_t

◆ streamer_create_pipeline()

int32_t streamer_create_pipeline ( STREAMER_T * streamer,
int32_t pipeline_id,
const char * in_dev_name,
const char * out_dev_name,
PipelineElements elements,
bool block )
Parameters
streamerstreamer object
pipeline_idunique pipeline ID
in_dev_nameinput device name
out_dev_nameoutput device name
blockblocking / non-blocking creation of pipeline called directly
Returns
int32_t error code

◆ streamer_destroy_pipeline()

int32_t streamer_destroy_pipeline ( STREAMER_T * streamer,
int32_t pipeline_id,
bool block )
Parameters
streamerstreamer object
pipeline_idunique pipeline ID
blockblocking / non-blocking destruction of pipeline
Returns
int32_t error code

◆ streamer_get_track_info()

int32_t streamer_get_track_info ( STREAMER_T * streamer,
int32_t pipeline_id,
TrackInfo * info,
bool block )
Parameters
streamerstreamer object
pipeline_idunique pipeline ID
infotrack information
blockblocking / non-blocking mode
Returns
int32_t error code

◆ streamer_set_state()

int32_t streamer_set_state ( STREAMER_T * streamer,
int32_t pipeline_id,
PipelineState state,
bool block )
Parameters
streamerstreamer object
pipeline_idunique pipeline ID
statestreamer state
blockblocking / non-blocking mode
Returns
int32_t error code

◆ streamer_get_state()

int32_t streamer_get_state ( STREAMER_T * streamer,
int32_t pipeline_id,
PipelineState * state,
bool block )
Parameters
streamerstreamer object
pipeline_idunique pipeline ID
statestreamer state
blockblocking / non-blocking mode
Returns
int32_t error code

◆ streamer_query_info()

int32_t streamer_query_info ( STREAMER_T * streamer,
int32_t pipeline_id,
StreamInfoType infoType,
StreamData * query_data,
bool block )
Parameters
streamerstreamer object
pipeline_idunique pipeline ID
infoTypestreamer information type
query_dataquery data
blockblocking / non-blocking mode
Returns
int32_t error code

◆ streamer_seek_pipeline()

int32_t streamer_seek_pipeline ( STREAMER_T * streamer,
int32_t pipeline_id,
int32_t seek_time_ms,
bool block )
Parameters
streamerstreamer object
pipeline_idunique pipeline ID
seek_time_msdesired seek time in [ms]
blockblocking / non-blocking mode
Returns
int32_t error code

◆ streamer_set_property()

int32_t streamer_set_property ( STREAMER_T * streamer,
int8_t pipeline_id,
ELEMENT_PROPERTY_T prop,
bool block )
Parameters
streamerstreamer object
pipeline_idpipeline index
propelement property
blockblocking / non-blocking mode
Returns
int32_t error code

◆ streamer_get_property()

int32_t streamer_get_property ( STREAMER_T * streamer,
int8_t pipeline_id,
uint16_t prop,
uint32_t * val_ptr,
bool block )
Parameters
streamerstreamer object
pipeline_idpipeline index
propelement property
val_ptrproperty value
blockblocking / non-blocking mode
Returns
int32_t error code

◆ streamer_set_file()

int32_t streamer_set_file ( STREAMER_T * streamer,
int32_t pipeline_id,
char * path,
PipelineState state,
bool block )
Parameters
streamerstreamer object
pipeline_idunique pipeline ID
pathpath to the file
statestreamer state
blockblocking / non-blocking mode
Returns
int32_t error code

◆ streamer_set_repeat()

int32_t streamer_set_repeat ( STREAMER_T * streamer,
int32_t pipeline_id,
bool repeat_on,
bool block )
Parameters
streamerstreamer object
pipeline_idunique pipeline ID
repeat_onrepeat flag
blockblocking / non-blocking mode
Returns
int32_t error code

Variable Documentation

◆ type_lookup_table

ElementTypeLookup type_lookup_table[]
static
Initial value:
= {
{TYPE_ELEMENT_FILE_SRC, ELEMENT_FILE_SRC_INDEX}, {TYPE_ELEMENT_MEM_SRC, ELEMENT_MEM_SRC_INDEX},
{TYPE_ELEMENT_NETBUF_SRC, ELEMENT_NETBUF_SRC_INDEX}, {TYPE_ELEMENT_AUDIO_SRC, ELEMENT_MICROPHONE_INDEX},
{TYPE_ELEMENT_FILE_SINK, ELEMENT_FILE_SINK_INDEX}, {TYPE_ELEMENT_MEM_SINK, ELEMENT_MEM_SINK_INDEX},
{TYPE_ELEMENT_AUDIO_SINK, ELEMENT_SPEAKER_INDEX}, {TYPE_ELEMENT_DECODER, ELEMENT_DECODER_INDEX},
{TYPE_ELEMENT_ENCODER, ELEMENT_ENCODER_INDEX}, {TYPE_ELEMENT_VIT_SINK, ELEMENT_VIT_INDEX},
{TYPE_ELEMENT_AUDIO_PROC, ELEMENT_VIT_PROC_INDEX}, {TYPE_ELEMENT_AUDIO_PROC, ELEMENT_VOICESEEKER_INDEX},
{TYPE_ELEMENT_AUDIO_PROC, ELEMENT_SRC_INDEX}, {TYPE_ELEMENT_AUDIO_SRC, ELEMENT_USB_SRC_INDEX},
{TYPE_ELEMENT_AUDIO_SINK, ELEMENT_USB_SINK_INDEX}, {TYPE_ELEMENT_AUDIO_PROC, ELEMENT_ASRC_INDEX}}
@ TYPE_ELEMENT_AUDIO_SINK
VIT sink element.
Definition streamer_api.h:295
@ TYPE_ELEMENT_NETBUF_SRC
Audio source element.
Definition streamer_api.h:287
@ TYPE_ELEMENT_MEM_SRC
Network buffer source element. Requires CCI usage.
Definition streamer_api.h:285
@ TYPE_ELEMENT_MEM_SINK
Audio sink element.
Definition streamer_api.h:293
@ TYPE_ELEMENT_AUDIO_SRC
File sink element.
Definition streamer_api.h:289
@ TYPE_ELEMENT_ENCODER
Audio process element.
Definition streamer_api.h:301
@ TYPE_ELEMENT_VIT_SINK
Decoder element.
Definition streamer_api.h:297
@ TYPE_ELEMENT_FILE_SINK
Memory sink element.
Definition streamer_api.h:291
@ TYPE_ELEMENT_FILE_SRC
File source element.
Definition streamer_api.h:283
@ TYPE_ELEMENT_DECODER
Encoder element.
Definition streamer_api.h:299

◆ msg_handler_table

const STREAMER_MSG_HANDLER_T msg_handler_table[]
Initial value:
= {
int streamer_msg_seek_pipeline(STREAMER_T *streamer, void *data)
Streamer Seek Pipeline.
Definition streamer_msg.c:257
int streamer_msg_set_property(STREAMER_T *streamer, void *data)
Streamer Set Property.
Definition streamer_msg.c:329
int streamer_msg_set_repeat(STREAMER_T *streamer, void *msg_data)
Streamer Set Pipeline State.
Definition streamer_msg.c:565
int streamer_msg_set_state(STREAMER_T *streamer, void *data)
Streamer Set Pipeline State.
Definition streamer_msg.c:129
int streamer_msg_set_file(STREAMER_T *streamer, void *data)
Streamer message set file.
Definition streamer_msg.c:418
int streamer_msg_send_query(STREAMER_T *streamer, void *data)
Streamer Send Query.
Definition streamer_msg.c:214
int streamer_msg_get_state(STREAMER_T *streamer, void *data)
Streamer Get State.
Definition streamer_msg.c:169
int streamer_msg_get_property(STREAMER_T *streamer, void *data)
Streamer Get Property.
Definition streamer_msg.c:376
@ STREAM_MSG_GET_STATE
a Get Pipeline State
Definition streamer_api.h:196
@ STREAM_MSG_SEEK_PIPELINE
f Seek the pipeline to a time
Definition streamer_api.h:204
@ STREAM_MSG_QUERY_PIPELINE
10 Query the pipeline
Definition streamer_api.h:205
@ STREAM_MSG_SET_STATE
9 Set Pipeline State
Definition streamer_api.h:195
@ STREAM_MSG_GET_PROPERTY
d Get an Element specific property value
Definition streamer_api.h:201
@ STREAM_MSG_SET_PROPERTY
c Set an Element specific property value
Definition streamer_api.h:199
@ STREAM_MSG_SET_REPEAT
11 Set repeat mode of pipeline
Definition streamer_api.h:206
@ STREAM_MSG_SET_FILE
b Set the file path and reconfigure the pipeline
Definition streamer_api.h:197

Streamer Message Handler Table Specifies the function to handle incoming message requests within the streamer task.

◆ g_cci_meta_location

char g_cci_meta_location[MAX_LOCATION_PATH_LENGTH]

TEMP - remove when CCI metadata is fixed