完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
以下是vpss上的获取yuv部分,看源代码是直接从一个接口取得一个buffer,没有区分y和uv,源代码注掉了uv的部分,还没弄懂其底层如何实现,故不敢妄加揣测 else if (cmd == CMD_SAVE_YUV) [ if (buf == NULL) [ Vps_rprintf("Buffer is null can not trasmit the YUV data n"); ittMsg->response = 0; ] else [ int chunk = 0; int capHorLineOffset,capVertLineOffset; CameraLink_Obj *pObj; CameraLink_VipInstParams *pInstPrm; CameraLink_OutParams *pOutPrm; pObj = &gCameraLink_obj; pInstPrm = &pObj->createArgs.vipInst[0]; pOutPrm = &pInstPrm->outParams[0]; capHorLineOffset = pOutPrm->scOutWidth; capVertLineOffset = pOutPrm->scOutHeight; if(gVstabEnable == 1) [ capHorLineOffset = (pOutPrm->scOutWidth * VSTAB_SCALE_NUMERATOR)/VSTAB_SCALE_DENOMINATOR; capVertLineOffset = (pOutPrm->scOutHeight * VSTAB_SCALE_NUMERATOR)/VSTAB_SCALE_DENOMINATOR; ] if (pOutPrm->dataFormat == FVID2_DF_YUV420SP_UV || pOutPrm->dataFormat == FVID2_DF_YUV420SP_VU)[ YUVDumpSize = (((capHorLineOffset) * capVertLineOffset) * 3)/2; ] else if (pOutPrm->dataFormat == FVID2_DF_YUV422I_UYVY || pOutPrm->dataFormat == FVID2_DF_YUV422I_YUYV || pOutPrm->dataFormat == FVID2_DF_YUV422I_YVYU || pOutPrm->dataFormat == FVID2_DF_YUV422I_VYUY || pOutPrm->dataFormat == FVID2_DF_BAYER_RAW)[ YUVDumpSize = ((capHorLineOffset) * capVertLineOffset) * 2; ] char *yuv_buf = (char *) captureBuff_Y[0]; int remaining_size = (int) YUVDumpSize; int max_transfer_size = 1000 * 1024; Vps_rprintf("Requesing to dump the YUV data n"); yuv_data_ready = 0; request_yuv_data = 1; Vps_rprintf("Trasmitting the YUV data n"); if (pObj->createArgs.captureMode == CAMERA_LINK_CAPMODE_ISIF) [ // DEBUG Iss_IttParams ittParams; ittParams.Raw_Data_Ready = 0; /* wait till isr of isif dumps the raw data */ ittParams.ittCommand = cmd; ittParams.isif_dump = (UInt32 *)captureBuff_Y[0]; status = FVID2_control(pInst->cameraVipHandle, IOCTL_ISS_ALG_ITT_CONTROL, &ittParams, NULL); if (status != FVID2_SOK) [ Vps_rprintf("YUV capture dump failed!n"); return ; ] while (ittParams.Raw_Data_Ready == 0) [ Task_sleep(100); ] ] else [ while (yuv_data_ready == 0) [ Task_sleep(100); ] ] do // for (chunk = 0; // // chunk < 3; // chunk++) [ int bytes_to_trasfer = (remaining_size > max_transfer_size) ? max_transfer_size : remaining_size; Vps_rprintf("Transmitting chunk %d bytes remaining = %d n", chunk, remaining_size); char *shared_buf = (char *) buf; memcpy(shared_buf, yuv_buf, bytes_to_trasfer); yuv_buf += bytes_to_trasfer; ittMsg->arg1 = bytes_to_trasfer; ittMsg->response = 1; Vps_rprintf("Sending the reply message n"); /*---------------------------------------------------------------------- * Send the response back to the client module *--------------------------------------------------------------------*/ if(msg != NULL) [ status = MessageQ_put(sender, (MessageQ_Msg) msg); UTILS_assert(status == MessageQ_S_SUCCESS); ] // Get status = MessageQ_get(hDccMsgQ, (MessageQ_Msg *) & msg, MessageQ_FOREVER); Vps_rprintf("Got the acknowledgement n"); UTILS_assert(status == MessageQ_S_SUCCESS); remaining_size -= bytes_to_trasfer; chunk++; ] while (remaining_size > 0); #if 0 yuv_buf = (UInt8 *) captureBuff_C[0]; remaining_size = (int) YUVDumpSize / 2; do [ int bytes_to_trasfer = (remaining_size > max_transfer_size) ? max_transfer_size : remaining_size; Vps_rprintf("Transmitting chunk %d bytes remaining = %d n", chunk, remaining_size); char *shared_buf = (char *) buf; memcpy(shared_buf, yuv_buf, bytes_to_trasfer); yuv_buf += bytes_to_trasfer; ittMsg->arg1 = bytes_to_trasfer; ittMsg->response = 1; Vps_rprintf("Sending the reply message n"); /*---------------------------------------------------------------------- * Send the response back to the client module *--------------------------------------------------------------------*/ if(msg != NULL) [ status = MessageQ_put(sender, (MessageQ_Msg) msg); UTILS_assert(status == MessageQ_S_SUCCESS); ] // Get status = MessageQ_get(hDccMsgQ, (MessageQ_Msg *) & msg, MessageQ_FOREVER); Vps_rprintf("Got the acknowledgement n"); UTILS_assert(status == MessageQ_S_SUCCESS); remaining_size -= bytes_to_trasfer; chunk++; ] while (remaining_size > 0); #endif ittMsg->arg1 = -1; ittMsg->response = 1; if(msg != NULL) [ status = MessageQ_put(sender, (MessageQ_Msg) msg); UTILS_assert(status == MessageQ_S_SUCCESS); ] ] ] |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
549 浏览 0 评论
1613 浏览 0 评论
2047 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1513 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1337 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1756浏览 29评论
2781浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1723浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1634浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1645浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 20:26 , Processed in 0.869784 second(s), Total 86, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2540