#ifndef _MEDIA_H
#define _MEDIA_H
#include "cmsis_os.h"
#include "mmf_common.h"

typedef struct _media_source_module{
	void* (*create)(void);
	void  (*destroy)(void*);
	int   (*set_param)(void*, int, int);
	int   (*handle)(void*, void*);		// input output will cast to exch_buf_t
}msrc_module_t;



typedef struct _media_source_context{
	xQueueHandle input_qid;
	xQueueHandle output_qid;
	int state;
	xTaskHandle	hdl_task;
	
	void* drv_priv;
	msrc_module_t* source;
}msrc_context;

void 			mmf_source_close(msrc_context* ctx);
msrc_context* 	mmf_source_open(msrc_module_t* source);
int 			mmf_source_ctrl(msrc_context* ctx, int cmd, int arg);
int 			mmf_source_get_frame(msrc_context* ctx, exch_buf_t *exbuf);

// must be here
#include "mmf_source_modules/mmf_source_list.h"
#endif