|
发表于 2024-3-8 11:15:22
只看该作者
7#
本帖最后由 dengkx 于 2024-3-8 11:40 编辑
将demo.py做以下更改:
diff --git a/demo/demo.py b/demo/demo.py
index 2219ba4..42a7b69 100644
--- a/demo/demo.py
+++ b/demo/demo.py
@@ -57,6 +57,9 @@ def cv2_extcall_back(obj, MediaBuffer):
resolution = find_two_numbers(data.size//3, vb.getImagePara().hstride, vb.getImagePara().vstride)
print("Try the recommended resolution: -o {}x{}".format(resolution[0], resolution[1]))
exit(-1)
+
+ cv2.putText(img, 'test word', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 1, cv2.LINE_AA)
+ vb.flushDrmBuf()
for i in range(obj.count):
cv2.imshow(obj.name + str(i), img)
cv2.waitKey(1)
@@ -221,9 +224,22 @@ def main():
print("Output image format is not 'BGR24', Use the '-b BGR24' option to specify image format.")
return 1
cv_display = Cv2Display("Cv2Display", None, sync, args.cvdisplay)
- cv_display.module = last_module.addExternalConsumer("Cv2Display", cv_display, cv2_extcall_back)
+ #cv_display.module = last_module.addExternalConsumer("Cv2Display", cv_display, cv2_extcall_back)
+ last_module.setOutputDataCallback(cv_display, cv2_extcall_back)
if args.encodetype != -1:
+ input_para = last_module.getOutputImagePara()
+ if input_para.v4l2Fmt != m.v4l2GetFmtByName("NV12"):
+ output_para = input_para
+ output_para.v4l2Fmt = m.v4l2GetFmtByName("NV12")
+ encRga = m.ModuleRga(output_para, m.RgaRotate(0))
+ encRga.setProductor(last_module)
+ ret = encRga.init()
+ if ret < 0:
+ print("rga init failed")
+ return 1
+ last_module = encRga
+
enc = m.ModuleMppEnc(m.EncodeType(args.encodetype))
enc.setProductor(last_module)
enc.setBufferCount(8)
-----------------------------------------------------------------------
使用命令:./demo.py -i ../firefly.mp4 -b BGR24 -c 1 -s 1 -e 0 -m out.mp4
-i指向你要播放的文件或者流,cv显示并将保存文件。可以看到cv显示的画面有添加的内容,并且其他工具播放保存的out.mp4也可看到添加的内容。
demo主要更改:
1. cv回调中增加向视频帧添加文字,然后将添加的内容从cpu端刷新到dma端(flushDrmBuf)。
2. 将cv显示部分从添加外部消费者更改到rga回调里,这样cv处理后的数据就能同步输出到rga模块的消费者模块。
3. h264或h265编码需要YUV数据,添加rga模块将BGR24格式数据转成YUV数据给编码模块。 |
|