pure sdk for main
This commit is contained in:
@@ -0,0 +1,181 @@
|
||||
#include "stream_frame.h"
|
||||
#include "utlist.h"
|
||||
#include "osal/work.h"
|
||||
#include "jpgdef.h"
|
||||
#include "custom_mem/custom_mem.h"
|
||||
#include "lib/video/uvc/hg_usb_device.h"
|
||||
#include "osal/irq.h"
|
||||
|
||||
#include "osal_file.h"
|
||||
#include "media.h"
|
||||
|
||||
|
||||
//需要获取usb的句柄
|
||||
#include "list.h"
|
||||
#include "dev.h"
|
||||
#include "devid.h"
|
||||
|
||||
#include "dev/usb/hgusb20_v1_dev_api.h"
|
||||
#include "dev/usb/uvc_host.h"
|
||||
#if USB_EN == 1 && SD_SAVE == 1
|
||||
|
||||
extern void uvc_reset_dev(uint8_t en);
|
||||
extern void uvc_stream_open(struct hgusb20_dev *p_dev,uint8 enable);
|
||||
extern void usb_host_h264_uvc_reset();
|
||||
extern int no_frame_record_video_psram(void *fp,void *d,int flen);
|
||||
int32_t usb_to_card_work(struct os_work *work);
|
||||
static struct os_task uvc_h264_task;
|
||||
struct os_semaphore h264_sem;
|
||||
|
||||
#define H264_FNUM 3
|
||||
struct usb_to_card_s
|
||||
{
|
||||
struct os_work work;
|
||||
struct data_structure *get_f;
|
||||
struct data_structure *get_f_tmp;
|
||||
};
|
||||
|
||||
struct h264_msg_s
|
||||
{
|
||||
uint8* addr;
|
||||
uint32 len;
|
||||
uint32 num;
|
||||
};
|
||||
|
||||
struct h264_msg_s h264msg[H264_FNUM];
|
||||
uint8_t *pwsram;
|
||||
|
||||
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);
|
||||
|
||||
//hgusb20_host_reset_phy(dev);
|
||||
#if RTT_USB_EN
|
||||
|
||||
#else
|
||||
void *dev = (struct usb_device *)dev_get(HG_USBDEV_DEVID);
|
||||
uvc_reset_dev_mjpeg(1);
|
||||
usb_host_h264_uvc_reset();
|
||||
uvc_stream_open((struct hgusb20_dev *)dev,1);
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case STREAM_OPEN_FAIL:
|
||||
break;
|
||||
case STREAM_CLOSE_EXIT:
|
||||
{
|
||||
|
||||
#if RTT_USB_EN
|
||||
|
||||
#else
|
||||
void *dev = (struct usb_device *)dev_get(HG_USBDEV_DEVID);
|
||||
uvc_stream_open((struct hgusb20_dev *)dev,0);
|
||||
uvc_reset_dev_mjpeg(0);
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
default:
|
||||
//默认都返回成功
|
||||
break;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
//测试写h264,写大概300帧
|
||||
void stream_write_h264_thread2(void *d){
|
||||
void *fp;
|
||||
stream *s = (stream *)d;
|
||||
|
||||
struct data_structure *get_f = NULL;
|
||||
uint32 flen;
|
||||
uint32_t cnt = 0;;
|
||||
fp = create_video_file("0:/DCIM");
|
||||
uint32_t timeout = 0;
|
||||
while(fp)
|
||||
{
|
||||
get_f = recv_real_data(s);
|
||||
if(get_f)
|
||||
{
|
||||
|
||||
timeout = 0;
|
||||
flen = get_stream_real_data_len(get_f);
|
||||
#ifdef PSRAM_HEAP
|
||||
no_frame_record_video_psram(fp,get_f,flen);
|
||||
#endif
|
||||
free_data(get_f);
|
||||
cnt++;
|
||||
os_printf("w:%d",cnt);
|
||||
|
||||
get_f = NULL;
|
||||
if(cnt > 300)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
os_sleep_ms(1);
|
||||
timeout++;
|
||||
}
|
||||
if(timeout > 10000)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(fp)
|
||||
{
|
||||
osal_fclose(fp);
|
||||
}
|
||||
os_printf("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
close_stream(s);
|
||||
|
||||
}
|
||||
|
||||
|
||||
uint8_t enable_video_usb_to_tfcard(uint8_t enable)
|
||||
{
|
||||
if(enable)
|
||||
{
|
||||
stream *s = NULL;
|
||||
s = open_stream_available(R_RECORD_H264,0,8,opcode_func,NULL);
|
||||
if(!s)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
os_printf("%s:%d\n",__FUNCTION__,__LINE__);
|
||||
OS_TASK_INIT("h264_stream", &uvc_h264_task, stream_write_h264_thread2, s, OS_TASK_PRIORITY_ABOVE_NORMAL, 1024);
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
int32 demo_atcmd_save_h264(const char *cmd, char *argv[], uint32 argc)
|
||||
{
|
||||
#if USB_EN == 1 && SD_SAVE == 1
|
||||
if(argc < 1)
|
||||
{
|
||||
os_printf("%s argc too small:%d,should more 2 arg\n",__FUNCTION__,argc);
|
||||
return 0;
|
||||
}
|
||||
if(os_atoi(argv[0]) == 1)
|
||||
{
|
||||
enable_video_usb_to_tfcard(1);
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user