initial commit
This commit is contained in:
95
hal/hal_video/hal_interface_video.c
Executable file
95
hal/hal_video/hal_interface_video.c
Executable file
@@ -0,0 +1,95 @@
|
||||
#include <stdlib.h>
|
||||
#include "hal_interface_video.h"
|
||||
#include "list.h"
|
||||
#include "hthread.h"
|
||||
#include "hlog.h"
|
||||
|
||||
typedef struct{
|
||||
struct list_head link;
|
||||
video_attr_st attr;
|
||||
hal_video_frame_callback cb;
|
||||
}video_ins;
|
||||
|
||||
static struct list_head s_vlist = LIST_HEAD_INIT(s_vlist);
|
||||
|
||||
static void * hal_video_polling_task(void *arg)
|
||||
{
|
||||
uint32_t ret;
|
||||
uint32_t get;
|
||||
while(1){
|
||||
video_frame frame;
|
||||
get = 0;
|
||||
struct list_head *pos, *n;
|
||||
list_for_each_safe(pos, n, &s_vlist){
|
||||
video_ins *video = list_entry(pos, video_ins, link);
|
||||
ret = hal_video_get_frame(video->attr.stream_chn, &frame, 5);
|
||||
if (ret == OK){
|
||||
video->cb(&frame);
|
||||
get = 1;
|
||||
}
|
||||
}
|
||||
if (!get){
|
||||
hloge("%s failed to hal_video_get_frame", __func__);
|
||||
hv_msleep(10);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
uint32_t hal_video_openstream(HAL_SENSOR_IDX sensor_idx, hal_video_frame_callback cb, HAL_STREAM_CHANNEL stream_chn, const video_attr_st attr){
|
||||
struct list_head *pos, *n;
|
||||
list_for_each_safe(pos, n, &s_vlist){
|
||||
video_ins* video = list_entry(pos, video_ins, link);
|
||||
if (video->cb == cb) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if (list_empty(&s_vlist)){ /* 第一次open 创建一个共用线程, 理论取流还是够, 避免用太多的线程了 */
|
||||
hthread_create(hal_video_polling_task, NULL);
|
||||
}
|
||||
video_ins *video = (video_ins*)hv_malloc(sizeof(video_ins));
|
||||
if (!video){
|
||||
hloge("%s failed to hv_malloc", __func__);
|
||||
return -1;
|
||||
}
|
||||
video->cb = cb;
|
||||
video->attr = attr;
|
||||
list_add_tail(&video->link, &s_vlist);
|
||||
{
|
||||
/* to bind sensor and chn */
|
||||
/* to start chn */
|
||||
/* to start encode */
|
||||
}
|
||||
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32_t hal_video_closestream(hal_video_frame_callback cb){
|
||||
struct list_head *pos, *n;
|
||||
list_for_each_safe(pos, n, &s_vlist){
|
||||
video_ins* video = list_entry(pos, video_ins, link);
|
||||
if (video->cb == cb) {
|
||||
//deinit chn
|
||||
list_del(pos);
|
||||
hv_free(video);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
uint32_t hal_video_set_attr(HAL_SENSOR_IDX idx, HAL_STREAM_CHANNEL stream_chn, const video_attr_st * attr){
|
||||
//video_attr_st *a = &s_hal_video_st[idx][stream_chn].attr;
|
||||
|
||||
/*
|
||||
uint32_t width; // resolution width, 0为不重复设置
|
||||
uint32_t height; // resolution height, 0为不重复设置
|
||||
uint32_t bitrate; // 码率: Kbit per second, 0为不重复设置
|
||||
uint32_t fps; // 编码帧率
|
||||
uint32_t gop;
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user