日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

关于LINUX系统编程架构问题——4412 camera V4L2 RTMP流工程源码分析

發布時間:2023/12/20 linux 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于LINUX系统编程架构问题——4412 camera V4L2 RTMP流工程源码分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在程序猿界混跡了多年,一直有個苦惱的問題,不管是什么樣子的編程,最早的匯編,后來C語言,又接觸了JAVA,始終有個念頭就是整體程序架構問題,不管是你自己用不用操作系統,都要有一套很出色的編程模板。當然自己能搞出來的絕對是要花費大把時間,然而對于工作而言時間確實是非常奢侈的東西。那么,另一種方法就出現了,“抄襲”,但抄襲也是要自己有兩把刷子的,而且要有廣闊的眼界,有了眼界你才能找到多種多樣的模式,模板。廢話少說,先上個LINUX下編程的系統模板,這個是來自TI的ipnc中的對Linux下的系統編程。也當自己的記錄筆記。本代碼來源TI-IPNC DM365 APOLLO方案的源碼。

應用方法:

int AVSERVER_tskMain(struct OSA_TskHndl *pTsk, OSA_MsgHndl *pMsg, Uint32 curState )
{
? int status;
? Uint16 cmd = OSA_msgGetCmd(pMsg);


? #ifdef AVSERVER_DEBUG_MAIN_THR
? OSA_printf(" AVSERVER MAIN: Recevied CMD = 0x%04x, state = 0x%04x\n", cmd, curState);
? #endif


? switch(cmd) {


? ? case AVSERVER_MAIN_CMD_START:


? ? ? if(curState==AVSERVER_MAIN_STATE_IDLE) {


? ? ? ? status = AVSERVER_tskStart(pTsk, pMsg);


? ? ? ? if(status!=OSA_SOK)
? ? ? ? ? AVSERVER_tskStop(pTsk, pMsg);
? ? ? }


? ? ? OSA_tskAckOrFreeMsg(pMsg, OSA_SOK);
? ? ? break;


? ? case AVSERVER_MAIN_CMD_STOP:


? ? ? if(curState==AVSERVER_MAIN_STATE_RUNNING) {


? ? ? ? AVSERVER_tskStop(pTsk, pMsg);
? ? ? }


? ? ? OSA_tskAckOrFreeMsg(pMsg, OSA_SOK);
? ? ? break;
? }




? return OSA_SOK;
}


int AVSERVER_mainCreate()
{
? int status;


? status = OSA_mbxCreate(&gAVSERVER_ctrl.uiMbx);
? if(status!=OSA_SOK) {
? ? OSA_ERROR("OSA_mbxCreate()\n");
? ? return status;
? }


? status = OSA_tskCreate( &gAVSERVER_ctrl.mainTsk, AVSERVER_tskMain, AVSERVER_MAIN_THR_PRI, AVSERVER_MAIN_STACK_SIZE, AVSERVER_MAIN_STATE_IDLE);
? if(status!=OSA_SOK) {
? ? OSA_ERROR("OSA_tskCreate()\n");
? ? return status;
? }


? return status;
}


int AVSERVER_mainDelete()
{
? int status;


? status = OSA_tskDelete(&gAVSERVER_ctrl.mainTsk);
? status |= OSA_mbxDelete(&gAVSERVER_ctrl.uiMbx);


? if(status!=OSA_SOK)
? ? OSA_ERROR("\n");


? return status;

}

?

啟動:??

status |= OSA_tskSendMsg(&gVIDEO_ctrl.swosdTsk, pTsk, AVSERVER_CMD_DELETE, NULL, OSA_MBX_WAIT_ACK);

持續更新中。。。。

?

一個線程的生命周期,招式


/*
?* gioInputMainThr.cpp
?*
?*? Created on: Jun 30, 2019
?*????? Author: CaRn
?*/

extern "C"{

#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdlib.h>
#include <unistd.h>

}

#include "../main_app/gioInputMainThr.h"

#include "../main_app/appServer.h"
#include "interface/Def.h"

//#define ELEGIO_DEVPAT?? ??? ??? ??? ??? ??? ??? ??? ??? ?"/dev/gioCtl_device"
//
//int mEleGioFd;

int gioInputTskCreate(){//任務創建,操作流程,運氣
?? ?int status = OSA_SOK;

//?? ?mEleGioFd = open(ELEGIO_DEVPAT, O_RDWR);
//?? ?if(mEleGioFd < 0){
//?? ??? ?OSA_ERROR(">>>>FLOOR: Open ELEGIO_DEVPAT device: %s failed\n", ELEGIO_DEVPAT);
//?? ??? ?return OSA_EFAIL;
//?? ?}

?? ?return status;
}

int gioInputTskStart(){//任務初始化,可以初始化首次運行參數 ,起手式
?? ?int status = OSA_SOK;

?? ?return status;
}

int gioInputTskRun(){//任務實際運行主體,數據處理主體, 出手式
?? ?int status = OSA_SOK;

?? ?return status;
}

int gioInputTskDelete(){//退出線程任務做的收尾工作, 收手式
?? ?int status = OSA_SOK;

//?? ?if(mEleGioFd > 0){
//?? ??? ?close(mEleGioFd);
//?? ?}

?? ?return status;
}

int gioInputTskMain(struct OSA_TskHndl *pTsk, OSA_MsgHndl *pMsg, Uint32 curState){//主線程運行
?? ?int status;

?? ?Bool done= FALSE, ackMsg = FALSE;
?? ?Uint16 cmd = OSA_msgGetCmd(pMsg);

#ifdef APPSERVER_DEBUG_GIOINPUTMAIN_THR
?? ?OSA_printf(" GIOINPUT: START Recevied CMD = 0x%04x\n", cmd);
#endif

?? ?if(cmd!=APPSERVER_CMD_CREATE) {
?? ??? ?OSA_tskAckOrFreeMsg(pMsg, OSA_SOK);
?? ??? ?return OSA_SOK;
?? ?}

#ifdef APPSERVER_DEBUG_GIOINPUTMAIN_THR
?? ?OSA_printf(" GIOINPUT: Create...\n");
#endif

?? ?status = gioInputTskCreate();

?? ?OSA_tskAckOrFreeMsg(pMsg, status);

?? ?if(status !=OSA_SOK) {
?? ??? ?OSA_ERROR(">>>>gioInputTskCreate()");
?? ??? ?return OSA_SOK;
?? ?}

#ifdef APPSERVER_DEBUG_GIOINPUTMAIN_THR
?? ?OSA_printf(" GIOINPUT: Create...DONE\n");
#endif

?? ?status = OSA_tskWaitMsg(pTsk, &pMsg);
?? ?if(status!=OSA_SOK)
?? ??? ?return OSA_SOK;

?? ?cmd = OSA_msgGetCmd(pMsg);

?? ?if(cmd==APPSERVER_CMD_DELETE) {

?? ??? ?done = TRUE;
?? ??? ?ackMsg = TRUE;

?? ?} else {

#ifdef APPSERVER_DEBUG_GIOINPUTMAIN_THR
?? ??? ?OSA_printf(" GIOINPUT: Start...\n");
#endif

?? ??? ?gioInputTskStart();

?? ??? ?OSA_tskAckOrFreeMsg(pMsg, OSA_SOK);

#ifdef APPSERVER_DEBUG_GIOINPUTMAIN_THR
?? ??? ?OSA_printf(" GIOINPUT: Start...DONE\n");
#endif
?? ?}

?? ?while(!done) {

?? ??? ?gioInputTskRun();
#ifdef APPSERVER_DEBUG_GIOINPUTMAIN_THR
//?? ???? OSA_printf("?? ?GIOINPUT: gioInputTskRun\n");
#endif
?? ??? ?OSA_waitMsecs(2000);

?? ???? status = OSA_tskCheckMsg(pTsk, &pMsg);

?? ???? if(status !=OSA_SOK)
?? ?????? continue;

?? ???? cmd = OSA_msgGetCmd(pMsg);

#ifdef APPSERVER_DEBUG_GIOINPUTMAIN_THR
?? ???? OSA_printf("?? ?GIOINPUT: Recevied CMD = 0x%04x\n", cmd);
#endif

?? ???? switch(cmd) {
?? ???? case APPSERVER_CMD_DELETE:
?? ??? ??? ?done = TRUE;
?? ??? ??? ?ackMsg = TRUE;
?? ??? ??? ?break;

?? ??? ?default:
?? ??? ??? ?OSA_tskAckOrFreeMsg(pMsg, OSA_SOK);
?? ??? ??? ?break;
?? ???? }
?? ?? }

#ifdef APPSERVER_DEBUG_GIOINPUTMAIN_THR
?? ?OSA_printf("GIOINPUT: Delete...\n");
#endif

?? ?gioInputTskDelete();

?? ?if(ackMsg)
?? ??? ?OSA_tskAckOrFreeMsg(pMsg, OSA_SOK);

#ifdef APPSERVER_DEBUG_GIOINPUTMAIN_THR
?? ?OSA_printf("GIOINPUT: Delete...DONE\n");
#endif

?? ?return OSA_SOK;
}

int DEV_gioInputCreate(){//線程創建
?? ?int status;

?? ?status = OSA_tskCreate( &gCAPTURE_Ctl.gioInputTsk, gioInputTskMain, GIOINPUTMAIN_THR_PRI, GIOINPUTMAIN_STACK_SIZE, 0);
?? ?if(status!=OSA_SOK) {
?? ??? ?OSA_ERROR(">>>>DEV_gioInputCreate()\n");
?? ??? ?return status;
?? ?}

?? ?return status;
}

int DEV_gioInputDelete(){//線程刪除退出
?? ?int status;

?? ?status = OSA_tskDelete( &gCAPTURE_Ctl.gioInputTsk );
?? ?if(status!=OSA_SOK) {
?? ??? ?OSA_ERROR(">>>>DEV_gioInputDelete()\n");
?? ?}

?? ?return status;
}

關聯4412_V4L2cam_RTMP_工程源碼

?

總結

以上是生活随笔為你收集整理的关于LINUX系统编程架构问题——4412 camera V4L2 RTMP流工程源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。