Files
TAIXIN/sdk/app/babyprotocol/babyprotocol_record.c

108 lines
3.3 KiB
C
Raw Normal View History

#include "basic_include.h"
#include "stream_define.h"
#include "lib/multimedia/msi.h"
#include "video_app_h264_msi.h"
#include "audio_media_ctrl/audio_code_ctrl.h"
#include "audio_msi/audio_adc.h"
#include "intercom/intercom.h"
#include "babyprotocol_record.h"
#include "app/video_app/file_thumb.h"
#include "recorder/file_process.h"
#include "fs/fatfs/osal_file.h"
#include "app/loop_record_moudle/loop_record_moudle.h"
#include "app/video_app/file_common_api.h"
#ifdef SYS_APP_BBM_CAM
struct msi *mp4_encode_msi2_init(const char *mp4_msi_name, uint8_t srcID, uint8_t filter_type, uint8_t rec_time,
uint32_t audio_encode, struct file_process *file_process, uint8_t mode);
static struct msi *rec_msi = NULL;
static struct msi *h264_msi = NULL;
static struct msi *aac_msi = NULL;
int32_t client_local_record_init(uint32_t record_time_minutes)
{
AUENC_INIT auenc_init;
if(!rec_msi) {
h264_msi = msi_find(AUTO_H264, 1);
if(h264_msi) {
msi_put(h264_msi);
auenc_init.destroy_self = 0;
auenc_init.src_msi = get_auadc_msi(AUSYS_AUAD);
aac_msi = audio_encode_init(AAC_ENC, audio_adc_get_samplerate(AUSYS_AUAD), &auenc_init);
if(!aac_msi) {
h264_msi = NULL;
return RET_ERR;
}
struct file_process mp4_file_process = {
.loop = NULL,
.rec_path = REC_PATH,
.ext_name = MP4_EXTENSION_NAME,
.create_file = rec_create_file,
.loop_free = rec_loop_free,
.lock_file = NULL,
};
rec_msi = mp4_encode_msi2_init("bbm_record_mp4", FRAMEBUFF_SOURCE_CAMERA0, FSTYPE_H264_VPP_DATA0,
record_time_minutes, AAC_ENC, &mp4_file_process, 0);
if(rec_msi) {
msi_add_output(h264_msi, NULL, "bbm_record_mp4");
audio_code_add_output(aac_msi, "bbm_record_mp4");
msi_do_cmd(rec_msi, MSI_CMD_MEDIA_CTRL, MSI_MEDIA_CTRL_RECORD_START, 0);
return RET_OK;
}
else {
h264_msi = NULL;
audio_encode_deinit(aac_msi);
aac_msi = NULL;
return RET_ERR;
}
}
else {
return RET_ERR;
}
}
return RET_OK;
}
int32_t client_local_record_deinit(void)
{
if(rec_msi) {
if(h264_msi) {
msi_del_output(h264_msi, NULL, "bbm_record_mp4");
}
if(aac_msi) {
audio_code_del_output(aac_msi, "bbm_record_mp4");
audio_encode_deinit(aac_msi);
}
msi_destroy(rec_msi);
rec_msi = NULL;
h264_msi = NULL;
aac_msi = NULL;
}
return RET_OK;
}
static uint32_t mp4_record = 0;
static void mp4_record_thread(void *d)
{
uint32_t state = *((uint32_t*)d);
if(state == 1) {
client_local_record_init(1);
}
else if(state == 0) {
client_local_record_deinit();
}
}
int32 atcmd_bbm_client_record(const char *cmd, char *argv[], uint32 argc)
{
if(argc >= 1) {
mp4_record = os_atoi(argv[0]);
os_task_create("mp4_record_thread", mp4_record_thread, &mp4_record, OS_TASK_PRIORITY_NORMAL, 0, NULL, 1024);
}
return 0;
}
#endif