pure sdk for main
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
/***************************************************
|
||||
该demo主要是录制AVI使用
|
||||
***************************************************/
|
||||
#include "osal/string.h"
|
||||
#include "custom_mem/custom_mem.h"
|
||||
#include "stream_frame.h"
|
||||
#include "osal/task.h"
|
||||
#include "osal_file.h"
|
||||
#include "video_app/video_app.h"
|
||||
struct AT_AVI
|
||||
{
|
||||
struct os_task task;
|
||||
uint32_t fps;
|
||||
uint32_t frq;
|
||||
int running;
|
||||
uint8_t record_num;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
extern void at_save_avi_thread(void *d);
|
||||
static struct AT_AVI *avi_s = NULL;
|
||||
int32 demo_atcmd_save_avi(const char *cmd, char *argv[], uint32 argc)
|
||||
{
|
||||
#if OPENDML_EN && SDH_EN && FS_EN
|
||||
if(argc < 3)
|
||||
{
|
||||
os_printf("%s argc too small:%d,should more 2 arg\n",__FUNCTION__,argc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(os_atoi(argv[0]) == 0)
|
||||
{
|
||||
os_printf("avi_s:%X\n",avi_s);
|
||||
if(avi_s)
|
||||
{
|
||||
avi_s->running = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
os_printf("%s not running\n",__FUNCTION__);
|
||||
}
|
||||
}
|
||||
else if(os_atoi(argv[0]) == 1)
|
||||
{
|
||||
avi_s = custom_malloc(sizeof(struct AT_AVI));
|
||||
if(avi_s)
|
||||
{
|
||||
os_memset(avi_s,0,sizeof(struct AT_AVI));
|
||||
avi_s->fps = os_atoi(argv[1]);
|
||||
avi_s->frq = os_atoi(argv[2]);
|
||||
if(argc > 3)
|
||||
{
|
||||
avi_s->record_num = os_atoi(argv[3]);
|
||||
}
|
||||
|
||||
if(avi_s->record_num == 0)
|
||||
{
|
||||
avi_s->record_num = 1;
|
||||
}
|
||||
os_printf("fps:%d\tfrq:%d\n",avi_s->fps,avi_s->frq);
|
||||
OS_TASK_INIT("at_avi", &avi_s->task, at_save_avi_thread, (uint32)avi_s, OS_TASK_PRIORITY_NORMAL, 1024);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
static int opcode_func(stream *s,void *priv,int opcode)
|
||||
{
|
||||
int res = 0;
|
||||
//_os_printf("%s:%d\topcode:%d\n",__FUNCTION__,__LINE__,opcode);
|
||||
switch(opcode)
|
||||
{
|
||||
case STREAM_OPEN_ENTER:
|
||||
break;
|
||||
case STREAM_OPEN_EXIT:
|
||||
{
|
||||
enable_stream(s,1);
|
||||
}
|
||||
break;
|
||||
case STREAM_OPEN_FAIL:
|
||||
break;
|
||||
default:
|
||||
//默认都返回成功
|
||||
break;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
extern int new_sd_save_avi2(int *exit_flag,stream *s,stream *audio_s,int fps,int audiofrq,int settime,int pic_w,int pic_h);
|
||||
void at_save_avi_thread(void *d)
|
||||
{
|
||||
struct AT_AVI *func_avi_s = (struct AT_AVI *)d;
|
||||
stream *video_s = NULL;
|
||||
stream *audio_s = NULL;
|
||||
video_s = open_stream_available(R_AT_AVI_JPEG,0,8,opcode_func,NULL);
|
||||
if(!video_s)
|
||||
{
|
||||
goto at_save_avi_thread_end;
|
||||
}
|
||||
|
||||
if(func_avi_s->frq)
|
||||
{
|
||||
audio_s = open_stream(R_AT_AVI_AUDIO,0,8,opcode_func,NULL);
|
||||
}
|
||||
|
||||
jpeg_stream_init();
|
||||
|
||||
func_avi_s->running = 1;
|
||||
os_printf("video_s:%X\taudio_s:%X\n",video_s,audio_s);
|
||||
while(func_avi_s->running && func_avi_s->record_num)
|
||||
{
|
||||
if(video_s)
|
||||
{
|
||||
enable_stream(video_s,1);
|
||||
}
|
||||
|
||||
if(audio_s)
|
||||
{
|
||||
enable_stream(audio_s,1);
|
||||
}
|
||||
new_sd_save_avi2(&func_avi_s->running,video_s,audio_s,func_avi_s->fps,func_avi_s->frq,60*1,640,480);
|
||||
func_avi_s->record_num--;
|
||||
}
|
||||
|
||||
|
||||
at_save_avi_thread_end:
|
||||
|
||||
if(video_s)
|
||||
{
|
||||
jpeg_stream_deinit();
|
||||
close_stream(video_s);
|
||||
}
|
||||
|
||||
if(audio_s)
|
||||
{
|
||||
close_stream(audio_s);
|
||||
}
|
||||
func_avi_s->running = 0;
|
||||
custom_free((void*)func_avi_s);
|
||||
avi_s = NULL;
|
||||
os_printf("%s end\n",__FUNCTION__,__LINE__);
|
||||
}
|
||||
Reference in New Issue
Block a user