录像的视频如何在画面中实时加上时间戳
来源:互联网 发布:dlna软件下载 编辑:程序博客网 时间:2024/05/14 14:41
方法一(L之前版本):
可以在下面这个地方同,即MDP输出这个画面,但是Encode之前,使用SW的方式来Overlay即可,至于具体如何实现Overlay的话,网上搜索一下,很多示例代码的。如下的参考代码是在录像的画面上画一条彩色条的测试代码,你们可以将添加timestamp的功能的代码替换掉memset之后即可实现timestamp的功能。这个Buffer的格式是YUV420 Planer格式,即先放Y,再放U,最后放V。
frameworks/av/media/libstagefright/CameraSource.cpp
void CameraSource::dataCallbackTimestamp() { ... ... CHECK(data != NULL && data->size() > 0); // Brand the timestamp start 2014-07-29 { int _stride = mVideoSize.width; int height = mVideoSize.height; uint8_t *_ptr = (uint8_t *)data->pointer(); int offset = 240; int bar_width = 80; ALOGE("!!! draw line, ptr: %p, offset: %d, stride: %d, height: %d", _ptr, offset, _stride,height); if (NULL != _ptr) { // Overlay the timestamp here. memset(_ptr + offset*_stride , 0x80, _stride * bar_width); //Clear Y memset(_ptr + (height*_stride) + offset*_stride/4 , 0x40, _stride*bar_width/4); // Clear U memset(_ptr + (height*_stride + height*_stride/4) + offset*_stride/4, 0x40, _stride*bar_width/4); // Clear V } } // Brand the timestamp end 2014-07-29 mFramesReceived.push_back(data); int64_t timeUs = mStartTimeUs + (timestampUs - mFirstFrameTimeUs); mFrameTimes.push_back(timeUs); ... ... }
方法二(适用所有版本,不包括MT6735平台的M版本):
PreviewCmdQueThread.cpp(/vendor/mediatek/proprietary/platform/mt6735/hardware/mtkcam/D2/v1/hal/adapter/MtkDefault/Preview/PreviewCmdQueThread.cpp) 的
updateOne()方法中修改。将丢给encoder的yuv数据进行处理,这里的demo是将部分内容给涂黑,您可以使用这段buffer来处理timestamp,其中buffer地址为vidoNode.getImgBuf()->getVirAddr()。
updateOne()方法中修改。将丢给encoder的yuv数据进行处理,这里的demo是将部分内容给涂黑,您可以使用这段buffer来处理timestamp,其中buffer地址为vidoNode.getImgBuf()->getVirAddr()。
1)录像video中显示时间:
if(flag&eID_Pass2VIDO){ //Add timestamp MUINT8*p=(MUINT8*)vidoNode.getImgBuf()->getVirAddr(); MUINT8*end_p=(MUINT8*)vidoNode.getImgBuf()->getVirAddr()+ vidoNode.getImgBuf()->getImgWidth()*3*100/2; while((p<(end_p)))//add the addTimeStamp() function for yourself { *p=0; p++; } //Add timestamp end vidoNode.getImgBuf()->setTimestamp(pass1LatestTimeStamp); mspPreviewBufHandler->enqueBuffer(vidoNode); }
2)录像preview的时候也显示时间:
if (flag&eID_Pass2DISPO) { //Add timestamp MUINT8*p=(MUINT8*)dispNode.getImgBuf()->getVirAddr(); MUINT8*end_p=(MUINT8*)dispNode.getImgBuf()->getVirAddr()+ dispNode.getImgBuf()->getImgWidth()*3*100/2; while((p<(end_p)) )//add the addTimeStamp() function for yourself { *p=0; p++; } //Add timestamp dispNode.getImgBuf()->setTimestamp(pass1LatestTimeStamp); mspPreviewBufHandler->enqueBuffer(dispNode); }
方法三(适用所有版本,包括MT6735平台的M版本):
ExtImgProcImp.cpp:
M版本=>/vendor/mediatek/proprietary/hardware/mtkcam/legacy/v1/common/ExtImgProc/ExtImgProcImp.cpp
L版本=>/vendor/mediatek/proprietary/hardware/mtkcam/v1/common/ExtImgProc/ExtImgProcImp.cpp
KK版本=>/mediatek/hardware/mtkcam/v1/common/ExtImgProc/ExtImgProcImp.cpp
这里的demo是对ImageBufferQueue的yuv数据进行处理,将部分内容给涂黑,您可以使用这段buffer来处理timestamp,其中buffer地址为img.virtAddr。
1)设置需要处理的Image buffer type:
ExtImgProcImp:: ExtImgProcImp() { FUNCTION_NAME; //Set which img buf you want to process. //For example: mImgMask = BufType_Display|BufType_Record; mImgMask = BufType_Display|BufType_Record;//录像Preview和video中都显示时间 mUser = 0; }
2)添加时间戳
MBOOL ExtImgProcImp:: doImgProc(ImgInfo& img) { ... //Add image process code switch(img.bufType) { case BufType_Display: { //[BEGIN] //Add timestamp MUINT8 *p = (MUINT8*)img.virtAddr; MUINT8 *end_p = (MUINT8*)img.virtAddr + img.width*3*100/2; while((p<(end_p))) { *p=0; p++; } //Add timestamp end //[END] break; } ... case BufType_Record: { //[BEGIN] //Add timestamp MUINT8 *p = (MUINT8*)img.virtAddr; MUINT8 *end_p = (MUINT8*)img.virtAddr + img.width*3*100/2; while((p<(end_p))) { *p=0; p++; } //Add timestamp end //[END] break; } ... } }
0 0
- 录像的视频如何在画面中实时加上时间戳
- 实时视频的时间戳和视频流畅的关系
- python在html中插入简单的代码并加上时间戳
- 如何在VC中实现淡入淡出的启动画面
- 如何在画面中摆放大量图片
- 如何在图片中加上RAR压缩文件
- 如何在优酷评论中添加网页和视频时间点的超链接?
- Android 播放视频并获取指定时间的帧画面
- Android 播放视频并获取指定时间的帧画面
- PHP如何在原时间上加上一天?一个小时?
- PHP如何在原时间上加上一天?一个小时?.......
- 教程录像制作的视频
- C#在textbox中显示实时时间
- 如何在视频聊天软件里叠加时间戳
- 在视频帧的特定位置加上可视水印
- 如何在自己网站加上视频直播功能(搭建视频直播网站)
- 如何在自己网站加上视频直播功能(搭建视频直播网站)
- 如何让Moodle中所连结的flash等媒体事先呈现在画面上?
- 【SSH】利用struts2 特性 导出excel
- Java类加载器总结
- 点击按钮弹出网页
- 七种常用排序算法
- 常用Web Service汇总(天气预报、时刻表等)
- 录像的视频如何在画面中实时加上时间戳
- IOS 数据库FMDB(四)- (增、删、改、查)
- 并查集加拓扑排序
- js 除选中折叠框其他全部折叠(个人菜鸟笔记)
- POJ3283Card Hands
- 一个游戏程序员的学习资料
- 关于代码打包上传报错:没有适配iPhone5的启动图片
- laravel5和execl应用
- 解决mysqlbinlog: unknown variable 'default-character-set=utf8mb4'问题