Android视频添加时间水印

本文介绍了如何在Android的高通平台上为行车记录视频添加时间水印。通过获取每一帧YUV数据,覆盖时间水印并重新编码。主要步骤包括:1.准备数字和符号的Bitmap并转化为字节数组;2.在video数据流后处理阶段修改YUV的Y分量。解决了使用frameworks中CameraSource.cpp导致的水印闪烁问题,提供了一个在硬件video流处理阶段进行修改的解决方案。
摘要由CSDN通过智能技术生成

由于需要在高通平台上做行车记录的功能,需要给视频加上时间水印。

网上搜索了一下方案,发现有在MTK平台做过类似功能的,参考:
http://blog.csdn.net/jimbo_lee/article/details/27545193

最直接的想法就是获取到视频编码前每一帧YUV数据,将时间水印覆盖到对应的像素点上,然后再进行视频编码。

效果图:
这里写图片描述

主要实现过程:
1.准备0-9数字以及- / 等符号(时间水印中包含的元素)的Bitmap图片,如果是灰度的时间水印,8位深度的Bitmap就可以。Bitmap图片转换成对应的字节数组可以借助工具实现,当然也可以自己解析Bitmap文件(参考http://blog.csdn.net/smileorcryps/article/details/60756967),获取到时间对应的字节数组后,直接覆盖YUV中相应位置的Y分量就可以了;

2.找到相机中video数据流后处理的位置,高通平台hardware/qcom/camera/QCamera2/HAL/QCamera2HWICallbacks.cpp(具体的位置参考后面贴的patch),在这里先根据当前时间获取到具体的水印字节数组,然后修改YUV数据中Y分量(NV21格式,Y单独存储,修改起来也相对简单),这样最后生成的视频中就会包含时间水印了。

问题:时间水印闪烁跳动

之前是修改的frameworks中CameraSource.cpp

void CameraSource::dataCallbackTimestamp(int64_t timestampUs,
int32_t msgType, const sp &data) {

这种方式会造成水印不规则闪烁,怀疑是内存缓存的问题,函数是有同步控制的,for循环中的值直接跑乱了。

后来换成在hardware的video流处理阶段进行处理就可以了。

只针对720p视频修改的patch:

diff --git a/hardware/qcom/camera/QCamera2/HAL/QCamera2HWI.cpp b/hardware/qcom/camera/QCamera2/HAL/QCamera2HWI.cpp
old mode 100644
new mode 100755
index 60f7191..891d743
--- a/hardware/qcom/camera/QCamera2/HAL/QCamera2HWI.cpp
+++ b/hardware/qcom/camera/QCamera2/HAL/QCamera2HWI.cpp
@@ -1022,6 +1022,7 @@ QCamera2HardwareInterface::QCamera2HardwareInterface(uint32_t cameraId)
       mAdvancedCaptureConfigured(false),
       mFPSReconfigure(false)
 {
+   mWatermarkBuf = NULL;
 #ifdef TARGET_TS_MAKEUP
     mMakeUpBuf = NULL;
     memset(&mFaceRect, -1, sizeof(mFaceRect));
@@ -2222,6 +2223,13 @@ int QCamera2HardwareInterface::startRecording()
     if (rc == NO_ERROR) {
         rc = startChannel(QCAMERA_CH_TYPE_VIDEO);
     }
+   
+   if (mWatermarkBuf == NULL) {
   
+     
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值