dm8148 vpssM3 cameralink 原始碼解析
cameralink 原始碼解析:
CameraLink_tskRun 函式中的SYSTEM_CMD_NEW_DATA你是從ISS驅動中傳送的嗎?通知camera link獲取資料;
答覆:ISS驅動中呼叫CameraLink_drvCallback回撥函式,在該回撥函式中通過Utils_tskSendCmd傳送通知;
Int32 CameraLink_drvCallback(FVID2_Handle handle, Ptr appData, Ptr reserved)
{
CameraLink_Obj *pObj = (CameraLink_Obj *) appData;
Utils_tskSendCmd(&pObj->tsk, SYSTEM_CMD_NEW_DATA);
pObj->cbCount++;
return FVID2_SOK;
}
2)CameraLink_drvCallback 在哪個地方設定的呢?
答覆:在CameraLink_drvCreateInst函式設定給 FVID2_CbParams cbPrm;
if (instId == 0)
pInst->cbPrm.cbFxn = CameraLink_drvCallback;
其中: CameraLink_InstObj *pInst;
CameraLink_drvCreateInst函式被CameraLink_drvCreate函式呼叫;而CameraLink_drvCreate在CameraLink_tskMain函式中呼叫;
即:CameraLink_tskMain-->CameraLink_drvCreate->CameraLink_drvCreateInst->CameraLink_drvCallback;
在Int32 CameraLink_drvCreateInst(CameraLink_Obj * pObj, UInt16 instId)函式中呼叫了
pInst->cameraVipHandle = FVID2_create(FVID2_ISS_CAPT_DRV,
pInst->instId,
pVipCreateArgs,
&pInst->createStatus, &pInst->cbPrm);
建立ISS的驅動;在FVID2_create中將回撥函式,Iss需要的引數 Iss_CaptCreateParams *pVipCreateArgs;傳遞到ISS驅動中;
這樣ISS中有資料時,就可以呼叫camera link的回撥函式,通知camera link 接收資料;
3)camera link 中的SYSTEM_CMD_START命令是在什麼時候收到的呢;
答覆:在link建立的流程中呼叫System_linkStart,link建立流程在A8上建立;
Int32 System_linkStart(UInt32 linkId)
{
return System_linkControl(linkId, SYSTEM_CMD_START, NULL, 0, TRUE);
}
4)camera link什麼時候通知 Iss 可以接收驅動的資料了呢;
答覆:是通過FVID2_start函式通知ISS的,在A8 link的建立流程中呼叫System_linkStart時,通知ISS可以接收驅動的資料了;
在camera link 收到SYSTEM_CMD_START訊號後,呼叫 status = CameraLink_drvStart(pObj); 在函式中呼叫FVID2_start告訴ISS可以接收資料了;
5)camra link 如何接收ISS驅動傳遞過來的資料;
答覆:camera link 通過FVID2_dequeue函式從佇列中獲取幀資料,通過FVID2_queue歸還驅動的buff;
在camera link 中收到SYSTEM_CMD_NEW_DATA 命令後,呼叫 status = CameraLink_drvProcessData(pObj);
從佇列中獲取資料,在CameraLink_drvProcessData 中呼叫FVID2_dequeue 從Iss 佇列中獲取資料; 在該函式往下一個link傳送SYSTEM_CMD_NEW_DATA;
通知下一個link獲取資料;
通過CameraLink_drvPutEmptyFrames 呼叫FVID2_queue歸還給驅動buff
Int32 CameraLink_putEmptyFrames(Utils_TskHndl * pTsk, UInt16 queId,
FVID2_FrameList * pFrameList)
{
CameraLink_Obj *pObj = (CameraLink_Obj *) pTsk->appData;
UTILS_assert(queId < CAMERA_LINK_MAX_OUT_QUE);
return CameraLink_drvPutEmptyFrames(pObj, pFrameList);
}
在CameraLink_init中呼叫;
linkObj.linkPutEmptyFrames = CameraLink_putEmptyFrames;
6)在雙碼流的情況下,不同解析度的碼流是在什麼地方獲取的,從ISS驅動中出來的碼流是原始解析度的,在camera link中做了scale操作嗎?
iss 驅動只傳遞原始解析度的影象,跟蹤到Iss驅動的程式碼,看ISS驅動是傳遞一個原始解析度給camera link嗎? 在iss的驅動檔案issdrv_captureApi.c 發現只傳遞原始解析度;
camealink 支援傳遞不同解析度的碼流到nextlink0,nextlink1;
7)camera link 通過FVID2_control設定引數;
8)在A8 建立link流程時,呼叫system_linkCreate,將引數傳遞到camralink;
Int32 CameraLink_drvCreate(CameraLink_Obj * pObj,CameraLink_CreateParams * pPrm)
9)camera link實現往2個nextlink傳遞不同解析度的碼流,呼叫碼流複製模組和影象縮放模組嗎,在哪個地方呼叫的?
獲取2路碼流,不用呼叫dup模組,cameralink本身能夠實現;
10)cameralink 如何分配記憶體;
if (CameraLink_drvIsDataFormatTiled(&pDrvObj->createArgs, streamId))
{
Utils_tilerFrameAlloc(&format, frames,
gCameraLink_framesPerChannel);
}
else
{
Utils_memFrameAlloc_capture(&format, frames,
gCameraLink_framesPerChannel,
Blanking_Data_Size, BoxCarDataSize);
}
相關文章
- dm8148 videoM3 link原始碼解析IDE原始碼
- dm8148 高解析度jpeg編碼(16k*8k)
- 【原始碼解析】- ArrayList原始碼解析,絕對詳細原始碼
- Spark原始碼-SparkContext原始碼解析Spark原始碼Context
- CountDownLatch原始碼解析CountDownLatch原始碼
- LeakCanary原始碼解析原始碼
- vuex原始碼解析Vue原始碼
- ArrayBlockQueue原始碼解析BloC原始碼
- AsyncTask原始碼解析原始碼
- CopyOnWriteArrayList原始碼解析原始碼
- Express原始碼解析Express原始碼
- Observer原始碼解析Server原始碼
- SparseArray 原始碼解析原始碼
- RecyclerView原始碼解析View原始碼
- Promise 原始碼解析Promise原始碼
- Koa原始碼解析原始碼
- RateLimiter原始碼解析MIT原始碼
- redux原始碼解析Redux原始碼
- SDWebImage原始碼解析Web原始碼
- CyclicBarrier原始碼解析原始碼
- Semaphore原始碼解析原始碼
- Exchanger原始碼解析原始碼
- AbstractQueuedSynchronizer原始碼解析原始碼
- OKio原始碼解析原始碼
- Koa 原始碼解析原始碼
- RxPermission原始碼解析原始碼
- MyBatis原始碼解析MyBatis原始碼
- ArrayList原始碼解析原始碼
- Aspects 原始碼解析原始碼
- LeakCanary 原始碼解析原始碼
- Vue原始碼解析Vue原始碼
- React原始碼解析React原始碼
- ButterKnife原始碼解析原始碼
- HashSet原始碼解析原始碼
- Retrofit 原始碼解析原始碼
- Javapoet原始碼解析Java原始碼
- Vuex 原始碼解析Vue原始碼
- OKHttp原始碼解析HTTP原始碼