Skip to content

Commit

Permalink
1
Browse files Browse the repository at this point in the history
  • Loading branch information
feihengli committed Apr 3, 2018
1 parent 2a05cb2 commit 52dd2f3
Show file tree
Hide file tree
Showing 16 changed files with 3,569 additions and 82 deletions.
8 changes: 7 additions & 1 deletion Rules.make
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
#SENSOR_TYPE=OMNIVISION_OV4689_MIPI_4M_30FPS
#SENSOR_TYPE=SMARTSENS_SC2135_DC_1080P_30FPS
#SENSOR_TYPE=SONY_IMX226_LVDS_12M_30FPS
SENSOR_TYPE=SONY_IMX274_MIPI_8M_30FPS
#SENSOR_TYPE=SONY_IMX274_MIPI_8M_30FPS
SENSOR_TYPE=SONY_IMX327_MIPI_1080P_30FPS
export SENSOR_TYPE

HIARCH=hi3516av200
Expand Down Expand Up @@ -42,6 +43,11 @@ else ifeq ($(SENSOR_TYPE), SONY_IMX226_LVDS_12M_30FPS)
else ifeq ($(SENSOR_TYPE), SONY_IMX274_MIPI_8M_30FPS)
SENSOR_PATH := $(PLATFORM)/sensor/sony_imx274_mipi
SENSOR_LIB=$(PLATFORM)/sensor/sony_imx274_mipi/libsns_imx274.a
CFLAGS += -DSNS_IMX274_MIPI_SINGLE
else ifeq ($(SENSOR_TYPE), SONY_IMX327_MIPI_1080P_30FPS)
SENSOR_PATH := $(PLATFORM)/sensor/sony_imx327_mipi
SENSOR_LIB=$(PLATFORM)/sensor/sony_imx327_mipi/libsns_imx327.a
CFLAGS += -DSNS_IMX327_MIPI_SINGLE
endif

export SENSOR_PATH
Expand Down
27 changes: 12 additions & 15 deletions app/rtsp_server/rtsp_server.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ void init_signals(void)
signal(SIGPIPE, SIG_IGN);
}

int get_audio_frame_cb(char *frame, unsigned long len, double timestamp)
int get_audio_frame_cb(unsigned char *frame, unsigned long len, double timestamp)
{
if (gHndMainFramePool)
{
Expand All @@ -59,7 +59,7 @@ int get_audio_frame_cb(char *frame, unsigned long len, double timestamp)
return 0;
}

int get_video_frame_cb(int stream, char *frame, unsigned long len, int key, double pts, SAL_ENCODE_TYPE_E encode_type)
int get_video_frame_cb(int stream, unsigned char *frame, unsigned long len, int key, double pts, SAL_ENCODE_TYPE_E encode_type)
{
FRAME_TYPE_E type = FRAME_TYPE_INVALID;
if (encode_type == SAL_ENCODE_TYPE_H264)
Expand All @@ -83,7 +83,7 @@ int get_video_frame_cb(int stream, char *frame, unsigned long len, int key, doub
return 0;
}

int get_jpeg_frame_cb(char *frame, int len)
int get_jpeg_frame_cb(unsigned char *frame, int len)
{
return 0;
}
Expand Down Expand Up @@ -119,22 +119,22 @@ int main(int argc, char** argv)
memset(&video, 0, sizeof(video));
video.cb = get_video_frame_cb;
video.stream[0].enable = 1;
video.stream[0].width = 3840;
video.stream[0].height = 2160;
video.stream[0].framerate = 15;
video.stream[0].width = 1920; //3840;
video.stream[0].height = 1080; //2160;
video.stream[0].framerate = 30;
video.stream[0].bitrate = 2500;
video.stream[0].gop = 2 * video.stream[0].framerate;
video.stream[0].bitrate_ctl = SAL_BITRATE_CONTROL_CBR;
video.stream[0].encode_type = SAL_ENCODE_TYPE_H265;

video.stream[1].enable = 1;
video.stream[1].width = 640;
video.stream[1].height = 360;
video.stream[1].framerate = 15;
video.stream[1].height = 480;
video.stream[1].framerate = 30;
video.stream[1].bitrate = 500;
video.stream[1].gop = 2 * video.stream[1].framerate;
video.stream[1].bitrate_ctl = SAL_BITRATE_CONTROL_CBR;
video.stream[1].encode_type = SAL_ENCODE_TYPE_H265;
video.stream[1].encode_type = SAL_ENCODE_TYPE_H264;
ret = sal_sys_init(&video);
CHECK(ret == 0, -1, "Error with: %#x\n", ret);
DBG("sys video init done.\n");
Expand All @@ -154,17 +154,14 @@ int main(int argc, char** argv)
CHECK(ret == 0, -1, "Error with: %#x\n", ret);
DBG("sys audio init done.\n");


//ret = sal_dr_init();
//extern int sal_pc_init();
//ret = sal_pc_init();
//CHECK(ret == 0, -1, "Error with: %#x\n", ret);

/* ret = sal_osd_init();
CHECK(ret == 0, -1, "Error with: %#x\n", ret);*/


handle hndRtsps = rtsps_init(554);
CHECK(hndRtsps, -1, "Error with: %#x\n", hndRtsps);


while (!test_exit)
{
usleep(1);
Expand Down
10 changes: 8 additions & 2 deletions hi3516av200.make
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
#SENSOR_TYPE=OMNIVISION_OV4689_MIPI_4M_30FPS
#SENSOR_TYPE=SMARTSENS_SC2135_DC_1080P_30FPS
#SENSOR_TYPE=SONY_IMX226_LVDS_12M_30FPS
SENSOR_TYPE=SONY_IMX274_MIPI_8M_30FPS
#SENSOR_TYPE=SONY_IMX274_MIPI_8M_30FPS
SENSOR_TYPE=SONY_IMX327_MIPI_1080P_30FPS
export SENSOR_TYPE

HIARCH=hi3516av200
Expand Down Expand Up @@ -42,6 +43,11 @@ else ifeq ($(SENSOR_TYPE), SONY_IMX226_LVDS_12M_30FPS)
else ifeq ($(SENSOR_TYPE), SONY_IMX274_MIPI_8M_30FPS)
SENSOR_PATH := $(PLATFORM)/sensor/sony_imx274_mipi
SENSOR_LIB=$(PLATFORM)/sensor/sony_imx274_mipi/libsns_imx274.a
CFLAGS += -DSNS_IMX274_MIPI_SINGLE
else ifeq ($(SENSOR_TYPE), SONY_IMX327_MIPI_1080P_30FPS)
SENSOR_PATH := $(PLATFORM)/sensor/sony_imx327_mipi
SENSOR_LIB=$(PLATFORM)/sensor/sony_imx327_mipi/libsns_imx327.a
CFLAGS += -DSNS_IMX327_MIPI_SINGLE
endif

export SENSOR_PATH
Expand Down Expand Up @@ -69,7 +75,7 @@ LIBS+=$(PLATFORM)/common_lib/libturbojpeg.a
LIBS+=$(PLATFORM)/common_lib/libmp4v2.a
export LIBS

CFLAGS += -g -Wall -fPIC
CFLAGS += -g -Wall -fPIC -Os
CFLAGS += -mcpu=cortex-a17.cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -mno-unaligned-access -fno-aggressive-loop-optimizations
CFLAGS += -DSENSOR_TYPE=$(SENSOR_TYPE)
CFLAGS += -D$(HIARCH)
Expand Down
30 changes: 19 additions & 11 deletions sal_curl.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,9 @@ typedef struct curl_wrapper_s
}
curl_wrapper_s;

static size_t _Onrecv(void* buffer, size_t size, size_t nmemb, curl_wrapper_s* pstCurlWrapper)
static size_t _Onrecv(void* buffer, size_t size, size_t nmemb, const void* _pstCurlWrapper)
{
curl_wrapper_s* pstCurlWrapper = (curl_wrapper_s*)_pstCurlWrapper;
DBG("buffer=%p, size=%u, nmemb=%u, pstCurlWrapper=%p\n", buffer, size, nmemb, pstCurlWrapper);

int s32Ret;
Expand All @@ -75,8 +76,9 @@ static size_t _Onrecv(void* buffer, size_t size, size_t nmemb, curl_wrapper_s* p
return -1;
}

static size_t _OnRecv2mem(void* buffer, size_t size, size_t nmemb, curl_wrapper_s* pstCurlWrapper)
static size_t _OnRecv2mem(void* buffer, size_t size, size_t nmemb, const void* _pstCurlWrapper)
{
curl_wrapper_s* pstCurlWrapper = (curl_wrapper_s*)_pstCurlWrapper;
//DBG("buffer=%p, size=%u, nmemb=%u, pstCurlWrapper=%p\n", buffer, size, nmemb, pstCurlWrapper);

//int s32Ret = -1;
Expand Down Expand Up @@ -136,8 +138,9 @@ static size_t _OnRecv2mem(void* buffer, size_t size, size_t nmemb, curl_wrapper_
return -1;
}

static size_t _Onsend(void *buffer, size_t size, size_t nmemb, curl_wrapper_s* pstCurlWrapper)
static size_t _Onsend(void *buffer, size_t size, size_t nmemb, const void* _pstCurlWrapper)
{
curl_wrapper_s* pstCurlWrapper = (curl_wrapper_s*)_pstCurlWrapper;
//DBG("buffer=%p, size=%u, nmemb=%u, pstCurlWrapper=%p\n", buffer, size, nmemb, pstCurlWrapper);

int s32Ret;
Expand All @@ -158,8 +161,9 @@ static size_t _Onsend(void *buffer, size_t size, size_t nmemb, curl_wrapper_s* p
return -1;
}

static size_t _OnDlProgress(curl_wrapper_s* pstCurlWrapper, double dltotal, double dlnow, double ultotal, double ulnow)
static int _OnDlProgress(const void* _pstCurlWrapper, double dltotal, double dlnow, double ultotal, double ulnow)
{
curl_wrapper_s* pstCurlWrapper = (curl_wrapper_s*)_pstCurlWrapper;
//DBG("pstCurlWrapper=%p, dltotal=%d, dlnow=%d, ultotal=%d, ulnow=%d\n", pstCurlWrapper, (int)dltotal, (int)dlnow, (int)ultotal, (int)ulnow);

if(pstCurlWrapper->bRunning == 0 && dlnow != dltotal)
Expand Down Expand Up @@ -200,8 +204,9 @@ static size_t _OnDlProgress(curl_wrapper_s* pstCurlWrapper, double dltotal, doub
return tRet;
}

static size_t _OnUlProgress(curl_wrapper_s* pstCurlWrapper, double dltotal, double dlnow, double ultotal, double ulnow)
static int _OnUlProgress(const void* _pstCurlWrapper, double dltotal, double dlnow, double ultotal, double ulnow)
{
curl_wrapper_s* pstCurlWrapper = (curl_wrapper_s*)_pstCurlWrapper;
//DBG("pstCurlWrapper=%p, dltotal=%d, dlnow=%d, ultotal=%d, ulnow=%d\n", pstCurlWrapper, (int)dltotal, (int)dlnow, (int)ultotal, (int)ulnow);

//todo:why no using this func?
Expand Down Expand Up @@ -264,8 +269,9 @@ static void* _Proc(void* _pArgs)
return NULL;
}

static size_t _OnHttpPostHead(void* buffer, size_t size, size_t nmemb, curl_wrapper_s* pstCurlWrapper)
static size_t _OnHttpPostHead(void* buffer, size_t size, size_t nmemb, const void* _pstCurlWrapper)
{
curl_wrapper_s* pstCurlWrapper = (curl_wrapper_s*)_pstCurlWrapper;
//DBG("pstCurlWrapper=%p, size=%d, nmemb=%d, buffer=\"%s\"\n", pstCurlWrapper, size, nmemb, (char*)buffer);

ASSERT(pstCurlWrapper->u32PostRecvCurr < pstCurlWrapper->u32PostRecvTotal, "u32PostRecvTotal %u, u32PostRecvCurr %u\n", pstCurlWrapper->u32PostRecvTotal, pstCurlWrapper->u32PostRecvCurr);
Expand All @@ -281,10 +287,11 @@ static size_t _OnHttpPostHead(void* buffer, size_t size, size_t nmemb, curl_wrap
return s32NeedCopy;
}

static size_t _OnHttpPostRecv(void* buffer, size_t size, size_t nmemb, curl_wrapper_s* pstCurlWrapper)
static size_t _OnHttpPostRecv(const void* buffer, size_t size, size_t nmemb, const void* _pstCurlWrapper)
{
curl_wrapper_s* pstCurlWrapper = (curl_wrapper_s*)_pstCurlWrapper;
// DBG("pstCurlWrapper=%p, size=%d, nmemb=%d\n", pstCurlWrapper, size, nmemb);

ASSERT(pstCurlWrapper->u32PostRecvCurr < pstCurlWrapper->u32PostRecvTotal, "u32PostRecvTotal %u, u32PostRecvCurr %u\n", pstCurlWrapper->u32PostRecvTotal, pstCurlWrapper->u32PostRecvCurr);

size_t s32NeedCopy = size * nmemb;
Expand All @@ -298,12 +305,13 @@ static size_t _OnHttpPostRecv(void* buffer, size_t size, size_t nmemb, curl_wrap
return s32NeedCopy;
}

static size_t _OnHttpPostProgress(curl_wrapper_s* pstCurlWrapper, double dltotal, double dlnow, double ultotal, double ulnow)
static int _OnHttpPostProgress(const void* _pstCurlWrapper, double dltotal, double dlnow, double ultotal, double ulnow)
{
curl_wrapper_s* pstCurlWrapper = (curl_wrapper_s*)_pstCurlWrapper;
// DBG("pstCurlWrapper=%p, dltotal=%f, dlnow=%f, ultotal=%f, ulnow=%f\n", pstCurlWrapper, dltotal, dlnow, ultotal, ulnow);
// DBG("bRunning=%d\n", pstCurlWrapper->bRunning);


//todo:why no using this func?
if(pstCurlWrapper->bRunning == 0)
{
Expand Down Expand Up @@ -484,7 +492,7 @@ int curl_wrapper_StartHttpPost(handle _hndCurlWrapper, char* _szUrl, unsigned ch
curl_easy_setopt(pstCurlWrapper->pstCurl, CURLOPT_POST, 1L);
// curl_easy_setopt(pstCurlWrapper->pstCurl, CURLOPT_TIMEOUT, 5);
// curl_easy_setopt(pstCurlWrapper->pstCurl, CURLOPT_CONNECTTIMEOUT, 120);
curl_easy_setopt(pstCurlWrapper->pstCurl, CURLOPT_POSTFIELDS, pstCurlWrapper->pu8PostSend);
curl_easy_setopt(pstCurlWrapper->pstCurl, CURLOPT_POSTFIELDS, (void*)pstCurlWrapper->pu8PostSend);
curl_easy_setopt(pstCurlWrapper->pstCurl, CURLOPT_POSTFIELDSIZE, pstCurlWrapper->u32PostSendCurr);
curl_easy_setopt(pstCurlWrapper->pstCurl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)pstCurlWrapper->u32PostSendCurr);

Expand Down
11 changes: 7 additions & 4 deletions sal_frame_pool.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ int frame_pool_destroy(handle hndFramePool)
return 0;
}

int frame_pool_add(handle hndFramePool, char *frame, unsigned long len, FRAME_TYPE_E type, int key, double pts)
int frame_pool_add(handle hndFramePool, unsigned char *frame, unsigned long len, FRAME_TYPE_E type, int key, double pts)
{
CHECK(NULL != hndFramePool, -1, "invalid parameter with: %#x\n", hndFramePool);

Expand All @@ -87,7 +87,7 @@ int frame_pool_add(handle hndFramePool, char *frame, unsigned long len, FRAME_TY
ret = pthread_mutex_lock(&pstFramePool->mutex);
CHECK(ret == 0 , -1, "error with %s\n", strerror(errno));

if (list_size(pstFramePool->hndlist) >= pstFramePool->capacity)
while (list_size(pstFramePool->hndlist) >= pstFramePool->capacity)
{
frame_info_s* frame_info = list_front(pstFramePool->hndlist);
if (frame_info->reference <= 0) //
Expand All @@ -96,6 +96,10 @@ int frame_pool_add(handle hndFramePool, char *frame, unsigned long len, FRAME_TY
ret = list_pop_front(pstFramePool->hndlist);
CHECK(ret == 0, -1, "error with %#x\n", ret);
}
else
{
break;
}
}

frame_info_s frame_info_new;
Expand Down Expand Up @@ -321,8 +325,7 @@ int frame_pool_unregister(handle hndReader)
}

/*
*可能存在frame_pool_register成功后过了很久才frame_pool_get,导致pstLastFrame已经被删除了
*的风险,list_next会返回NULL,所以frame_pool_get一直会返回NULL
*可能存在frame_pool_register成功后过了很久才frame_pool_get,导致pstLastFrame已经被删除了的风险,list_next会返回NULL
*frame_pool_get取的速度比add的速度快是会返回NULL的
*/
frame_info_s* frame_pool_get(handle hndReader)
Expand Down
2 changes: 1 addition & 1 deletion sal_frame_pool.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ int frame_pool_destroy(handle hndFramePool);
输出参数: 无
返 回 值: 成功返回0,失败返回小于0
*/
int frame_pool_add(handle hndFramePool, char *frame, unsigned long len, FRAME_TYPE_E type, int key, double pts);
int frame_pool_add(handle hndFramePool, unsigned char *frame, unsigned long len, FRAME_TYPE_E type, int key, double pts);

/*
函 数 名: frame_pool_register
Expand Down
Loading

0 comments on commit 52dd2f3

Please sign in to comment.