ameba micropython sdk first commit

This commit is contained in:
xidameng 2020-07-31 22:16:12 +08:00
commit 8508ee6139
5619 changed files with 1874619 additions and 0 deletions

View file

@ -0,0 +1,38 @@
#ifndef HANTRO_MODIFY_PARM_H
#define HANTRO_MODIFY_PARM_H
#define CMD_VIDEO_H264_CHG_FPS 0x01
#define CMD_VIDEO_H264_CHG_RESOLUTION 0x02
#define CMD_VIDEO_H264_CHG_BPS 0x03
#define CMD_VIDEO_H264_CHG_IFRAME 0x04
struct mmf_video_h264_parm{
int cmd_code;
int config_flag;
int fps;
int width;
int height;
int bps;
};
struct mmf_video_modify_parm_context{
struct mmf_video_h264_parm h264_parm[3];
};
void mmf_video_modify_parm_init(void);
void mmf_video_isp_reset_buffer(int streamid);
void mmf_video_h264_change_parm_cb(void *ctx);
int mmf_video_h264_change_fps(int streamid,int fps);
int mmf_video_h264_change_resolution(int streamid,int width,int height);
int mmf_video_h264_change_bps(int streamid,int bps);
int mmf_video_h264_force_iframe(int streamid);
void mmf_video_nv12_change_parm_cb(void *ctx);
#endif

View file

@ -0,0 +1,26 @@
#ifndef JPEG_SNAPSHOT_H
#define JPEG_SNAPSHOT_H
#include "video_common_api.h"
void jpeg_snapshot_initial_with_instance(void* jpeg_ctx, uint32_t dest_addr, uint32_t dest_len, uint8_t snapshot_during_jpeg_streaming);
void jpeg_snapshot_initial(uint32_t width, uint32_t height, uint32_t fps, uint32_t level, uint32_t dest_addr, uint32_t dest_len);
int jpeg_snapshot_encode_cb(uint32_t y_addr,uint32_t uv_addr);
void jpeg_snapshot_cb(void);
int jpeg_snapshot_isp_config(int streamid);
int jpeg_snapshot_get_buffer(VIDEO_BUFFER* video_buf, uint32_t timeout_ms);
void jpeg_snapshot_set_processing(uint8_t snapshot_processing);
uint8_t jpeg_snapshot_get_processing();
// For AT command
void jpeg_snapshot_stream();
int jpeg_snapshot_isp();
int jpeg_snapshot_isp_change_resolution(int width,int height);
void jpeg_snapshot_isp_callback(int arg);
int yuv_snapshot_isp_config(int width,int height,int fps,int streamid);
int yuv_snapshot_isp(unsigned char **raw_y);
int yuv_snapshot_isp_deinit();
#endif

View file

@ -0,0 +1,35 @@
#ifndef ENCODER_MEMORY_H
#define ENCODER_MEMORY_H
#include "osdep_service.h"
#include <stdint.h>
struct encoder_buffer{
_mutex memory_lock;
uint8_t* pool;
uint8_t* pool_table; // index table
int32_t max_pool_blk; //
int32_t blk_size; // one block size
int32_t mem_size; // total pool size
int32_t pool_blk_idx;
int32_t rest_pool_blk;
int32_t blk_serial;
int32_t min_rest_blk;
};
void *memory_init(int size,int block_size);
void memory_deinit(void *ctx);
//u8* _memory_realloc(struct encoder_buffer *eb,uint8_t *addr,uint32_t size);
uint8_t* memory_realloc(void *ctx,uint8_t *addr,uint32_t size);
void memory_free(void *ctx,uint8_t *addr);
void* memory_alloc(void *ctx,uint32_t size);
void dump_info(void *ctx);
#endif

View file

@ -0,0 +1,79 @@
#ifndef _MMF_COMMAND_H_
#define _MMF_COMMAND_H_
#include <FreeRTOS.h>
#include <task.h>
#include "basic_types.h"
#include "osdep_service.h"
#define MMF_CMD_DEBUG 0
#if MMF_CMD_DEBUG
#define MMF_CMD_PRINTF(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args)
#define MMF_CMD_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args)
#else
#define MMF_CMD_PRINTF(fmt, args...)
#define MMF_CMD_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args)
#endif
#define MMF_COMMAND_SERVICE_PRIORITY tskIDLE_PRIORITY + 1
#define MMF_COMMAND_BUF_SIZE 512
#define DEF_MMF_COMMAND_PORT 16385
#define MMF_COMMAND_SELECT_SOCK 8
// TODO: command list
/*mmf command list*/
typedef struct {
struct list_head list;
u8 bCmd;
u8 bSubCommand;
u8 bidx;
u8 bLen;// sizeof[data]
u16 wParam;
u16 wAddr;
u8 *data; // max: 32byte
} mcmd_t;
typedef struct mmf_command_socket
{
int server_socket;
u8 *server_ip;
u16 server_port;
u8 *remote_ip;
u16 remote_port;
int client_socket;
mcmd_t* command;
u8 *request;
u8 *response;
int (*cb_command)(void*,void*);
} mcmd_socket_t;
typedef struct mmf_command_context
{
struct list_head cmd_list;
_mutex list_lock;
_sema cmd_in_sema;
xTaskHandle queue_task;
int (*cb_custom)(void*);
mcmd_socket_t* mcmd_socket;
xTaskHandle socket_task;
} mcmd_context;
mcmd_t* mcmd_cmd_create(u8 bCmd, u8 bSubCommand, u8 bidx, u8 bLen, u16 wParam, u16 wAddr, u8 *data);
void mcmd_queue_service(void *param);
int mcmd_queue_task_open(mcmd_context *ctx);
mcmd_context * mcmd_context_init();
void mcmd_context_deinit(mcmd_context *ctx);
void mcmd_in_cmd_queue(mcmd_t *cmd, mcmd_context *ctx);
mcmd_t *mcmd_out_cmd_queue(mcmd_context *ctx);
mcmd_socket_t* mcmd_socket_create();
void mcmd_socket_free(mcmd_socket_t *mcmd_socket);
char mcmd_socket_bind_server(mcmd_socket_t *mcmd_socket);
char mcmd_socket_accept_client(mcmd_socket_t *mcmd_socket);
mcmd_t* mcmd_parse_cmd(u8 *data);
#endif

View file

@ -0,0 +1,94 @@
#ifndef _EXCHBUF_H
#define _EXCHBUF_H
#include "cmsis_os.h"
#include "osdep_service.h"
#include "mmf_dbg.h"
/*service task state*/
#define S_STOP 0x00
#define S_RUN 0x01
#define S_FROZEN 0X02
/*exchange buffer state*/
#define STAT_INIT 0
#define STAT_USED 1
#define STAT_READY 2
#define STAT_RESERVED 3
/*output sink state*/
#define SINK_STOP 0x00
#define SINK_RUN 0x01
typedef struct _media_source_module msrc_module_t;
typedef struct _media_sink_module msink_module_t;
typedef struct _share_cache{
_mutex mutex;
uint8_t* data; // command arg
}share_cache_t;
typedef struct _exch_buf_output_list{
uint8_t index;
msink_module_t * sink; // destination sink
xQueueHandle output_qid;
uint8_t send;
}output_list_t;
typedef struct _exch_buf{
//_list node; // linking node
uint32_t type; // CMD, or DATA
uint32_t cmd; // command
uint32_t arg; // command arg
uint8_t* data; //
uint32_t index;
uint32_t len;
uint32_t timestamp; // 0: not set
uint32_t hw_timestamp; // ISP hw timestamp
uint32_t codec_fmt; // FMT_V_xx or FMT_A_xx
uint32_t state;
void* priv; // private use
xQueueHandle source_qid;
output_list_t* output_sink_list;
uint8_t sink_cnt;
uint32_t dst_count;
uint32_t* ref_count;
_mutex ref_count_lock;
uint32_t share_cache_size;
uint32_t max_share_cnt;
share_cache_t* cache_list;
}exch_buf_t;
/*CMDs necessary for MMF*/
#define CMD_SET_STREAMMING 0x00
#define CMD_SET_INPUT_QUEUE 0x01
#define CMD_SET_OUTPUT_QUEUE 0x02
#define CMD_SET_TASK_ON 0x03
#define CMD_SET_TASK_FROZEN 0x04
#define CMD_SET_TASK_OFF 0x05
/* CMDs optional for MMF*/
#define CMD_SET_CB_START 0x0a
#define CMD_SET_CB_STOP 0x0b
#define CMD_SET_CB_PAUSE 0x0c
#define CMD_SET_CB_CUSTOMCMD 0x0d
/* currently supported media format type */
#define FMT_V_MJPG 0x00
#define FMT_V_H264 0x01
#define FMT_V_MP4V_ES 0x02
#define FMT_A_PCMU 0x10
#define FMT_A_PCMA 0x11
#define FMT_A_MP4A_LATM 0x12
#define FMT_A_AAC_RAW 0x13
#define FMT_AV_UNKNOWN 0xFF
/* common error code for MMF */
#define EAGAIN 11
#define EFAULT 14
#define EINVAL 22
#define ENOSR 63
#endif

View file

@ -0,0 +1,111 @@
#ifndef __MMF_DBG_H_
#define __MMF_DBG_H_
#include "platform_stdlib.h"
extern int PRINT_TS_DIFF;
// Define debug group
#define _MMF_DBG_RTSP_ 0x00000001
#define _MMF_DBG_RTP_ 0x00000002
#define _MMF_DBG_ISP_ 0x00000004
#define _MMF_DBG_ENCODER_ 0x00000008
extern u32 ConfigDebugMmfErr;
extern u32 ConfigDebugMmfWarn;
extern u32 ConfigDebugMmfInfo;
#define DBG_MMF_ERR_MSG_ON(x) (ConfigDebugMmfErr |= (x))
#define DBG_MMF_WARN_MSG_ON(x) (ConfigDebugMmfWarn |= (x))
#define DBG_MMF_INFO_MSG_ON(x) (ConfigDebugMmfInfo |= (x))
#define DBG_MMF_ERR_MSG_OFF(x) (ConfigDebugMmfErr &= ~(x))
#define DBG_MMF_WARN_MSG_OFF(x) (ConfigDebugMmfWarn &= ~(x))
#define DBG_MMF_INFO_MSG_OFF(x) (ConfigDebugMmfInfo &= ~(x))
#define RTSP_ERR_PREFIX "[RTSP Err]"
#define RTSP_WARN_PREFIX "[RTSP Wrn]"
#define RTSP_INFO_PREFIX "[RTSP Inf]"
#define RTP_ERR_PREFIX "[RTP Err]"
#define RTP_WARN_PREFIX "[RTP Wrn]"
#define RTP_INFO_PREFIX "[RTP Inf]"
#define ISP_ERR_PREFIX "[ISP Err]"
#define ISP_WARN_PREFIX "[ISP Wrn]"
#define ISP_INFO_PREFIX "[ISP Inf]"
#define ENCODER_ERR_PREFIX "[Enc Err]"
#define ENCODER_WARN_PREFIX "[Enc Wrn]"
#define ENCODER_INFO_PREFIX "[Enc Inf]"
#define MMF_PRINTK printf
#define RTSP_DBG_ERROR(...) \
do { \
if (ConfigDebugMmfErr&_MMF_DBG_RTSP_) \
MMF_PRINTK("\n\r" RTSP_ERR_PREFIX __VA_ARGS__); \
}while(0)
#define RTP_DBG_ERROR(...) \
do { \
if (ConfigDebugMmfErr&_MMF_DBG_RTP_) \
MMF_PRINTK("\n\r" RTP_ERR_PREFIX __VA_ARGS__); \
}while(0)
#define ISP_DBG_ERROR(...) \
do { \
if (ConfigDebugMmfErr&_MMF_DBG_ISP_) \
MMF_PRINTK("\n\r" ISP_ERR_PREFIX __VA_ARGS__); \
}while(0)
#define ENCODER_DBG_ERROR(...) \
do { \
if (ConfigDebugMmfErr&_MMF_DBG_ENCODER_) \
MMF_PRINTK("\n\r" ENCODER_ERR_PREFIX __VA_ARGS__); \
}while(0)
// DBG_WARNING
#define RTSP_DBG_WARNING(...) \
do { \
if (ConfigDebugMmfWarn&_MMF_DBG_RTSP_) \
MMF_PRINTK("\n\r" RTSP_WARN_PREFIX __VA_ARGS__); \
}while(0)
#define RTP_DBG_WARNING(...) \
do { \
if (ConfigDebugMmfWarn&_MMF_DBG_RTP_) \
MMF_PRINTK("\n\r" RTP_WARN_PREFIX __VA_ARGS__); \
}while(0)
#define ISP_DBG_WARNING(...) \
do { \
if (ConfigDebugMmfWarn&_MMF_DBG_ISP_) \
MMF_PRINTK("\n\r" ISP_WARN_PREFIX __VA_ARGS__); \
}while(0)
#define ENCODER_DBG_WARNING(...) \
do { \
if (ConfigDebugMmfWarn&_MMF_DBG_ENCODER_) \
MMF_PRINTK("\n\r" ENCODER_WARN_PREFIX __VA_ARGS__); \
}while(0)
// DBG_INFO
#define RTSP_DBG_INFO(...) \
do { \
if (ConfigDebugMmfInfo&_MMF_DBG_RTSP_) \
MMF_PRINTK("\n\r" RTSP_INFO_PREFIX __VA_ARGS__); \
}while(0)
#define RTP_DBG_INFO(...) \
do { \
if (ConfigDebugMmfInfo&_MMF_DBG_RTP_) \
MMF_PRINTK("\n\r" RTP_INFO_PREFIX __VA_ARGS__); \
}while(0)
#define ISP_DBG_INFO(...) \
do { \
if (ConfigDebugMmfInfo&_MMF_DBG_ISP_) \
MMF_PRINTK("\n\r" ISP_INFO_PREFIX __VA_ARGS__); \
}while(0)
#define ENCODER_DBG_INFO(...) \
do { \
if (ConfigDebugMmfInfo&_MMF_DBG_ENCODER_) \
MMF_PRINTK("\n\r" ENCODER_INFO_PREFIX __VA_ARGS__); \
}while(0)
#endif

View file

@ -0,0 +1,30 @@
#ifndef _STREAM_H
#define _STREAM_H
#include "cmsis_os.h"
#include "mmf_common.h"
#include "mmf_source_modules/mmf_source_list.h" // for sink modules to find src
struct _media_sink_module{
void* (*create)(void);
void (*destroy)(void*);
int (*set_param)(void*, int, int);
int (*handle)(void*,void*); // data handle, input output will cast to exch_buf_t
};
typedef struct _media_sink_context{
xQueueHandle input_qid;
//xQueueHandle output_qid;
int state;
xTaskHandle hdl_task; // queue service task
void* drv_priv; // private data for module
msink_module_t * sink;
}msink_context;
void mmf_sink_close(msink_context* ctx);
msink_context* mmf_sink_open(msink_module_t *sink);
int mmf_sink_ctrl(msink_context* ctx, int cmd, int arg);
// must be here
#include "mmf_sink_modules/mmf_sink_list.h"
#endif

View file

@ -0,0 +1,15 @@
#ifndef _MMF_SINK_I2S_H_
#define _MMF_SINK_I2S_H_
#include "i2s_api.h"
#include "g711/g711_codec.h"
#include "alc5651.h"
void i2s_mod_close(void* ctx);
void* i2s_mod_open(void);
int i2s_mod_set_param(void* ctx, int cmd, int arg);
int i2s_mod_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#endif

View file

@ -0,0 +1,16 @@
#ifndef _STREAM_MODULES_H
#define _STREAM_MODULES_H
#include "../mmf_sink.h"
//list all avaliable modules here
extern msink_module_t rtsp_module;
extern msink_module_t rtsp2_module;
extern msink_module_t i2s_sink_module;
extern msink_module_t audio_sink_module;
extern msink_module_t audio_wrapper_sink_module;
extern msink_module_t mp4_module;
extern msink_module_t mp3_sink_module;
extern msink_module_t rtsp2_module2;
extern msink_module_t rtsp2_module3;
extern msink_module_t uvcd_module;
#endif

View file

@ -0,0 +1,26 @@
#ifndef MMF_SINK_MP3_FILE_H
#define MMF_SINK_MP3_FILE_H
#include "mmf_sink.h"
#include "FreeRTOS.h"
#include "task.h"
#include "platform_opts.h"
#include "mp3/mp3_codec.h"
#include "diag.h"
#include "i2s_api.h"
#include "analogin_api.h"
#include <stdlib.h>
#include "section_config.h"
#if CONFIG_EXAMPLE_MP3_STREAM_SGTL5000
#include "sgtl5000.h"
#else
#include "alc5651.h"
#endif
void mp3_sink_mod_close(void* ctx);
void* mp3_sink_mod_open(void);
int mp3_sink_mod_set_param(void* ctx, int cmd, int arg);
int mp3_sink_mod_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#endif /* MMF_SINK_MP3_FILE_H */

View file

@ -0,0 +1,53 @@
#ifndef _MMF_SINK_MP4_H_
#define _MMF_SINK_MP4_H_
#include "FreeRTOS.h"
#include "task.h"
#include <platform/platform_stdlib.h>
#include "basic_types.h"
#include "platform_opts.h"
#include "section_config.h"
#include "ff.h"
#include <fatfs_ext/inc/ff_driver.h>
#include "sdio_host.h"
#include "sdio_combine.h"
#include <disk_if/inc/sdcard.h>
#include "sockets.h"
#include "lwip/netif.h"
#if defined(CONFIG_PLATFORM_8195BHP)
#include "mp4_muxer.h"
#endif
#ifdef CONFIG_PLATFORM_8195A
#include "mp4_encap.h"
#endif
void mp4_mod_close(void* ctx);
void* mp4_mod_open(void);
int mp4_mod_set_param(void* ctx, int cmd, int arg);
int mp4_mod_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#define CMD_MP4_SET_HEIGHT 0x10
#define CMD_MP4_SET_WIDTH 0x11
#define CMD_MP4_SET_FRAMERATE 0x12
#define CMD_MP4_SET_GOP 0x13
#define CMD_MP4_SET_SAMPLERATE 0x14
#define CMD_MP4_SET_CHANNEL_CNT 0x15
#define CMD_MP4_SET_ST_PERIOD 0x16
#define CMD_MP4_SET_ST_TOTAL 0x17
#define CMD_MP4_SET_ST_TYPE 0x18
#define CMD_MP4_SET_ST_FILENAME 0x19
#define CMD_MP4_SET_ST_START 0x1a
#define CMD_MP4_SET_ST_STOP 0x1b
#define CMD_MP4_SET_START_CB 0x1c
#define CMD_MP4_SET_STOP_CB 0x1d
#define CMD_MP4_GET_STATUS 0x1e
#define CMD_MP4_SET_FATFS_DRV_NUM 0x20
#define CMD_MP4_SET_FATFS_DRV 0x21
#define CMD_MP4_SET_FATFS_SD 0x22
#define CMD_MP4_SET_FATFS_BUF_SIZE 0x23
#endif

View file

@ -0,0 +1,41 @@
#ifndef _MMF_SINK_AUDIO_H_
#define _MMF_SINK_AUDIO_H_
#include "audio_api.h"
#include "g711/g711_codec.h"
#include "mmf_source.h"
#include "cmsis.h"
//#include "shell.h"
//#include "main.h"
//#include "hal_cache.h"
//#include "hal_timer.h"
#include "cmsis_os.h"
#include <math.h>
#include "hal_timer.h"
#include "sgpio_api.h"
#include "audio_api.h"
typedef enum {
AUDIO_MODE_UNKNOWN = -1,
AUDIO_MODE_G711A = 1,
AUDIO_MODE_G711U = 2
}Audio_mode;
typedef struct {
Audio_mode mode; //intend to encode as G711A or G711U
int len; //data length
// _sema RWSema;
unsigned char *raw_data; //address of buffered data (not encoded
int data_start; // a shift value to show where the data starts
int data_end; // a shift value shows data ending
}audio_buf_context;
void audio_mod_close(void* ctx);
void* audio_mod_open(void);
int audio_mod_set_param(void* ctx, int cmd, int arg);
int audio_mod_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#endif

View file

@ -0,0 +1,8 @@
#ifndef _MMF_SINK_AUDIO_H_
#define _MMF_SINK_AUDIO_H_
#include "mmf_wrapper/mmf_wrapper_pro_audio.h"
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#endif

View file

@ -0,0 +1,28 @@
#ifndef _MMF_SINK_RTSP_H_
#define _MMF_SINK_RTSP_H_
#include "rtsp/rtsp_api.h"
#include "sockets.h"
#include "lwip/netif.h"
void rtsp_mod_close(void* ctx);
void* rtsp_mod_open(void);
int rtsp_mod_set_param(void* ctx, int cmd, int arg);
int rtsp_mod_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#define CMD_RSTP_SET_FRAMERATE 0x10
#define CMD_RSTP_SET_BITRATE 0x11
#define CMD_RSTP_SET_SAMPLERATE 0x12
#define CMD_RSTP_SET_CHANNEL 0x13
#define CMD_RSTP_SET_SPS 0x14
#define CMD_RSTP_SET_PPS 0x15
#define CMD_RSTP_SET_LEVEL 0x16
#define CMD_RSTP_SET_APPLY 0x17
#define CMD_RSTP_SET_CODEC 0x18
#define CMD_RSTP_SET_START_CB 0x19
#define CMD_RSTP_SET_STOP_CB 0x1a
#define CMD_RSTP_SET_PAUSE_CB 0x1b
#define CMD_RSTP_SET_CUSTOM_CB 0x1c
#endif

View file

@ -0,0 +1,33 @@
#ifndef _MMF_SINK_RTSP2_H_
#define _MMF_SINK_RTSP2_H_
#include "rtsp/rtsp_api.h"
#include "sockets.h"
#include "lwip/netif.h"
void rtsp2_mod_close(void* ctx);
void* rtsp2_mod_open(void);
int rtsp2_mod_set_param(void* ctx, int cmd, int arg);
int rtsp2_mod_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#define CMD_RSTP2_SELECT_CHANNEL 0x10
#define CMD_RSTP2_SET_FRAMERATE 0x11
#define CMD_RSTP2_SET_BITRATE 0x12
#define CMD_RSTP2_SET_SAMPLERATE 0x13
#define CMD_RSTP2_SET_CHANNEL 0x14
#define CMD_RSTP2_SET_SPS 0x15
#define CMD_RSTP2_SET_PPS 0x16
#define CMD_RSTP2_SET_LEVEL 0x17
#define CMD_RSTP2_SET_APPLY 0x18
#define CMD_RSTP2_SET_CODEC 0x19
#define CMD_RSTP2_SET_FLAG 0x1a
#define CMD_RSTP2_SET_START_CB 0x1b
#define CMD_RSTP2_SET_STOP_CB 0x1c
#define CMD_RSTP2_SET_PAUSE_CB 0x1d
#define CMD_RSTP2_SET_CUSTOM_CB 0x1e
#define TIME_SYNC_EN 0
#define TIME_SYNC_DIS 1
#endif

View file

@ -0,0 +1,52 @@
#ifndef _MEDIA_H
#define _MEDIA_H
#include "cmsis_os.h"
#include "mmf_common.h"
#include "mmf_sink_modules/mmf_sink_list.h" // for source modules to set dest_sink
struct _media_source_module{
void* (*create)(void);
void (*destroy)(void*);
int (*set_param)(void*, int, int);
int (*handle)(void*, void*); // data handle, input output will cast to exch_buf_t
};
typedef struct _media_source_output_queue{
uint8_t index;
msink_module_t * sink; // destination sink
xQueueHandle output_qid;
uint8_t sink_state; // SINK_STOP or SINK_RUN
}msrc_output_queue_t;
typedef struct _media_source_context{
xQueueHandle input_qid;
msrc_output_queue_t* output_qid_list;
//xQueueHandle output_qid;
int state;
xTaskHandle hdl_task; // queue service task
void* drv_priv;
msrc_module_t * source;
uint8_t stream_on;
uint32_t free_exch_buf_cnt;
_sema stream_off_done_sema;
uint8_t sink_cnt;
uint8_t max_share_cnt;
uint32_t share_cache_size;// if 0 -> don't use cache, use referece count
uint32_t exch_buf_cnt;
exch_buf_t* p_exbuf;
}msrc_context;
void mmf_source_close(msrc_context* ctx);
msrc_context* mmf_source_open(msrc_module_t *source, uint8_t sink_cnt, uint8_t max_share_cnt, uint32_t cache_size);
int mmf_source_ctrl(msrc_context* ctx, int cmd, int arg);
void mmf_source_sink_state_change(msrc_context* ctx, msink_module_t* sink, uint8_t state);
char mmf_source_all_sink_off(msrc_context* ctx);
void mmf_source_reset_exbuf_sending_list(exch_buf_t *exbuf);
void mmf_source_add_exbuf_sending_list(exch_buf_t *exbuf, msink_module_t *sink);
void mmf_source_add_exbuf_sending_list_all(exch_buf_t *exbuf);
// must be here
#include "mmf_source_modules/mmf_source_list.h"
#endif

View file

@ -0,0 +1,61 @@
#ifndef _MMF_SOURCE_AAC_ENCODE_H_
#define _MMF_SOURCE_AAC_ENCODE_H_
#include "aac_util.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "aac_util.h"
#include <math.h>
#include "psych.h"
#include "faac.h"
#include "sample_aacenc.h"
#include "faac_api.h"
#include "memory_encoder.h"
#include "encoder_buffer_handler.h"
#define AAC_MAX_BUFFER_COUNT 6
#define AAC_DISABLE 0
#define AAC_ENABLE 1
#define AAC_DEBUG_SHOW 0
struct aac_enc_buf_handle{
struct enc_buf_data enc_data[AAC_MAX_BUFFER_COUNT];
struct enc_list_handle enc_list;
};
struct aacen_context
{
faacEncHandle hEncoder;
int bit_length;
int sample_rate;
int channel;
int samplesInput;
int maxBytesOutput;
void *source_addr;
unsigned char *outputBuffer;
struct mem_info mem_info_value;
struct encoder_list_head encoder_lh;
_sema encoder_output_sema;
};
void* aac_encode_mod_open(void);
void aacf_encode_close(void* ctx);
int aacf_encode_mod_set_param(void* ctx, int cmd, int arg);
int aac_encode_mod_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#define CMD_AACEN_SET_BIT_LENGTH 0x10
#define CMD_AACEN_SET_SAMPLE_RATE 0x11
#define CMD_AACEN_SET_APPLY 0x12
#define CMD_AACEN_SET_CHANEEL 0X13
#define CMD_AACEN_MEMORY_SIZE 0X30
#define CMD_AACEN_BLOCK_SIZE 0X31
#define CMD_AACEN_MAX_FRAME_SIZE 0X32
#endif

View file

@ -0,0 +1,13 @@
#ifndef _MMF_SOURCE_AAC_FILE_H_
#define _MMF_SOURCE_AAC_FILE_H_
#include "sample_aac.h"
void* aacf_mod_open(void);
void aacf_mod_close(void* ctx);
int aacf_mod_set_param(void* ctx, int cmd, int arg);
int aacf_mod_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#endif

View file

@ -0,0 +1,27 @@
#ifndef _MMF_SOURCE_GEO_H_
#define _MMF_SOURCE_GEO_H_
#include "videodev2.h"
#include "uvcvideo.h"
#include "v4l2_intf.h"
#include "driver/geo/patch_uvc_geo.h"
void* geo_mod_open(void);
void geo_mod_close(void* ctx);
int geo_mod_set_param(void* ctx, int cmd, int arg);
int geo_mod_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#define CMD_GEO_SELECT_CHANNEL 0x10
#define CMD_GEO_SET_HEIGHT 0x11
#define CMD_GEO_SET_WIDTH 0x12
#define CMD_GEO_SET_FRAMERATE 0x13
#define CMD_GEO_SET_SAMPLERATE 0x14
#define CMD_GEO_SET_CPZRATIO 0x15
#define CMD_GEO_SET_FRAMETYPE 0x16
#define CMD_GEO_SET_APPLY 0x17
#define CMD_GEO_SET_CHANNEL 0x18
#endif

View file

@ -0,0 +1,53 @@
#ifndef _MMF_SOURCE_H1V6_H264_H_
#define _MMF_SOURCE_H1V6_H264_H_
#include "basic_types.h"
#include "osdep_service.h"
#include <platform_opts.h>
#include "cmsis.h"
#include "rtl8195bhp_video.h"
#include "hal_encorder.h"
#include "hal_cache.h"
#include "section_config.h"
#include "memory_encoder.h"
#include "hantro_h264_encoder.h"
#include "isp_api.h"
void* h1v6_h264_open(void);
void h1v6_h264_close(void* ctx);
int h1v6_h264_set_param(void* ctx, int cmd, int arg);
int h1v6_h264_handle(void* ctx, void* b);
struct h1v6_h264_rc_parm
{
unsigned int rcMode;
unsigned int iQp; // for fixed QP
unsigned int pQp; // for fixed QP
unsigned int minQp; // for CBR/VBR
unsigned int minIQp; // for CBR/VBR
unsigned int maxQp; // for CBR/VBR
};
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#define CMD_HANTRO_H264_SET_HEIGHT 0x10
#define CMD_HANTRO_H264_SET_WIDTH 0x11
#define CMD_HANTRO_H264_BITRATE 0x12
#define CMD_HANTRO_H264_FPS 0x13
#define CMD_HANTRO_H264_GOP 0x14
#define CMD_HANTRO_H264_RCMODE 0x15
#define CMD_HANTRO_H264_SET_RCPARAM 0x16
#define CMD_HANTRO_H264_GET_RCPARAM 0x17
#define CMD_HANTRO_H264_APPLY 0x18
#define CMD_ISP_STREAMID 0X20
#define CMD_ISP_HW_SLOT 0X21
#define CMD_ISP_SW_SLOT 0X22
#define CMD_H1V6_MEMORY_SIZE 0X30
#define CMD_H1V6_BLOCK_SIZE 0X31
#define CMD_H1V6_MAX_FRAME_SIZE 0X32
#define CMD_SNAPSHOT_ENCODE_CB 0x40
#define CMD_HANTRO_H264_CHANGE_PARM_CB 0x41
#endif

View file

@ -0,0 +1,31 @@
#ifndef _MMF_SOURCE_H1V6_JPEG_H_
#define _MMF_SOURCE_H1V6_JPEG_H_
#include "hantro_jpeg_encoder.h"
void* h1v6_jpeg_open(void);
void h1v6_jpeg_close(void* ctx);
int h1v6_jpeg_set_param(void* ctx, int cmd, int arg);
int h1v6_jpeg_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#define CMD_HANTRO_JPEG_SET_HEIGHT 0x10
#define CMD_HANTRO_JPEG_SET_WIDTH 0x11
#define CMD_HANTRO_JPEG_LEVEL 0x12
#define CMD_HANTRO_JPEG_FPS 0x13
#define CMD_HANTRO_JPEG_HEADER_TYPE 0x14
#define CMD_HANTRO_JPEG_APPLY 0x15
#define CMD_ISP_STREAMID 0X20
#define CMD_ISP_HW_SLOT 0X21
#define CMD_ISP_SW_SLOT 0X22
#define CMD_H1V6_MEMORY_SIZE 0X30
#define CMD_H1V6_BLOCK_SIZE 0X31
#define CMD_H1V6_MAX_FRAME_SIZE 0X32
#define CMD_SNAPSHOT_CB 0X40
#endif

View file

@ -0,0 +1,32 @@
#ifndef _MMF_SOURCE_H264_FILE_H_
#define _MMF_SOURCE_H264_FILE_H_
#include "encoder_buffer_handler.h"
#include "isp_api.h"
#define CMD_ISP_STREAMID 0x10
#define CMD_ISP_HW_SLOT 0x11
#define CMD_ISP_SW_SLOT 0x12
#define CMD_ISP_HEIGHT 0x13
#define CMD_ISP_WIDTH 0x14
#define CMD_ISP_FPS 0x15
#define CMD_ISP_FORMAT 0x16
#define CMD_ISP_APPLY 0x17
struct uvc_format{
int width;
int height;
int format;
int fps;
};
struct h1v6_nv12_context {
uint32_t width;
uint32_t height;
int fps;
long index;
int start;
int format;
int uvc_format;//0:yuy2 1:nv12 2:mjpg 3:jpeg
struct isp_info isp_info_value;
};
#endif

View file

@ -0,0 +1,40 @@
#ifndef _MMF_SOURCE_H264_FILE_H_
#define _MMF_SOURCE_H264_FILE_H_
#include "sample_h264.h"
#include "memory_encoder.h"
#include "encoder_buffer_handler.h"
#include "timer_api.h"
#define H264F_DBG_SHOW 0
#define H264F_MAX_BUFFER_COUNT 6
struct h264f_enc_buf_handle{
struct enc_buf_data enc_data[H264F_MAX_BUFFER_COUNT];
struct enc_list_handle enc_list;
};
struct h264f_context
{
unsigned int fps;
void *source_addr;
unsigned char *outputBuffer;
struct mem_info mem_info_value;
struct encoder_list_head encoder_lh;
_sema encoder_output_sema;
};
void* h264f_mod_open(void);
void h264f_mod_close(void* ctx);
int h264f_mod_set_param(void* ctx, int cmd, int arg);
int h264f_mod_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#define CMD_H264F_SET_FPS 0x10
#define CMD_H264F_SET_APPLY 0x11
#define CMD_H264F_MEMORY_SIZE 0X20
#define CMD_H264F_BLOCK_SIZE 0X21
#define CMD_H264F_MAX_FRAME_SIZE 0X22
#endif

View file

@ -0,0 +1,13 @@
#ifndef _MMF_SOURCE_H264_UNIT_H_
#define _MMF_SOURCE_H264_UNIT_H_
#include "h264_encode.h"
void* h264_unit_open(void);
void h264_unit_close(void* ctx);
int h264_unit_set_param(void* ctx, int cmd, int arg);
int h264_unit_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#endif

View file

@ -0,0 +1,43 @@
#ifndef MMF_SOURCE_I2S_H
#define MMF_SOURCE_I2S_H
#include "mmf_source.h"
#include "FreeRTOS.h"
#include "task.h"
//#include "example_rtsp_server_i2s.h"
#include "rtsp/rtsp_api.h"
#include "sockets.h"
#include "lwip/netif.h"
#include "i2s_api.h"
#include "alc5651.h"
#include "g711/g711_codec.h"
#include "gpio_api.h" // mbed
#include "gpio_irq_api.h"
#include <platform/platform_stdlib.h>
#include "platform_opts.h"
#include "dlist.h"
#include "basic_types.h"
#include "osdep_service.h"
#define I2S_DMA_PAGE_SIZE 320 // 2 ~ 4096
#define I2S_DMA_PAGE_NUM 4 // Vaild number is 2~4
#define RECV_PAGE_NUM I2S_DMA_PAGE_NUM
#define G711_FSIZE 160
#define I2S_MODE_SWITCH PE_5
#define I2S_SCLK_PIN PC_1
#define I2S_WS_PIN PC_0
#define I2S_SD_PIN PC_2
void* i2s_mod_open(void);
void i2s_mod_close(void* ctx);
int i2s_mod_set_param(void* ctx, int cmd, int arg);
int i2s_mod_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#define CMD_I2S_SET_FRAMETYPE 0x10
#endif /* MMF_SOURCE_I2S_H */

View file

@ -0,0 +1,27 @@
#ifndef _MEDIA_MODULES_H
#define _MEDIA_MODULES_H
#include "../mmf_source.h"
//list all avaliable modules here
extern msrc_module_t uvc_module;
extern msrc_module_t geo_module;
extern msrc_module_t mjpgf_module;
extern msrc_module_t h264f_module;
extern msrc_module_t h264_unit_module;
extern msrc_module_t h264sd_module;
extern msrc_module_t aacf_module;
extern msrc_module_t pcmuf_module;
extern msrc_module_t i2s_module;
extern msrc_module_t rtp_src_module;
extern msrc_module_t mp4de_module;
extern msrc_module_t audio_module;
extern msrc_module_t audio_wrapper_module;
#ifdef CONFIG_PLATFORM_8195BHP
extern msrc_module_t aac_enc_module;
extern msrc_module_t h1v6_nv12_module;
#endif
#ifdef CONFIG_PLATFORM_8195BHP
extern msrc_module_t h1v6_h264_module;
extern msrc_module_t h1v6_jpeg_module;
#endif
#endif

View file

@ -0,0 +1,13 @@
#ifndef _MMF_SOURCE_MJPG_FILE_H_
#define _MMF_SOURCE_MJPG_FILE_H_
#include "sample_jpeg.h"
void* mjpgf_mod_open(void);
void mjpgf_mod_close(void* ctx);
int mjpgf_mod_set_param(void* ctx, int cmd, int arg);
int mjpgf_mod_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#endif

View file

@ -0,0 +1,22 @@
#ifndef _MMF_SOURCE_MP4DE_H_
#define _MMF_SOURCE_MP4DE_H_
#define CMD_SET_SAMPLERATE 0x06
#define CMD_SET_CHANNEL 0x07
#define CMD_SET_CODEC 0x08
#define CMD_SET_STREAMNUM 0x09
#define CMD_SET_APPLY 0x1f
/*mp4 storage*/
#define CMD_SET_ST_PERIOD 0X60
#define CMD_SET_ST_TOTAL 0X61
#define CMD_SET_ST_TYPE 0X62
#define CMD_SET_ST_FILENAME 0x63
#define CMD_SET_ST_START 0x64
/*mp4 storage*/
#define STORAGE_ALL 0
#define STORAGE_VIDEO 1
#define STORAGE_AUDIO 2
#endif

View file

@ -0,0 +1,13 @@
#ifndef _MMF_SOURCE_PCMU_FILE_H_
#define _MMF_SOURCE_PCMU_FILE_H_
#include "sample_pcmu.h"
void* pcmuf_mod_open(void);
void pcmuf_mod_close(void* ctx);
int pcmuf_mod_set_param(void* ctx, int cmd, int arg);
int pcmuf_mod_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#endif

View file

@ -0,0 +1,45 @@
#ifndef _MMF_SOURCE_PRO_AUDIO_H_
#define _MMF_SOURCE_PRO_AUDIO_H_
#include "mmf_source.h"
#include "cmsis.h"
//#include "shell.h"
//#include "main.h"
//#include "hal_cache.h"
//#include "hal_timer.h"
#include "cmsis_os.h" // CMSIS RTOS header file
#include <math.h>
#include "hal_timer.h"
#include "sgpio_api.h"
#include "audio_api.h"
//#include "g711/g711_codec.h"
#include "../../../audio/g711/g711_codec.h"
#define DEBUG_LOG_BUF_SIZE 256
#define G711_FSIZE 160
#define RECV_PAGE_NUM 2
typedef enum {
AUDIO_MODE_UNKNOWN = -1,
AUDIO_MODE_G711A = 1,
AUDIO_MODE_G711U = 2
}Audio_mode;
typedef struct {
Audio_mode mode; //intend to encode as G711A or G711U
int len; //data length
// _sema RWSema;
unsigned char *raw_data; //address of buffered data (not encoded
int data_start; // a shift value to show where the data starts
int data_end; // a shift value shows data ending
}audio_buf_context;
void* audio_mod_open(void);
void audio_mod_close(void* ctx);
int audio_mod_set_param(void* ctx, int cmd, int arg);
int audio_mod_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#define CMD_AUDIO_SET_FRAMETYPE 0x10
#endif

View file

@ -0,0 +1,8 @@
#ifndef _MMF_SOURCE_PRO_AUDIO_H_
#define _MMF_SOURCE_PRO_AUDIO_H_
#include "mmf_wrapper/mmf_wrapper_pro_audio.h"
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#endif

View file

@ -0,0 +1,52 @@
#ifndef _MMF_SOURCE_RTP_H_
#define _MMF_SOURCE_RTP_H_
#include "wifi_conf.h"
#include "lwip/api.h" //netconn use
#include <lwip/sockets.h>
#include "rtsp/rtp_api.h"
#define MAX_SELECT_SOCKET 8
#define DEFAULT_RTP_PORT 16384
#if CONFIG_EXAMPLE_MP3_STREAM_RTP
#define G711_BLK_SIZE (634)
#define AUDIO_BUF_SIZE (646) //160 BYTE DATA + 12 BYTE RTP HEADER
#elif CONFIG_EXAMPLE_MEDIA_BISTREAM || CONFIG_EXAMPLE_MEDIA_H264_AND_TWO_WAY_AUDIO || CONFIG_MEDIA_STREAMING_AND_RECORDING
#define G711_BLK_SIZE (160)
#define AUDIO_BUF_SIZE (1500) //160 BYTE DATA + 12 BYTE RTP HEADER
#else
#define G711_BLK_SIZE (160)
#define AUDIO_BUF_SIZE (172) //160 BYTE DATA + 12 BYTE RTP HEADER
#endif
#define AUDIO_BUF_DEPTH (4)
typedef struct rtp_exbuf_type
{
u8 buf[AUDIO_BUF_SIZE];
int len;
}rtp_exbuf_t;
typedef struct rtp_client_type
{
TaskHandle_t task_handle;
xQueueHandle cache_queue;
xQueueHandle done_queue;
struct connect_context connect_ctx;
_sema rtp_sema;
u8 rtp_shutdown;
u8 rtp_socket_closed;
}rtp_client_t;
void* rtp_mod_open(void);
void rtp_mod_close(void* ctx);
int rtp_mod_set_param(void* ctx, int cmd, int arg);
int rtp_mod_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#define CMD_RTP_SET_PRIV_BUF 0x10
#define CMD_RTP_SET_SINK_MODULE 0x11
#define CMD_RTP_SET_SUPPORTED_PAYLOAD_TYPE 0x12
#endif

View file

@ -0,0 +1,24 @@
#ifndef _MMF_SOURCE_UVC_H_
#define _MMF_SOURCE_UVC_H_
#include "videodev2.h"
#include "uvcvideo.h"
#include "v4l2_driver.h"
#include "uvc_intf.h"
void* uvc_mod_open(void);
void uvc_mod_close(void* ctx);
int uvc_mod_set_param(void* ctx, int cmd, int arg);
int uvc_mod_handle(void* ctx, void* b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#define CMD_UVC_SET_HEIGHT 0x10
#define CMD_UVC_SET_WIDTH 0x11
#define CMD_UVC_SET_FRAMERATE 0x12
#define CMD_UVC_SET_CPZRATIO 0x13
#define CMD_UVC_SET_FRAMETYPE 0x14
#define CMD_UVC_SET_APPLY 0x15
#define CMD_UVC_GET_STREAM_READY 0x16
#define CMD_UVC_GET_STREAM_STATUS 0x17
#endif

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,35 @@
#ifndef _MMF_WRAPPER_PRO_AUDIO_H_
#define _MMF_WRAPPER_PRO_AUDIO_H_
#include "g711/g711_codec.h"
#define ENABLE_SPEEX_AEC (1)
#define ENABLE_AAC_ENC (1)
#define ENABLE_AAC_DEC (1)
#define AUDIO_DMA_PAGE_NUM 2
#define AUDIO_DMA_PAGE_SIZE (320)
#define G711_FSIZE (160)
void *audio_wrapper_open();
void audio_wrapper_close();
int audio_wrapper_set_param(void *ctx, int cmd, int arg);
int audio_wrapper_sink_mod_handle(void *ctx, void *b);
int audio_wrapper_source_mod_handle(void *ctx, void *b);
/*customized CMDs used for this module - all customized CMDs should start from 0x10 at least*/
#define CMD_AUDIO_SET_SOURCE_FRAMETYPE 0x10
#define CMD_AUDIO_SET_SINK_FRAMETYPE 0x11
#define CMD_AUDIO_TX_ENABLE 0x12
#define CMD_AUDIO_RX_ENABLE 0x13
#define CMD_AUDIO_AACEN_SET_SAMPLERATE 0x20
#define CMD_AUDIO_AACEN_SET_CHANNEL 0x21
#define CMD_AUDIO_AACEN_SET_APPLY 0x22
#define CMD_AUDIO_AACDE_SET_SAMPLERATE 0x30
#define CMD_AUDIO_AACDE_SET_CHANNEL 0x31
#define CMD_AUDIO_AACDE_SET_APPLY 0x32
#endif

View file

@ -0,0 +1,85 @@
#ifndef _SENSOR_SERVICE_H_
#define _SENSOR_SERVICE_H_
void init_sensor_service(void);
/**
* ambient light sensor init
*
* @param param For future use.
* @return 0 for success
*/
int ambient_light_sensor_init(void *param);
/**
* Turn on ambient light sensor power.
*
* Some ambient light sensor has low power mode and able to save power while not in use.
*
* @param enable 1 for power on, 0 for power off
* @return 0 for success
*/
int ambient_light_sensor_power(int enable);
/**
* Get LUX (illuminance) from ambient light sensor
*
* @param sensibility Range:0~100. Ambient light sensor is able to adjust the integration time to get more precision lux value
* @return 0 for success
*/
int ambient_light_sensor_get_lux(int sensibility);
/**
* IR cut init
*
* @param param For future use.
* @return 0 for success
*/
int ir_cut_init(void *param);
/**
* enable/disable IR cut
*
* @param enable 1 for enable, 0 for disable
* @return 0 for success
*/
int ir_cut_enable(int enable);
/**
* IR ctrl init
*
* @param param For future use.
* @return 0 for success
*/
int ir_ctrl_init(void *param);
/**
* Adjust IR LED brightness
*
* @param brightness range:0.0~1.0
* @return 0 for success
*/
int ir_ctrl_set_brightness(float brightness);
/**
* enable/disable gray mode
*
* In low light situation, we can turn on IR LED to get enough light.
* But it also turns thing red. So we need enter gray mode.
*
* @param enable 1 for enable, 0 for disable
* @return 0 for success
*/
int sensor_external_set_gray_mode(int enable);
/**
* loop routine
*
* If sensor implementation are block functions without and task swith, then we can put some delay here to let other task do their jobs.
* We can also put some routine related to sensor here.
*
* @return 0 for success
*/
int sensor_external_loop();
#endif

View file

@ -0,0 +1,10 @@
#ifndef SNAPSHOT_TFTP_HANDLER_H
#define SNAPSHOT_TFTP_HANDLER_H
void jpeg_snapshot_create_tftp_thread();
void jpeg_snapshot_set_tftp_host_ip(char* addr_string);
char* jpeg_snapshot_get_tftp_host_ip();
void jpeg_snapshot_set_filename(char* file_name);
char* jpeg_snapshot_get_filename();
#endif /* SNAPSHOT_TFTP_HANDLER_H */

View file

@ -0,0 +1,7 @@
#ifndef __MEDIA_AMEBACAM_APP_BROADCAST_H__
#define __MEDIA_AMEBACAM_APP_BROADCAST_H__
void media_amebacam_broadcast();
#endif //#ifndef __MEDIA_AMEBACAM_APP_BROADCAST_H__

View file

@ -0,0 +1,35 @@
#ifndef ENCODER_MEMORY_H
#define ENCODER_MEMORY_H
#include "osdep_service.h"
#include <stdint.h>
struct encoder_buffer{
_mutex memory_lock;
uint8_t* pool;
uint8_t* pool_table; // index table
int32_t max_pool_blk; //
int32_t blk_size; // one block size
int32_t mem_size; // total pool size
int32_t pool_blk_idx;
int32_t tail_blk_idx; // tail empty block start index, it will set when pool_blk_idx reset to 0, clear to -1, when pool_blk_idx != 0 in realloc function
int32_t rest_pool_blk;
int32_t blk_serial;
int32_t min_rest_blk;
};
void *memory_init(int size,int block_size);
void memory_deinit(void *ctx);
//u8* _memory_realloc(struct encoder_buffer *eb,uint8_t *addr,uint32_t size);
u8* memory_realloc(void *ctx,uint8_t *addr,uint32_t size);
void memory_free(void *ctx,uint8_t *addr);
void* memory_alloc(void *ctx,uint32_t size);
void dump_info(void *ctx);
#endif

View file

@ -0,0 +1,12 @@
#ifndef MMF2_H
#define MMF2_H
#include "mmf2_link.h"
#include "mmf2_module.h"
#include "mmf2_siso.h"
#include "mmf2_miso.h"
#include "mmf2_mimo.h"
#include "mmf2_simo.h"
#endif

View file

@ -0,0 +1,112 @@
#ifndef __MMF_DBG_H_
#define __MMF_DBG_H_
#include <stdint.h>
// Define debug group
#define _MMF_DBG_RTSP_ 0x00000001
#define _MMF_DBG_RTP_ 0x00000002
#define _MMF_DBG_ISP_ 0x00000004
#define _MMF_DBG_ENCODER_ 0x00000008
extern uint32_t ConfigDebugMmfErr;
extern uint32_t ConfigDebugMmfWarn;
extern uint32_t ConfigDebugMmfInfo;
#define DBG_MMF_ERR_MSG_ON(x) (ConfigDebugMmfErr |= (x))
#define DBG_MMF_WARN_MSG_ON(x) (ConfigDebugMmfWarn |= (x))
#define DBG_MMF_INFO_MSG_ON(x) (ConfigDebugMmfInfo |= (x))
#define DBG_MMF_ERR_MSG_OFF(x) (ConfigDebugMmfErr &= ~(x))
#define DBG_MMF_WARN_MSG_OFF(x) (ConfigDebugMmfWarn &= ~(x))
#define DBG_MMF_INFO_MSG_OFF(x) (ConfigDebugMmfInfo &= ~(x))
#define RTSP_ERR_PREFIX "[RTSP Err]"
#define RTSP_WARN_PREFIX "[RTSP Wrn]"
#define RTSP_INFO_PREFIX "[RTSP Inf]"
#define RTP_ERR_PREFIX "[RTP Err]"
#define RTP_WARN_PREFIX "[RTP Wrn]"
#define RTP_INFO_PREFIX "[RTP Inf]"
#define ISP_ERR_PREFIX "[ISP Err]"
#define ISP_WARN_PREFIX "[ISP Wrn]"
#define ISP_INFO_PREFIX "[ISP Inf]"
#define ENCODER_ERR_PREFIX "[Enc Err]"
#define ENCODER_WARN_PREFIX "[Enc Wrn]"
#define ENCODER_INFO_PREFIX "[Enc Inf]"
#define MMF_PRINTK printf
#define RTSP_DBG_ERROR(...) \
do { \
if (ConfigDebugMmfErr&_MMF_DBG_RTSP_) \
MMF_PRINTK("\n\r" RTSP_ERR_PREFIX __VA_ARGS__); \
}while(0)
#define RTP_DBG_ERROR(...) \
do { \
if (ConfigDebugMmfErr&_MMF_DBG_RTP_) \
MMF_PRINTK("\n\r" RTP_ERR_PREFIX __VA_ARGS__); \
}while(0)
#ifdef ISP_DBG_ERROR
#undef ISP_DBG_ERROR
#define ISP_DBG_ERROR(...) \
do { \
if (ConfigDebugMmfErr&_MMF_DBG_ISP_) \
MMF_PRINTK("\n\r" ISP_ERR_PREFIX __VA_ARGS__); \
}while(0)
#endif
#define ENCODER_DBG_ERROR(...) \
do { \
if (ConfigDebugMmfErr&_MMF_DBG_ENCODER_) \
MMF_PRINTK("\n\r" ENCODER_ERR_PREFIX __VA_ARGS__); \
}while(0)
// DBG_WARNING
#define RTSP_DBG_WARNING(...) \
do { \
if (ConfigDebugMmfWarn&_MMF_DBG_RTSP_) \
MMF_PRINTK("\n\r" RTSP_WARN_PREFIX __VA_ARGS__); \
}while(0)
#define RTP_DBG_WARNING(...) \
do { \
if (ConfigDebugMmfWarn&_MMF_DBG_RTP_) \
MMF_PRINTK("\n\r" RTP_WARN_PREFIX __VA_ARGS__); \
}while(0)
#define ISP_DBG_WARNING(...) \
do { \
if (ConfigDebugMmfWarn&_MMF_DBG_ISP_) \
MMF_PRINTK("\n\r" ISP_WARN_PREFIX __VA_ARGS__); \
}while(0)
#define ENCODER_DBG_WARNING(...) \
do { \
if (ConfigDebugMmfWarn&_MMF_DBG_ENCODER_) \
MMF_PRINTK("\n\r" ENCODER_WARN_PREFIX __VA_ARGS__); \
}while(0)
// DBG_INFO
#define RTSP_DBG_INFO(...) \
do { \
if (ConfigDebugMmfInfo&_MMF_DBG_RTSP_) \
MMF_PRINTK("\n\r" RTSP_INFO_PREFIX __VA_ARGS__); \
}while(0)
#define RTP_DBG_INFO(...) \
do { \
if (ConfigDebugMmfInfo&_MMF_DBG_RTP_) \
MMF_PRINTK("\n\r" RTP_INFO_PREFIX __VA_ARGS__); \
}while(0)
#define ISP_DBG_INFO(...) \
do { \
if (ConfigDebugMmfInfo&_MMF_DBG_ISP_) \
MMF_PRINTK("\n\r" ISP_INFO_PREFIX __VA_ARGS__); \
}while(0)
#define ENCODER_DBG_INFO(...) \
do { \
if (ConfigDebugMmfInfo&_MMF_DBG_ENCODER_) \
MMF_PRINTK("\n\r" ENCODER_INFO_PREFIX __VA_ARGS__); \
}while(0)
#endif

View file

@ -0,0 +1,48 @@
#ifndef MMF2_INTERCONNECT_H
#define MMF2_INTERCONNECT_H
// MMIC : media moudle inter connection
//-----------------------------------------------------------------------------
// Inter connection module command
#define MMIC_CMD_ADD_INPUT 0x00
#define MMIC_CMD_ADD_INPUT0 0x00
#define MMIC_CMD_ADD_INPUT1 0x01
#define MMIC_CMD_ADD_INPUT2 0x02
#define MMIC_CMD_ADD_INPUT3 0x03
#define MMIC_CMD_ADD_OUTPUT 0x10
#define MMIC_CMD_ADD_OUTPUT0 0x10
#define MMIC_CMD_ADD_OUTPUT1 0x11
#define MMIC_CMD_ADD_OUTPUT2 0x12
#define MMIC_CMD_ADD_OUTPUT3 0x13
#define MMIC_CMD_SET_STACKSIZE 0x20
#define MMIC_CMD_SET_TASKPRIORITY 0x21
#define MMIC_STAT_EXIT 0x00
#define MMIC_STAT_RUN 0x01
#define MMIC_STAT_PAUSE 0x02
#define MMIC_STAT_SET_EXIT 0x10
#define MMIC_STAT_SET_PAUSE 0x20
#define MMIC_STAT_SET_RUN 0x40
//
#define MM_OUTPUT_MASK 0xf0
#define MM_OUTPUT 0x10
#define MM_OUTPUT0 0x10
#define MM_OUTPUT1 0x20
#define MM_OUTPUT2 0x40
#define MM_OUTPUT3 0x80
#define MM_INPUT_MASK 0x0f
#define MM_INPUT 0x01
#define MM_INPUT0 0x01
#define MM_INPUT1 0x02
#define MM_INPUT2 0x04
#define MM_INPUT3 0x08
#define MMIC_DEP_INPUT0 MM_INPUT0
#define MMIC_DEP_INPUT1 MM_INPUT1
#define MMIC_DEP_INPUT2 MM_INPUT2
#define MMIC_DEP_INPUT3 MM_INPUT3
#endif

View file

@ -0,0 +1,61 @@
#ifndef MMF2_MIMO_H
#define MMF2_MIMO_H
#include <stdint.h>
#include <FreeRTOS.h>
#include <task.h>
#include "mmf2_module.h"
#include "dlist.h"
typedef struct mm_mimo_item_s
{
// list node
struct list_head node;
// data
uint32_t data;
// ref count
uint32_t ref_cnt;
// log
uint32_t use_log;
}mm_mimo_item_t;
typedef struct mm_mimo_queue_s{
// list entry
struct list_head head;
// protection
SemaphoreHandle_t lock;
}mm_mimo_queue_t;
typedef struct mm_mimo_s{
int input_cnt;
// depend on intput count
mm_context_t *input[4];
mm_mimo_queue_t queue[4];
int output_cnt;
// depend on output count
uint32_t pause_mask[4];
mm_context_t *output[4]; // output module context
uint32_t output_dep[4]; // output depend on which input, bit mask
uint32_t input_mask[4]; // convert from output_dep, input referenced by which output, bit mask
uint32_t status[4];
uint32_t stack_size;
uint32_t task_priority;
xTaskHandle task[4];
}mm_mimo_t;
extern int mimo_start(mm_mimo_t* mimo);
extern void mimo_stop(mm_mimo_t* mimo);
extern void mimo_pause(mm_mimo_t* mimo, uint32_t pause_mask);
extern void mimo_resume(mm_mimo_t* mimo);
extern void mimo_ctrl(mm_mimo_t* mimo, uint32_t cmd, uint32_t arg1, uint32_t arg2);
extern mm_mimo_t* mimo_create(void);
extern mm_mimo_t* mimo_delete(mm_mimo_t* mimo);
#endif

View file

@ -0,0 +1,29 @@
#ifndef MMF2_MISO_H
#define MMF2_MISO_H
#include <stdint.h>
#include <FreeRTOS.h>
#include <task.h>
#include "mmf2_module.h"
typedef struct mm_miso_s{
int input_cnt;
mm_context_t *input[4]; // max 4 input
mm_context_t *output;
uint32_t pause_mask;
uint32_t status;
uint32_t stack_size;
uint32_t task_priority;
xTaskHandle task;
}mm_miso_t;
extern int miso_start(mm_miso_t* miso);
extern void miso_stop(mm_miso_t* miso);
extern void miso_pause(mm_miso_t* miso, uint32_t pause_mask);
extern void miso_resume(mm_miso_t* miso);
extern void miso_ctrl(mm_miso_t* miso, uint32_t cmd, uint32_t arg1, uint32_t arg2);
extern mm_miso_t* miso_create(void);
extern mm_miso_t* miso_delete(mm_miso_t* miso);
#endif

View file

@ -0,0 +1,124 @@
#ifndef MMF2_MODULE_H
#define MMF2_MODULE_H
#include <stdint.h>
#include <FreeRTOS.h>
#include <semphr.h>
#include <diag.h>
#if defined(CONFIG_PLATFORM_8721D)
#ifndef rt_printf
#define rt_printf printf
#endif
#define mm_printf rt_printf
#else
#define mm_printf(...) do{ __disable_irq(); rt_printf(__VA_ARGS__); __enable_irq();}while(0)
#endif
// MM : media module
//-----------------------------------------------------------------------------
#define MM_TYPE_NONE 0x00 // not create output queue if output type is none
#define MM_MASK_SRC 0x10
#define MM_TYPE_VSRC 0x10 // ISP or file
#define MM_TYPE_ASRC 0x11 // I2S or file or RTP
#define MM_MASK_DSP 0x20
#define MM_TYPE_VDSP 0x20 // H264 ENC or JPEG ENC
#define MM_TYPE_ADSP 0x21 // AAC ENC or AAC DEC
#define MM_MASK_SINK 0x40
#define MM_TYPE_VSINK 0x41 // RTSP or file
#define MM_TYPE_ASINK 0x42 // RTSP or I2S or file
#define MM_TYPE_AVSINK 0x43 // RTSP or file
#define MM_CMD_INIT_QUEUE_ITEMS 0x00 // init static queue item
#define MM_CMD_SET_QUEUE_LEN 0x01 // set one queue's length
#define MM_CMD_SET_QUEUE_NUM 0x02 // set number of queue (multiple queue)
#define MM_CMD_SELECT_QUEUE 0x03 // select queue from queue0 ~ queue3
#define MM_CMD_CLEAR_QUEUE_ITEMS 0x04 // clear queue item
#define MM_CMD_MODULE_BASE 0x80
#define MM_MODULE_CMD(x) (MM_CMD_MODULE_BASE+(x))
#define MM_STAT_INIT 0x00
#define MM_STAT_READY 0x01
#define MM_STAT_ERROR 0x10
#define MM_STAT_ERR_MALLOC 0x11
#define MM_STAT_ERR_QUEUE 0x12
#define MM_STAT_ERR_NEWITEM 0x13
/* common error code for MMF */
#define EAGAIN 11
#define EFAULT 14
#define EINVAL 22
#define ENOSR 63
typedef struct mm_module_s{
void* (*create)(void*);
void* (*destroy)(void*);
int (*control)(void*, int, int);
int (*handle)(void*, void*, void*); // void* ctx, void* input, void *output , return ( <0 error code, >0 success with output length , =0 success)
void* (*new_item)(void*); // malloc
void* (*del_item)(void*, void*); // free
void* (*rsz_item)(void*, void*, int); // resize (only shrink)
uint32_t output_type;
uint32_t module_type;
char* name;
}mm_module_t;
typedef struct mm_conveyor_s{
xQueueHandle output_ready;
xQueueHandle output_recycle;
int32_t item_num;
}mm_conveyor_t;
typedef struct mm_contex_s{
union{
struct{
xQueueHandle output_ready;
xQueueHandle output_recycle;
int32_t item_num;
};
mm_conveyor_t port[4];
};
mm_module_t* module;
// private data structure for created instance
void* priv;
// module state
uint32_t state;
int32_t queue_num; // number of queue
int32_t curr_queue;
}mm_context_t;
#define MMQI_FLAG_STATIC 0x00
#define MMQI_FLAG_DYNAMIC 0x01
#define MMQI_FLAG_READY 0x10
#define MMQI_FLAG_USED 0x20
typedef struct mm_queue_item_s{
uint32_t flag;
uint32_t data_addr; // store data address
uint32_t timestamp;
uint32_t hw_timestamp;
uint32_t type;
uint32_t size;
uint32_t index; // for RTSP
uint32_t in_idx; // input index
}mm_queue_item_t;
extern void mm_module_ctrl(mm_context_t *ctx, int cmd, int arg);
extern mm_context_t* mm_module_open(mm_module_t *mm );
extern mm_context_t* mm_module_close(mm_context_t *ctx);
#endif

View file

@ -0,0 +1,61 @@
#ifndef MMF2_SIMO_H
#define MMF2_SIMO_H
#include <stdint.h>
#include <FreeRTOS.h>
#include <task.h>
#include <semphr.h>
#include "dlist.h"
#include "mmf2_module.h"
typedef struct mm_simo_item_s
{
// list node
struct list_head node;
// data
uint32_t data;
// ref count
uint32_t ref_cnt;
// log
uint32_t use_log;
}mm_simo_item_t;
typedef struct mm_simo_queue_s{
// list entry
struct list_head head;
// item counter
int count;
// protection
SemaphoreHandle_t lock;
}mm_simo_queue_t;
typedef struct mm_simo_s{
mm_context_t *input;
int output_cnt;
mm_context_t *output[4];
// internal queue to handle reference count and usage log
mm_simo_queue_t queue;
uint32_t pause_mask;
uint32_t status[4];
uint32_t stack_size;
uint32_t task_priority;
xTaskHandle task[4];
}mm_simo_t;
extern int simo_start(mm_simo_t* simo);
extern void simo_stop(mm_simo_t* simo);
extern void simo_pause(mm_simo_t* simo, uint32_t pause_mask);
extern void simo_resume(mm_simo_t* simo);
extern void simo_ctrl(mm_simo_t* simo, uint32_t cmd, uint32_t arg1, uint32_t arg2);
extern mm_simo_t* simo_create(void);
extern mm_simo_t* simo_delete(mm_simo_t* simo);
#endif

View file

@ -0,0 +1,30 @@
#ifndef MMF2_SISO_H
#define MMF2_SISO_H
#include <stdint.h>
#include <FreeRTOS.h>
#include <task.h>
#include "mmf2_module.h"
typedef struct mm_siso_s{
mm_context_t *input;
mm_context_t *output;
int input_port_idx; // default is 0, can be set to 1 or 2 or 3 if source module support 2 or more output queue
uint32_t status;
uint32_t stack_size;
uint32_t task_priority;
xTaskHandle task;
}mm_siso_t;
extern int siso_start(mm_siso_t* siso);
extern void siso_stop(mm_siso_t* siso);
extern void siso_pause(mm_siso_t* siso);
extern void siso_resume(mm_siso_t* siso);
extern void siso_ctrl(mm_siso_t* siso, uint32_t cmd, uint32_t arg1, uint32_t arg2);
extern mm_siso_t* siso_create(void);
extern mm_siso_t* siso_delete(mm_siso_t* siso);
#endif

View file

@ -0,0 +1,50 @@
#ifndef _MODULE_AAC_H
#define _MODULE_AAC_H
#include <stdint.h>
#include "mmf2_module.h"
#include "faac.h"
#define CMD_AAC_SET_PARAMS MM_MODULE_CMD(0x00) // set parameter
#define CMD_AAC_GET_PARAMS MM_MODULE_CMD(0x01) // get parameter
#define CMD_AAC_SAMPLERATE MM_MODULE_CMD(0x02)
#define CMD_AAC_CHANNEL MM_MODULE_CMD(0x03)
#define CMD_AAC_BITLENGTH MM_MODULE_CMD(0x04)
#define CMD_AAC_MEMORY_SIZE MM_MODULE_CMD(0x07)
#define CMD_AAC_BLOCK_SIZE MM_MODULE_CMD(0x08)
#define CMD_AAC_MAX_FRAME_SIZE MM_MODULE_CMD(0x09)
#define CMD_AAC_INIT_MEM_POOL MM_MODULE_CMD(0x0a)
#define CMD_AAC_APPLY MM_MODULE_CMD(0x20) // for hardware module
typedef struct aac_param_s{
uint32_t sample_rate; // 8000
uint32_t channel; // 1
uint32_t bit_length; // 16
uint32_t mpeg_version; // 16
uint32_t mem_total_size;
uint32_t mem_block_size;
uint32_t mem_frame_size;
int samples_input;
int max_bytes_output;
//...
}aac_params_t;
typedef struct aac_ctx_s{
void* parent;
faacEncHandle faac_enc;
void* mem_pool;
aac_params_t params;
uint8_t *cache;
uint32_t cache_idx;
}aac_ctx_t;
extern mm_module_t aac_module;
#endif

View file

@ -0,0 +1,46 @@
#ifndef _MODULE_AAD_H
#define _MODULE_AAD_H
#include <stdint.h>
#include "aacdec.h"
#define CMD_AAD_SET_PARAMS MM_MODULE_CMD(0x00) // set parameter
#define CMD_AAD_GET_PARAMS MM_MODULE_CMD(0x01) // get parameter
#define CMD_AAD_SAMPLERATE MM_MODULE_CMD(0x02)
#define CMD_AAD_CHANNEL MM_MODULE_CMD(0x03)
#define CMD_AAD_STREAM_TYPE MM_MODULE_CMD(0x04)
#define CMD_AAD_APPLY MM_MODULE_CMD(0x20) // for hardware module
#define TYPE_ADTS 0
#define TYPE_RTP_RAW 1
#define TYPE_TS 2
typedef struct aad_param_s{
uint32_t type;
uint32_t sample_rate; // 8000
uint32_t channel; // 1
}aad_params_t;
typedef void (*aad_parser_t)(void*, void*, int);
typedef struct aad_ctx_s{
void* parent;
HAACDecoder aad;
aad_params_t params;
uint16_t data_cache_len;
uint16_t data_cache_size;
uint8_t *data_cache;
uint8_t *decode_buf;
aad_parser_t parser;
}aad_ctx_t;
extern mm_module_t aad_module;
#endif

View file

@ -0,0 +1,64 @@
#ifndef _MODULE_ARRAY_H
#define _MODULE_ARRAY_H
#include <FreeRTOS.h>
#include <Freertos_service.h>
#include <task.h>
#include <stdint.h>
#include "timer_api.h"
#define DEFAULT_G711_LEN 160
#define DEFAULT_AAC_LEN 2048
#define ARRAY_MODE_ONCE 0
#define ARRAY_MODE_LOOP 1
#define CMD_ARRAY_SET_PARAMS MM_MODULE_CMD(0x00) // set parameter
#define CMD_ARRAY_GET_PARAMS MM_MODULE_CMD(0x01) // get parameter
#define CMD_ARRAY_SET_ARRAY MM_MODULE_CMD(0x02)
#define CMD_ARRAY_SET_MODE MM_MODULE_CMD(0x03)
#define CMD_ARRAY_GET_STATE MM_MODULE_CMD(0x04)
#define CMD_ARRAY_STREAMING MM_MODULE_CMD(0x05)
#define CMD_ARRAY_APPLY MM_MODULE_CMD(0x20) // for hardware module
typedef struct array_param_s{
uint32_t type;
uint32_t codec_id;
uint8_t mode;
union{
struct array_video_param_s{
uint32_t fps;
uint8_t h264_nal_size;
}v;
struct array_audio_param_s{
uint32_t channel;
uint32_t samplerate;
uint32_t sample_bit_length;
uint32_t frame_size;
}a;
}u;
}array_params_t;
typedef struct array_s{
uint32_t data_addr;
uint32_t data_len;
uint32_t data_offset;
}array_t;
typedef struct array_ctx_s{
void* parent;
TaskHandle_t task;
_sema up_sema;
gtimer_t frame_timer;
uint32_t frame_timer_period; // us
array_params_t params;
array_t array;
// flag
int stop;
}array_ctx_t;
extern mm_module_t array_module;
#endif

View file

@ -0,0 +1,66 @@
#ifndef _MODULE_AUDIO_H
#define _MODULE_AUDIO_H
#include "mmf2_module.h"
#if defined(CONFIG_PLATFORM_8721D) //amebad
#include "ameba_soc.h"
#include "rl6548.h"
#else //amebapro use audio api
#include "audio_api.h"
#endif
#define ENABLE_SPEEX_AEC 1
#define CMD_AUDIO_SET_PARAMS MM_MODULE_CMD(0x00) // set parameter
#define CMD_AUDIO_GET_PARAMS MM_MODULE_CMD(0x01) // get parameter
#define CMD_AUDIO_SET_SAMPLERATE MM_MODULE_CMD(0x02)
#define CMD_AUDIO_SET_WORDLENGTH MM_MODULE_CMD(0x03)
#define CMD_AUDIO_SET_MICGAIN MM_MODULE_CMD(0x04)
#define CMD_AUDIO_SET_AES MM_MODULE_CMD(0x05)
#define CMD_AUDIO_APPLY MM_MODULE_CMD(0x20) // for hardware module
#if defined(CONFIG_PLATFORM_8721D) //amebad
typedef struct {
GDMA_InitTypeDef SpTxGdmaInitStruct; //Pointer to GDMA_InitTypeDef
GDMA_InitTypeDef SpRxGdmaInitStruct; //Pointer to GDMA_InitTypeDef
}SP_GDMA_STRUCT, *pSP_GDMA_STRUCT;
typedef struct audio_param_s{
uint32_t sample_rate;
uint32_t word_length;
uint32_t mono_stereo;
uint32_t direction;
uint32_t enable_aec; // 0
uint32_t mix_mode; // 0
}audio_params_t;
#else //amebapro
typedef struct audio_param_s{
audio_sr sample_rate; // ASR_8KHZ
audio_wl word_length; // WL_16BIT
audio_mic_gain mic_gain; // MIC_40DB
int channel; // 1
int enable_aec; // 0
int mix_mode; // 0
//...
}audio_params_t;
#endif
typedef struct audio_ctx_s{
void* parent;
#if !defined(CONFIG_PLATFORM_8721D) //amebapro
audio_t* audio;
#endif
audio_params_t params;
uint32_t sample_rate;
uint8_t word_length; // Byte
// for AEC
TaskHandle_t aec_rx_task;
xSemaphoreHandle aec_rx_done_sema;
}audio_ctx_t;
extern mm_module_t audio_module;
#endif

View file

@ -0,0 +1,32 @@
#ifndef _MODULE_G711_H
#define _MODULE_G711_H
#include <stdint.h>
#define CMD_G711_SET_PARAMS MM_MODULE_CMD(0x00) // set parameter
#define CMD_G711_GET_PARAMS MM_MODULE_CMD(0x01) // get parameter
#define CMD_G711_CODECID MM_MODULE_CMD(0x02)
#define CMD_G711_LENGTH MM_MODULE_CMD(0x03)
#define CMD_G711_CODECMODE MM_MODULE_CMD(0x04)
#define CMD_G711_APPLY MM_MODULE_CMD(0x20) // for hardware module
#define G711_ENCODE 0
#define G711_DECODE 1
typedef struct g711_param_s{
uint32_t codec_id; // AV_CODEC_ID_PCMA or AV_CODEC_ID_PCMU
uint32_t buf_len; // output buffer length
uint32_t mode; // decode or encode
}g711_params_t;
typedef struct g711_ctx_s{
void* parent;
g711_params_t params;
}g711_ctx_t;
extern mm_module_t g711_module;
#endif

View file

@ -0,0 +1,76 @@
#ifndef _MODULE_H264_H
#define _MODULE_H264_H
#include "h264_encoder.h"
#include "mmf2_module.h"
#define CMD_H264_SET_PARAMS MM_MODULE_CMD(0x00)
#define CMD_H264_GET_PARAMS MM_MODULE_CMD(0x01)
#define CMD_H264_SET_HEIGHT MM_MODULE_CMD(0x02)
#define CMD_H264_SET_WIDTH MM_MODULE_CMD(0x03)
#define CMD_H264_BITRATE MM_MODULE_CMD(0x04)
#define CMD_H264_FPS MM_MODULE_CMD(0x05)
#define CMD_H264_GOP MM_MODULE_CMD(0x06)
#define CMD_H264_MEMORY_SIZE MM_MODULE_CMD(0x07)
#define CMD_H264_BLOCK_SIZE MM_MODULE_CMD(0x08)
#define CMD_H264_MAX_FRAME_SIZE MM_MODULE_CMD(0x09)
#define CMD_H264_RCMODE MM_MODULE_CMD(0x0a)
#define CMD_H264_SET_RCPARAM MM_MODULE_CMD(0x0b)
#define CMD_H264_GET_RCPARAM MM_MODULE_CMD(0x0c)
#define CMD_H264_INIT_MEM_POOL MM_MODULE_CMD(0x0d)
#define CMD_H264_FORCE_IFRAME MM_MODULE_CMD(0x0e)
#define CMD_H264_SET_RCADVPARAM MM_MODULE_CMD(0x10)
#define CMD_H264_GET_RCADVPARAM MM_MODULE_CMD(0x11)
#define CMD_SNAPSHOT_ENCODE_CB MM_MODULE_CMD(0x30)
#define CMD_H264_APPLY MM_MODULE_CMD(0x20)
#define CMD_H264_UPDATE MM_MODULE_CMD(0x21)
#define CMD_H264_PAUSE MM_MODULE_CMD(0x22)
typedef struct h264_ctx_s{
void* parent;
struct h264_context* h264_cont;
void* mem_pool;
}h264_ctx_t;
typedef struct h264_params_s{
uint32_t width;
uint32_t height;
uint32_t bps;
uint32_t fps;
uint32_t gop;
uint32_t rc_mode;
uint32_t vbr_mode; // mode 0: fixed min/max QP (try to keep quality), mode 1: flexible min/max QP (try to fit requried bitrate)
uint32_t mem_total_size;
uint32_t mem_block_size;
uint32_t mem_frame_size;
}h264_params_t;
typedef struct h264_rc_parm_s
{
unsigned int rcMode;
unsigned int iQp; // for fixed QP
unsigned int pQp; // for fixed QP
unsigned int minQp; // for CBR/VBR
unsigned int minIQp; // for CBR/VBR
unsigned int maxQp; // for CBR/VBR
}h264_rc_parm_t;
typedef struct h264_rc_adv_parm_s
{
unsigned int rc_adv_enable;
unsigned int maxBps; // for VBR
unsigned int minBps; // for VBR
int intraQpDelta;
int mbQpAdjustment;
unsigned int mbQpAutoBoost;
}h264_rc_adv_parm_t;
extern mm_module_t h264_module;
#endif

View file

@ -0,0 +1,32 @@
#ifndef _MODULE_HTTPFS_H
#define _MODULE_HTTPFS_H
#include <stdint.h>
#include <osdep_service.h>
#include "fatfs_sdcard_api.h"
#define CMD_HTTPFS_SET_PARAMS MM_MODULE_CMD(0x00) // set parameter
#define CMD_HTTPFS_GET_PARAMS MM_MODULE_CMD(0x01) // get parameter
#define CMD_HTTPFS_APPLY MM_MODULE_CMD(0x20) // for hardware module
#define CMD_HTTPFS_STREAM_STOP MM_MODULE_CMD(0x23) // stop stream
#define CMD_HTTPFS_SET_RESPONSE_CB MM_MODULE_CMD(0x14)
typedef struct httpfs_param_s{
char fileext[4];
char filedir[32];
char request_string[128];
uint32_t fatfs_buf_size;
}httpfs_params_t;
typedef struct httpfs_ctx_s{
void* parent;
TaskHandle_t task;
_sema up_sema;
httpfs_params_t params;
fatfs_sd_params_t fatfs_params;
int (*cb_response)(void);
}httpfs_ctx_t;
extern mm_module_t httpfs_module;
#endif

View file

@ -0,0 +1,46 @@
#ifndef _MODULE_I2S_H
#define _MODULE_I2S_H
#include "mmf2_module.h"
#include "audio_api.h"
#include "i2s_api.h"
#define ENABLE_SPEEX_AEC 1
#define CMD_I2S_SET_PARAMS MM_MODULE_CMD(0x00) // set parameter
#define CMD_I2S_GET_PARAMS MM_MODULE_CMD(0x01) // get parameter
#define CMD_I2S_SET_SAMPLERATE MM_MODULE_CMD(0x02)
#define CMD_I2S_SET_WORDLENGTH MM_MODULE_CMD(0x03)
#define CMD_I2S_SET_MICGAIN MM_MODULE_CMD(0x04)
#define CMD_I2S_SET_AES MM_MODULE_CMD(0x05)
#define CMD_I2S_APPLY MM_MODULE_CMD(0x20) // for hardware module
typedef struct i2s_param_s{
uint32_t sample_rate; // SR_32KHZ
uint32_t out_sample_rate; // SR_8KHZ
uint32_t word_length; // WL_24b
uint32_t out_word_length; // WL_16b
audio_mic_gain mic_gain; // MIC_40DB
int channel; // 1
int out_channel;
int enable_aec; // 0
int mix_mode; // 0
//...
}i2s_params_t;
typedef struct i2s_ctx_s{
void* parent;
i2s_t* i2s_obj;
i2s_params_t params;
uint32_t sample_rate;
uint8_t word_length; // Byte
int sr_shrink;
int wl_shrink;
int ch_shrink;
// for AEC
TaskHandle_t aec_rx_task;
xSemaphoreHandle aec_rx_done_sema;
}i2s_ctx_t;
extern mm_module_t i2s_module;
#endif

View file

@ -0,0 +1,71 @@
#ifndef _MODULE_ISP_H
#define _MODULE_ISP_H
#include <stdint.h>
#include <osdep_service.h>
#include "mmf2_module.h"
#include "isp_api.h"
#include "sensor.h"
#define CMD_ISP_SET_PARAMS MM_MODULE_CMD(0x00) // set parameter
#define CMD_ISP_GET_PARAMS MM_MODULE_CMD(0x01) // get parameter
#define CMD_ISP_STREAMID MM_MODULE_CMD(0x02)
#define CMD_ISP_HW_SLOT MM_MODULE_CMD(0x03)
#define CMD_ISP_SW_SLOT MM_MODULE_CMD(0x04)
#define CMD_ISP_FPS MM_MODULE_CMD(0x05)
#define CMD_ISP_HEIGHT MM_MODULE_CMD(0x06)
#define CMD_ISP_WIDTH MM_MODULE_CMD(0x07)
#define CMD_ISP_FORMAT MM_MODULE_CMD(0x08)
#define CMD_ISP_DUMP_STATE MM_MODULE_CMD(0x09)
#define CMD_ISP_SET_SELF_BUF MM_MODULE_CMD(0x0A)
#define CMD_ISP_SET_BOOT_MODE MM_MODULE_CMD(0x0B)
#define CMD_ISP_APPLY MM_MODULE_CMD(0x20) // apply setting
#define CMD_ISP_UPDATE MM_MODULE_CMD(0x21) // update new setting
#define CMD_ISP_STREAM_START MM_MODULE_CMD(0x22) // start stream
#define CMD_ISP_STREAM_STOP MM_MODULE_CMD(0x23) // stop stream
typedef struct isp_state_s{
uint32_t timer_1;
uint32_t timer_2;
uint32_t drop_frame;
uint32_t isp_frame;
uint32_t drop_frame_total;
uint32_t isp_frame_total;
}isp_state_t;
#define MAX_ISP_SELF_BUFF 4
typedef struct isp_param_s{
uint32_t width;
uint32_t height;
uint32_t fps;
uint32_t slot_num;
uint32_t buff_num;
uint32_t stream_id;
uint32_t format;
uint32_t self_buf_count;//Use self buffer
uint32_t self_buf_addr[MAX_ISP_SELF_BUFF];
uint32_t boot_mode;
uint32_t bayer_type;
//...
}isp_params_t;
typedef struct isp_ctx_s{
void* parent;
isp_stream_t* stream;
isp_params_t params;
isp_state_t state;
mm_queue_item_t* hw_slot_item[4];
uint32_t buf_width, buf_height;
}isp_ctx_t;
extern mm_module_t isp_module;
#endif

View file

@ -0,0 +1,47 @@
#ifndef _MODULE_JPEG_H
#define _MODULE_JPEG_H
#include "jpeg_encoder.h"
#include "mmf2_module.h"
#define CMD_JPEG_SET_PARAMS MM_MODULE_CMD(0x00)
#define CMD_JPEG_GET_PARAMS MM_MODULE_CMD(0x01)
#define CMD_JPEG_SET_HEIGHT MM_MODULE_CMD(0x02)
#define CMD_JPEG_SET_WIDTH MM_MODULE_CMD(0x03)
#define CMD_JPEG_LEVEL MM_MODULE_CMD(0x04)
#define CMD_JPEG_FPS MM_MODULE_CMD(0x05)
#define CMD_JPEG_HEADER_TYPE MM_MODULE_CMD(0x06)
#define CMD_JPEG_MEMORY_SIZE MM_MODULE_CMD(0x07)
#define CMD_JPEG_BLOCK_SIZE MM_MODULE_CMD(0x08)
#define CMD_JPEG_MAX_FRAME_SIZE MM_MODULE_CMD(0x09)
#define CMD_JPEG_INIT_MEM_POOL MM_MODULE_CMD(0x0a)
#define CMD_JPEG_GET_ENCODER MM_MODULE_CMD(0x0b)
#define CMD_SNAPSHOT_CB MM_MODULE_CMD(0x10)
#define CMD_JPEG_CHANGE_PARM_CB MM_MODULE_CMD(0x11)
#define CMD_JPEG_UPDATE MM_MODULE_CMD(0x12)
#define CMD_JPEG_APPLY MM_MODULE_CMD(0x20)
typedef struct jpeg_ctx_s{
void* parent;
struct jpeg_context* jpeg_cont;
void* mem_pool;
}jpeg_ctx_t;
typedef struct jpeg_params_s{
uint32_t width;
uint32_t height;
uint32_t level;
uint32_t fps;
uint32_t mem_total_size;
uint32_t mem_block_size;
uint32_t mem_frame_size;
}jpeg_params_t;
extern mm_module_t jpeg_module;
#endif //_MODULE_JPEG_H

View file

@ -0,0 +1,61 @@
#ifndef _MODULE_MP4_H
#define _MODULE_MP4_H
#include <stdint.h>
#include "mmf2_module.h"
#include "fatfs_sdcard_api.h"
#include "mp4_muxer.h"
#define CMD_MP4_SET_PARAMS MM_MODULE_CMD(0x00)
#define CMD_MP4_GET_PARAMS MM_MODULE_CMD(0x01)
#define CMD_MP4_SET_HEIGHT MM_MODULE_CMD(0x02)
#define CMD_MP4_SET_WIDTH MM_MODULE_CMD(0x03)
#define CMD_MP4_SET_FPS MM_MODULE_CMD(0x04)
#define CMD_MP4_SET_GOP MM_MODULE_CMD(0x05)
#define CMD_MP4_SET_SAMPLERATE MM_MODULE_CMD(0x06)
#define CMD_MP4_SET_CHANNEL MM_MODULE_CMD(0x07)
#define CMD_MP4_SET_RECORD_LENGTH MM_MODULE_CMD(0x08)
#define CMD_MP4_GET_RECORD_LENGTH MM_MODULE_CMD(0x09)
#define CMD_MP4_SET_RECORD_TYPE MM_MODULE_CMD(0x0a)
#define CMD_MP4_GET_RECORD_TYPE MM_MODULE_CMD(0x0b)
#define CMD_MP4_SET_RECORD_FILE_NAME MM_MODULE_CMD(0x0c)
#define CMD_MP4_GET_RECORD_FILE_NAME MM_MODULE_CMD(0x0d)
#define CMD_MP4_SET_FATFS_BUF_SIZE MM_MODULE_CMD(0x0e)
#define CMD_MP4_GET_FATFS_PARAMS MM_MODULE_CMD(0x0f)
#define CMD_MP4_START MM_MODULE_CMD(0x10)
#define CMD_MP4_STOP MM_MODULE_CMD(0x11)
#define CMD_MP4_GET_STATUS MM_MODULE_CMD(0x12)
#define CMD_MP4_RESET_FILE_INDEX MM_MODULE_CMD(0x13)
#define CMD_MP4_SET_STOP_CB MM_MODULE_CMD(0x14) //Every record loop will enter the callback
#define CMD_MP4_SET_END_CB MM_MODULE_CMD(0x15) //Only final loop will ebter the callback
#define CMD_MP4_LOOP_MODE MM_MODULE_CMD(0x16)
typedef struct mp4_param_s{
uint32_t width;
uint32_t height;
uint32_t fps;
uint32_t gop;
uint32_t sample_rate;
uint32_t channel;
uint32_t record_length;
uint32_t record_type;
uint32_t record_file_num;
char record_file_name[32];
uint32_t fatfs_buf_size;
}mp4_params_t;
typedef struct mp4_ctx_s{
void* parent;
pmp4_context mp4_muxer;
mp4_params_t params;
fatfs_sd_params_t fatfs_params;
}mp4_ctx_t;
extern mm_module_t mp4_module;
#endif

View file

@ -0,0 +1,49 @@
#ifndef _MODULE_RTP_H
#define _MODULE_RTP_H
#include <stdint.h>
#include "rtsp/rtp_api.h"
#define AUDIO_BUF_SIZE (1500) //160 BYTE DATA + 12 BYTE RTP HEADER
#define DEFAULT_RTP_PORT 16384
#define MAX_SELECT_SOCKET 8
#define CMD_RTP_SET_PARAMS MM_MODULE_CMD(0x00) // set parameter
#define CMD_RTP_GET_PARAMS MM_MODULE_CMD(0x01) // get parameter
#define CMD_RTP_STREAMING MM_MODULE_CMD(0x02)
#define CMD_RTP_APPLY MM_MODULE_CMD(0x20) // for hardware module
//static long listen_time_s = 0;
//static long listen_time_us = 20000; //20ms
#define LISTEN_TIME_S 0
#define LISTEN_TIME_US 500
typedef struct rtp_param_s{
uint32_t valid_pt; // set 0xFFFFFFFF ==> allow RTP_PT_PCMU/RTP_PT_PCMA/RTP_PT_DYN_BASE (type is an unsigned 8 bit value)
uint32_t port;
uint32_t frame_size;
uint32_t cache_depth;
}rtp_params_t;
typedef struct rtp_ctx_s{
void* parent;
struct connect_context connect_ctx;
TaskHandle_t task;
_sema up_sema;
rtp_params_t params;
// flag
int rtp_shutdown;
int socket_closed;
// cache handler
xQueueHandle cache_ready;
xQueueHandle cache_recycle;
TaskHandle_t cache_handler;
}rtp_ctx_t;
extern mm_module_t rtp_module;
#endif

View file

@ -0,0 +1,77 @@
#ifndef _MODULE_RTSP2_H
#define _MODULE_RTSP2_H
#include "rtsp/rtsp_api.h"
#include "mmf2_module.h"
#define TIME_SYNC_UNDEF 0
#define TIME_SYNC_EN 1
#define TIME_SYNC_DIS 2
#define RTSP2_NON_BLOCK_TYPE 0
#define RTSP2_BLOCK_TYPE 1
#define STREAM_FLOW_ID_BASE 0
#define CMD_RTSP2_SET_PARAMS MM_MODULE_CMD(0x00)
#define CMD_RTSP2_GET_PARAMS MM_MODULE_CMD(0x01)
#define CMD_RTSP2_SET_STREAMMING MM_MODULE_CMD(0x02)
#define CMD_RTSP2_SELECT_STREAM MM_MODULE_CMD(0x03)
#define CMD_RTSP2_SET_FRAMERATE MM_MODULE_CMD(0x04)
#define CMD_RTSP2_SET_BITRATE MM_MODULE_CMD(0x05)
#define CMD_RTSP2_SET_SAMPLERATE MM_MODULE_CMD(0x06)
#define CMD_RTSP2_SET_CHANNEL MM_MODULE_CMD(0x07)
#define CMD_RTSP2_SET_SPS MM_MODULE_CMD(0x08)
#define CMD_RTSP2_SET_PPS MM_MODULE_CMD(0x09)
#define CMD_RTSP2_SET_LEVEL MM_MODULE_CMD(0x0a)
#define CMD_RTSP2_SET_CODEC MM_MODULE_CMD(0x0b)
#define CMD_RTSP2_SET_FLAG MM_MODULE_CMD(0x0c)
#define CMD_RTSP2_SET_APPLY MM_MODULE_CMD(0x0d)
#define CMD_RTSP2_USE_RTP_TICK_INC MM_MODULE_CMD(0x0e)
#define CMD_RTSP2_SET_PORT MM_MODULE_CMD(0x0f)
#define CMD_RTSP2_SET_START_CB MM_MODULE_CMD(0x10)
#define CMD_RTSP2_SET_STOP_CB MM_MODULE_CMD(0x11)
#define CMD_RTSP2_SET_PAUSE_CB MM_MODULE_CMD(0x12)
#define CMD_RTSP2_SET_CUSTOM_CB MM_MODULE_CMD(0x13)
#define CMD_RTSP2_SET_DROP_TIME MM_MODULE_CMD(0x14)
#define CMD_RTSP2_SET_BLOCK_TYPE MM_MODULE_CMD(0x15)
#define CMD_RTSP2_SET_SYNC_MODE MM_MODULE_CMD(0x16)
typedef struct rtsp2_params_s{
uint32_t type;
union{
struct rtsp_video_param_s{
uint32_t codec_id;
uint32_t fps;
uint32_t bps;
uint32_t ts_flag;
char* sps;
char* pps;
char* lv;
}v;
struct rtsp_audio_param_s{
uint32_t codec_id;
uint32_t channel;
uint32_t samplerate;
}a;
}u;
}rtsp2_params_t;
typedef struct rtsp2_ctx_s{
void* parent;
struct rtsp_context *rtsp;
rtsp2_params_t params[2];
uint32_t block_type;
}rtsp2_ctx_t;
extern mm_module_t rtsp2_module;
#endif

View file

@ -0,0 +1,68 @@
#ifndef _MODULE_UA2_H
#define _MODULE_UA2_H
#include "sip/re/inc/re.h"
#include "sip/re/inc/baresip.h"
#include "sip/ua_api.h"
#include "mmf2_module.h"
#define TIME_SYNC_UNDEF 0
#define TIME_SYNC_EN 1
#define TIME_SYNC_DIS 2
#define STREAM_FLOW_ID_BASE 0
#define CMD_UA2_SET_PARAMS MM_MODULE_CMD(0x00)
#define CMD_UA2_GET_PARAMS MM_MODULE_CMD(0x01)
#define CMD_UA2_SET_STREAMMING MM_MODULE_CMD(0x02)
#define CMD_UA2_SELECT_STREAM MM_MODULE_CMD(0x03)
#define CMD_UA2_SET_FRAMERATE MM_MODULE_CMD(0x04)
#define CMD_UA2_SET_BITRATE MM_MODULE_CMD(0x05)
#define CMD_UA2_SET_SAMPLERATE MM_MODULE_CMD(0x06)
#define CMD_UA2_SET_CHANNEL MM_MODULE_CMD(0x07)
#define CMD_UA2_SET_SPS MM_MODULE_CMD(0x08)
#define CMD_UA2_SET_PPS MM_MODULE_CMD(0x09)
#define CMD_UA2_SET_LEVEL MM_MODULE_CMD(0x0a)
#define CMD_UA2_SET_CODEC MM_MODULE_CMD(0x0b)
#define CMD_UA2_SET_FLAG MM_MODULE_CMD(0x0c)
#define CMD_UA2_SET_APPLY MM_MODULE_CMD(0x0d)
#define CMD_UA2_USE_RTP_TICK_INC MM_MODULE_CMD(0x0e)
#define CMD_UA2_SET_REGISTER MM_MODULE_CMD(0x0f)
#define CMD_UA2_SET_FROM_URI MM_MODULE_CMD(0x10)
#define CMD_UA2_SET_TO_URI MM_MODULE_CMD(0x11)
typedef struct ua2_params_s{
uint32_t type;
union{
struct ua_video_param_s{
uint32_t codec_id;
uint32_t fps;
uint32_t bps;
uint32_t ts_flag;
char* sps;
char* pps;
char* lv;
}v;
struct ua_audio_param_s{
uint32_t codec_id;
uint32_t channel;
uint32_t samplerate;
}a;
}u;
}ua2_params_t;
typedef struct ua2_ctx_s{
void* parent;
struct ua_context *ua;
ua2_params_t params[2];
}ua2_ctx_t;
extern mm_module_t ua2_module;
#endif

View file

@ -0,0 +1,34 @@
#ifndef _MODULE_USBD_H
#define _MODULE_USBD_H
#include <stdint.h>
#include <osdep_service.h>
#include "mmf2_module.h"
#define FORMAT_TYPE_YUY2 0
#define FORMAT_TYPE_NV12 1
#define FORMAT_TYPE_MJPEG 2
#define FORMAT_TYPE_H264 3
#define FORMAT_TYPE_BAYER 4
#define BAYER_TYPE_BEFORE_BLC 1
#define BAYER_TYPE_AFTER_BLC 2
#define BAYER_TYPE_AFTER_LSC 3
#define BAYER_TYPE_AFTER_DNO 4
struct uvc_format{
int width;
int height;
int format;
int fps;
int state;
int isp_format;//1:YUV420 2:YUV422 3:Bayer
int ldc;//0:Disable 1:Enable
int bayer_type;
_sema uvcd_change_sema;
};
extern mm_module_t uvcd_module;
#endif

View file

@ -0,0 +1,52 @@
#ifndef _MP4_DEMUXER_
typedef struct _header{
unsigned int size;
unsigned char str[4];
}header;
#define audio_bit 31
#define vkey_bit 30
#define mvhd_length 8
#define trak_length 8
#define mdia_length 8
#define minf_length 8
#define video_type 0
#define audio_type 1
typedef struct _mp4_demux{
FATFS m_fs;
int drv_num;
char _drv[4];
FIL m_file;
char filename[32];
int type;
unsigned int video_len;
unsigned int audio_len;
unsigned int key_len;
unsigned int sample_index;
unsigned int channel_count;
//unsigned int video_buf[2740][2];
//unsigned int audio_buf[2740][2];
//unsigned int (*video_buf)[2];
//unsigned int (*audio_buf)[2];
unsigned int (*all_buf)[2];
//unsigned int all_buf[3200][2];
unsigned int keyframe[100];
unsigned char sps[0x40];
unsigned char pps[0x10];
unsigned short sps_length;
unsigned short pps_length;
unsigned int mp4_index;
unsigned int total_len;
}mp4_demux,*pmp4_demux;
int get_video_trak(mp4_demux *mp4_demuxer,int index);
int get_audio_trak(mp4_demux *mp4_demuxer,int index);
void create_adts_header(int rate_idx,int channels,int length,unsigned char *adts_header);
int ccompare( const void *a , const void *b );
FRESULT fseek ( FIL * stream, long int offset, int origin );
FRESULT fread ( void * ptr, size_t size, size_t count, FIL * stream );
FRESULT fwrite ( const void * ptr, size_t size, size_t count, FIL * stream );
#endif

View file

@ -0,0 +1,114 @@
#ifndef _MP4_ENCAP_H_
#define _MP4_ENCAP_H_
#include "basic_types.h"
#include "osdep_service.h"
#define MAX_BOX_CHILD 8
#define RBUF_SIZE 1024
typedef struct _mp4root{
unsigned int video_len;
unsigned int audio_len;
unsigned int total;
unsigned int keyindex;
}MP4root,*PMP4root;
#define STORAGE_IDLE 0
#define STORAGE_START 1
#define STORAGE_WRITE_ALL 2
#define STORAGE_WRITE_VIDEO 3
#define STORAGE_WRITE_AUDIO 4
#define STORAGE_STOP 5
#define STORAGE_END 6
#define STORAGE_ALL 0
#define STORAGE_VIDEO 1
#define STORAGE_AUDIO 2
typedef struct _mp4_payload{
unsigned char *addr;
unsigned int len;
}mp4_payload,pmp4_payload;
typedef struct _mp4_write_info{
int mp4_start_position;
int mp4_end_position;
int mp4_occupy_size;
int mp4_empty_size;
int mp4_write_start_position;
int mp4_write_end_position;
int mp4_write_occupy_size;
int mp4_write_empty_size;
int mp4_write_length;
}mp4_winfo,*pmp4_winfo;
typedef struct _mp4_context{
FATFS m_fs;
int drv_num;
char _drv[4];
FIL m_file;
char filename[32];
int Fatfs_ok;
int filecount;
int width;
int height;
int sample_rate;
int channel_count;
int frame_rate;
u32 start_time;//rtw_get_current_time()
u32 file_name_index;
u32 storage_state;
MP4root root;
MP4root root_reserve;
int period_time;
int file_total;
int sps_start;
int type;
int sps_len;
int pps_len;
int sps_pps_mark;
unsigned int *video_buffer_index;
unsigned int *video_buffer_size;
int video_size;
unsigned int *audio_buffer_index;
unsigned int *audio_buffer_size;
int audio_size;
unsigned char *moov_box;
int moov_box_size;
unsigned char *h264_buf;
int H264_LENGTH;
mp4_payload payload;
mp4_payload reserved_payload;
int reserved_start_index;
int iframe;
int reserved_type;
_sema start_fatfs_write;
int write_status;
int audio_write_status;
int video_write_status;
int buffer_write_status;//0: real write 1: virtual write
mp4_winfo winfo;
int nal_len;
int h264_extra_len;
int mp4_muxer_enable;
int (*cb_start)(void*); // start recording
int (*cb_stop)(void*); // stop recording
}mp4_context,*pmp4_context;
#define IDLE 0
#define FATFS_WRITING 1
#define FATFS_DONE 2
void mp4_handle(pmp4_context mp4_ctx,unsigned char *buf,unsigned int size,int type);
void set_mp4_audio_buffer(pmp4_context mp4_ctx,unsigned int *audio_index,unsigned int *audio_size,int size);
void set_mp4_video_buffer(pmp4_context mp4_ctx,unsigned int *video_index,unsigned int *video_size,int size);
void set_mp4_moov_buffer(pmp4_context mp4_ctx,unsigned char *moov,int size);
int mp4_set_record(pmp4_context mp4_ctx,int num);
void mp4_muxer_init(pmp4_context mp4_ctx);
void mp4_muxer_close(pmp4_context mp4_ctx);
int mp4_set_start_status(pmp4_context mp4_ctx);
int mp4_set_stop_status(pmp4_context mp4_ctx);
#endif

View file

@ -0,0 +1,106 @@
#ifndef _MP4_MUXER_H_
#define _MP4_MUXER_H_
#include "basic_types.h"
#include "osdep_service.h"
#include "fatfs_sdcard_api.h"
#define MAX_BOX_CHILD 8
#define RBUF_SIZE 1024
typedef struct _mp4root{
unsigned int video_len;
unsigned int audio_len;
unsigned int total;
unsigned int keyindex;
}MP4root,*PMP4root;
#define STORAGE_IDLE 0
#define STORAGE_INIT 1
#define STORAGE_START 2
#define STORAGE_WRITE_ALL 3
#define STORAGE_WRITE_VIDEO 4
#define STORAGE_WRITE_AUDIO 5
#define STORAGE_STOP 6
#define STORAGE_ALL 0
#define STORAGE_VIDEO 1
#define STORAGE_AUDIO 2
typedef struct _mp4_payload{
unsigned char *addr;
unsigned int len;
}mp4_payload,pmp4_payload;
typedef struct _mp4_context{
FATFS m_fs;
int drv_num;
char _drv[4];
FIL m_file;
char filename[32];
int Fatfs_ok;
int filecount;
int width;
int height;
int sample_rate;
int channel_count;
int frame_rate;
int gop;
u32 start_time;//rtw_get_current_time()
u32 file_name_index;
u32 storage_state;
MP4root root;
int period_time;
int file_total;
int sps_start;
int type;
int sps_len;
int pps_len;
int sps_pps_mark;
unsigned int *video_buffer_index;
unsigned int *video_buffer_size;
unsigned int video_size;
unsigned int *key_frame;
unsigned int key_frame_size;
unsigned int *audio_buffer_index;
unsigned int *audio_buffer_size;
unsigned int audio_size;
unsigned char *moov_box;
unsigned int moov_box_size;
unsigned char *fatfs_buf;
unsigned int fatfs_buf_size;
unsigned int fatfs_buf_pos;
mp4_payload payload;
int write_status;
int nal_len;
int h264_extra_len;
char sps_str[64];
char pps_str[64];
unsigned char ftyp_box[24];
unsigned char mdat_box[8];
int audio_clock_rate;
int video_clock_rate;
unsigned int video_old_depend_clock_tick;
unsigned int audio_old_depend_clock_tick;
unsigned int video_timestamp;
unsigned int audio_timestamp;
unsigned int video_timestamp_first;
unsigned int audio_timestamp_first;
unsigned int *video_timestamp_buffer;
unsigned int *audio_timestamp_buffer;
int (*cb_start)(void*);
int (*cb_stop)(void*);
int (*cb_end)(void*);
int loop_mode;
}mp4_context,*pmp4_context;
void mp4_muxer_init(pmp4_context mp4_ctx);
void mp4_muxer_close(pmp4_context mp4_ctx);
void set_mp4_fatfs_param(pmp4_context mp4_ctx, fatfs_sd_params_t* fatfs_param);
u8 mp4_is_recording(pmp4_context mp4_ctx);
int mp4_start_record(pmp4_context mp4_ctx, int file_num);
int mp4_stop_record(pmp4_context mp4_ctx);
void mp4_muxer_handle(pmp4_context mp4_ctx,unsigned char *buf,unsigned int size,int type,unsigned int timestamp);
#endif //_MP4_MUXER_H_

View file

@ -0,0 +1,42 @@
#ifndef _AAC_H
#define _AAC_H
#include "dlist.h" //list management
#include "basic_types.h"
#include "osdep_service.h"
//#include "osdep_api.h"
#define AAC_DEBUG 1
#if AAC_DEBUG
#define AAC_PRINTF(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args)
#define AAC_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args)
#else
#define AAC_PRINTF(fmt, args...)
#define AAC_ERROR(fmt, args...)
#endif
struct rtp_au_hdr
{
u32 au_size; //contain AU size in octets(header length included)
#if 0
u16 au_index;
u16 au_index_delta;
u16 cts_flag;
u16 cts_delta;
u16 dts_flag;
u16 dts_delta;
u16 rap_flag;
u16 stream_state;
#endif
u32 au_header_len; //record AU header size in octets
};
struct rtp_aac_obj
{
u16 au_headers_len; //contain AU header size in octet (we will translate it into bit-wise count before sending)
u8 au_header_num; //contain AU header number
// struct rtp_au_hdr *au_hdr;
};
#endif /*_AAC_H*/

View file

@ -0,0 +1,140 @@
#ifndef _AV_CODEC_H_
#define _AV_CODEC_H_
/* Is this the place to include different codec header for rtp usage?*/
struct codec_info
{
int codec_id;
const char codec_name[8];
uint8_t pt;
uint32_t clock_rate;
uint8_t audio_channels;
void *priv;
};
/* media type list -- range from 0-255 stored in 1 BYTE*/
#define AVMEDIA_TYPE_VIDEO 0
#define AVMEDIA_TYPE_AUDIO 1
#define AVMEDIA_TYPE_SUBTITLE 2
#define AVMEDIA_TYPE_UNKNOWN 255
/*codec id list -- id must match its placing order (starting from 0) in av_codec_tables*/
#define AV_CODEC_ID_MJPEG 0
#define AV_CODEC_ID_H264 1
#define AV_CODEC_ID_PCMU 2
#define AV_CODEC_ID_PCMA 3
#define AV_CODEC_ID_MP4A_LATM 4
#define AV_CODEC_ID_MP4V_ES 5
#define AV_CODEC_ID_PCM_RAW 6
#define AV_CODEC_ID_UNKNOWN -1
/*rtp payload type mapping and standard rtp payload type table -- range from 0-255 in 1 BYTE*/
#define RTP_PT_PCMU 0
#define RTP_PT_GSM 3
#define RTP_PT_G723 4
#define RTP_PT_DVI4_R8000 5
#define RTP_PT_DVI4_R16000 6
#define RTP_PT_LPC 7
#define RTP_PT_PCMA 8
#define RTP_PT_G722 9
#define RTP_PT_L16_C2 10
#define RTP_PT_L16_C1 11
#define RTP_PT_QCELP 12
#define RTP_PT_CN 13
#define RTP_PT_MPA 14
#define RTP_PT_G728 15
#define RTP_PT_DVI4_R11025 16
#define RTP_PT_DVI4_R22050 17
#define RTP_PT_G719 18
#define RTP_PT_CELB 25
#define RTP_PT_JPEG 26
#define RTP_PT_NV 28
#define RTP_PT_H261 31
#define RTP_PT_MPV 32
#define RTP_PT_MP2T 33
#define RTP_PT_H263 34
#define RTP_PT_RTCP_BASE 72
#define RTP_PT_DYN_BASE 96
#define RTP_PT_UNKNOWN 255
/* AAC PROFILE */
#define AV_PROFILE_AAC_MAIN 0
#define AV_PROFILE_AAC_LOW 1
#define AV_PROFILE_AAC_SSR 2
#define AV_PROFILE_AAC_LTP 3
#define AV_PROFILE_AAC_HE 4
#define AV_PROFILE_AAC_HE_V2 28
#define AV_PROFILE_AAC_LD 22
#define AV_PROFILE_AAC_ELD 38
#define AV_PROFILE_MPEG2_AAC_LOW 128
#define AV_PROFILE_MPEG2_AAC_HE 131
#if 0
/* MPEG4 VIDEO PROFILE */
#define AV_PROFILE_MPEG4_SIMPLE 0
#define AV_PROFILE_MPEG4_SIMPLE_SCALABLE 1
#define AV_PROFILE_MPEG4_CORE 2
#define AV_PROFILE_MPEG4_MAIN 3
#define AV_PROFILE_MPEG4_N_BIT 4
#define AV_PROFILE_MPEG4_SCALABLE_TEXTURE 5
#define AV_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION 6
#define AV_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE 7
#define AV_PROFILE_MPEG4_HYBRID 8
#define AV_PROFILE_MPEG4_ADVANCED_REAL_TIME 9
#define AV_PROFILE_MPEG4_CORE_SCALABLE 10
#define AV_PROFILE_MPEG4_ADVANCED_CODING 11
#define AV_PROFILE_MPEG4_ADVANCED_CORE 12
#define AV_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13
#define AV_PROFILE_MPEG4_SIMPLE_STUDIO 14
#define AV_PROFILE_MPEG4_ADVANCED_SIMPLE 15
/* DTS */
#define AV_PROFILE_DTS 20
#define AV_PROFILE_DTS_ES 30
#define AV_PROFILE_DTS_96_24 40
#define AV_PROFILE_DTS_HD_HRA 50
#define AV_PROFILE_DTS_HD_MA 60
#define AV_PROFILE_DTS_EXPRESS 70
/* MPEG2 */
#define AV_PROFILE_MPEG2_422 0
#define AV_PROFILE_MPEG2_HIGH 1
#define AV_PROFILE_MPEG2_SS 2
#define AV_PROFILE_MPEG2_SNR_SCALABLE 3
#define AV_PROFILE_MPEG2_MAIN 4
#define AV_PROFILE_MPEG2_SIMPLE 5
/* H264 */
#define AV_PROFILE_H264_CONSTRAINED (1<<9) // 8+1; constraint_set1_flag
#define AV_PROFILE_H264_INTRA (1<<11) // 8+3; constraint_set3_flag
#define AV_PROFILE_H264_BASELINE 66
#define AV_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED)
#define AV_PROFILE_H264_MAIN 77
#define AV_PROFILE_H264_EXTENDED 88
#define AV_PROFILE_H264_HIGH 100
#define AV_PROFILE_H264_HIGH_10 110
#define AV_PROFILE_H264_HIGH_10_INTRA (110|FF_PROFILE_H264_INTRA)
#define AV_PROFILE_H264_HIGH_422 122
#define AV_PROFILE_H264_HIGH_422_INTRA (122|FF_PROFILE_H264_INTRA)
#define AV_PROFILE_H264_HIGH_444 144
#define AV_PROFILE_H264_HIGH_444_PREDICTIVE 244
#define AV_PROFILE_H264_HIGH_444_INTRA (244|FF_PROFILE_H264_INTRA)
#define AV_PROFILE_H264_CAVLC_444 44
#endif
/*av codec tables*/
//#include "section_config.h"
//SDRAM_DATA_SECTION
static const struct codec_info av_codec_tables[] = {
{AV_CODEC_ID_MJPEG, "MJPEG", RTP_PT_JPEG, 90000, 0, 0},
{AV_CODEC_ID_H264, "H264", RTP_PT_DYN_BASE, 90000, 0, 0},
{AV_CODEC_ID_PCMU, "PCMU", RTP_PT_PCMU, 8000, 1, 0},
{AV_CODEC_ID_PCMA, "PCMA", RTP_PT_PCMA, 8000, 1, 0},
{AV_CODEC_ID_MP4A_LATM, "MP4A", RTP_PT_DYN_BASE, 8000, 2, 0},
{AV_CODEC_ID_MP4V_ES, "MP4V", RTP_PT_DYN_BASE, 90000, 0, 0},
};
#define AVCODEC_SIZE 6
void get_codec_by_id(struct codec_info *c, int id);
#endif //_AV_CODEC_H_

View file

@ -0,0 +1,27 @@
#ifndef _G711_H
#define _G711_H
#include "dlist.h" //list management
#include "basic_types.h"
#include "osdep_service.h"
//#include "osdep_api.h"
#define G711_DEBUG 1
#if G711_DEBUG
#define G711_PRINTF(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args)
#define G711_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args)
#else
#define G711_PRINTF(fmt, args...)
#define G711_ERROR(fmt, args...)
#endif
//struct rtp_g711_obj {
//};
/*for debug purpose*/
#endif /*_G711_H*/

View file

@ -0,0 +1,26 @@
#ifndef _G711_SIP_H
#define _G711_SIP_H
#include "dlist.h" //list management
#include "basic_types.h"
#include "osdep_service.h"
//#include "osdep_api.h"
#define G711_DEBUG 0
#if G711_DEBUG
#define G711_PRINTF(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args)
#define G711_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args)
#else
#define G711_PRINTF(fmt, args...)
#define G711_ERROR(fmt, args...)
#endif
//struct rtp_g711_obj {
//};
/*for debug purpose*/
#endif /*_G711_SIP_H*/

View file

@ -0,0 +1,75 @@
#ifndef _H264_H
#define _H264_H
#include "dlist.h" //list management
#include "basic_types.h"
#include "osdep_service.h"
//#include "osdep_api.h"
#define H264_DEBUG 0
#if H264_DEBUG
#define H264_PRINTF(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args)
#define H264_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args)
#else
#define H264_PRINTF(fmt, args...)
#define H264_ERROR(fmt, args...)
#endif
#define MAX_NUM_NAL_PER_FRM 4
struct rtp_nal_obj
{
u8 start_code_len;
unsigned char nal_header;
u8 is_fu_start;
u8 is_fu_end;
u8 must_not_drop;
u8 do_not_send;
int offset;
};
struct rtp_h264_obj
{
int num_nal;
struct rtp_nal_obj nal_obj[MAX_NUM_NAL_PER_FRM];
};
#endif /*_H264_H*/
#if 0
#ifndef _H264_H
#define _H264_H
#include "dlist.h" //list management
#include "basic_types.h"
#include "osdep_service.h"
//#include "osdep_api.h"
#define H264_DEBUG 0
#if H264_DEBUG
#define H264_PRINTF(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args)
#define H264_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args)
#else
#define H264_PRINTF(fmt, args...)
#define H264_ERROR(fmt, args...)
#endif
/* in favor of rtp fragmentation */
struct rtp_h264_obj
{
u8 start_code_len;
unsigned char nal_header;
u8 is_fu_start;
u8 is_fu_end;
u8 must_not_drop;
};
/********************************h264 over rtp******************************/
#endif /*_H264_H*/
#endif

View file

@ -0,0 +1,38 @@
#ifndef _H264_SIP_H
#define _H264_SIP_H
#include "dlist.h" //list management
#include "basic_types.h"
#include "osdep_service.h"
//#include "osdep_api.h"
#define H264_SIP_DEBUG 0
#if H264_SIP_DEBUG
#define H264_PRINTF(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args)
#define H264_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args)
#else
#define H264_PRINTF(fmt, args...)
#define H264_ERROR(fmt, args...)
#endif
#define MAX_NUM_NAL_PER_FRM 4
struct rtp_nal_obj
{
u8 start_code_len;
unsigned char nal_header;
u8 is_fu_start;
u8 is_fu_end;
u8 must_not_drop;
u8 do_not_send;
int offset;
};
struct rtp_h264_obj
{
int num_nal;
struct rtp_nal_obj nal_obj[MAX_NUM_NAL_PER_FRM];
};
#endif /*_H264_H*/

View file

@ -0,0 +1,61 @@
#ifndef _MJPEG_H_
#define _MJPEG_H_
#include "dlist.h" //list management
#include "basic_types.h"
#include "osdep_service.h"
//#include "osdep_api.h"
#define MJPEG_DEBUG 0
#if MJPEG_DEBUG
#define MJPEG_PRINTF(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args)
#define MJPEG_ERROR(fmt, args...) printf("\n\r%s: " fmt, __FUNCTION__, ## args)
#else
#define MJPEG_PRINTF(fmt, args...)
#define MJPEG_ERROR(fmt, args...)
#endif
struct jpeghdr {
unsigned int tspec:8; /* type-specific field */
unsigned int off:24; /* fragment byte offset */
u8 type; /* id of jpeg decoder params */
u8 q; /* quantization factor (or table id) */
u8 width; /* frame width in 8 pixel blocks */
u8 height; /* frame height in 8 pixel blocks */
};
struct jpeghdr_rst {
u16 dri; /*restart interval*/
unsigned int f:1; /*restart first bit flag*/
unsigned int l:1; /*restart last bit flag*/
unsigned int count:14; /*restart count*/
};
struct jpeghdr_qtable {
u8 mbz;
u8 precision;
u16 length;
};
#define RTP_JPEG_RESTART 0x40
#define USE_EXPLICIT_DQT 255
#define USE_IMPLICIT_DQT 0
struct rtp_jpeg_obj
{
struct jpeghdr jpghdr;
struct jpeghdr_rst rsthdr;
struct jpeghdr_qtable qtable;
u8 lqt[64*2]; /* Luma Quantizer table */
u8 cqt[64*2]; /* Croma Quantizer table */
int hdr_len;
int frame_offset;
};
/*for debug purpose*/
void dumpJpegHeader(struct jpeghdr *jpghdr);
void dumpRstDeader(struct jpeghdr_rst *rsthdr);
#endif /*_MJPEG_H_*/

View file

@ -0,0 +1,21 @@
#ifndef MJPEG_2_JPEG_H
#define MJPEG_2_JPEG_H
#if 0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#endif
#include "osdep_api.h"
#include "basic_types.h"
typedef struct AVFrames
{
char *FrameData;
int FrameLength;
}AVFrame;
int mjpeg2jfif(AVFrame *in_frame);
#endif

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff