Display对象
Display对象实现了视频显示功能,可以将图像数据通过HDMI接口输出到显示器,该对象包含display、set_img、set_graph_rect、set_graph_word、close等方法,详细说明如下:
display
【功能描述】显示模块初始化,并配置显示参数
【函数声明】Display.display(chn, width, height, vot_intf, vot_out_mode)
| 参数名称 | 定义描述 | 取值 范围 |
|---|---|---|
| chn | 显示输出层 | 0: 视频层,2: 图形层 |
| width | 输入图像的宽度 | 不超过1920 |
| height | 输入图像的高度 | 不超过1080 |
| vot_intf | 视频接口输出分辨率 | 默认为0,1080p |
| vot_out_mode | 视频输出接口 | 默认为1,HDMI输出 |
#create display object
disp = libsrcampy.Display()
#enable display function, solution: 1080p, interface: HDMI
ret = disp.display(0, 1920, 1080, 0, 1)
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| -1 | 失败 |
开发板HDMI接口分辨率基于显示器EDID获取,目前只支持1920x1080、1280x720、1024x600、800x480几种分辨率。使能显示模块时,需要注意配置分辨率跟显示器实际分辨率相匹配。
无
set_img
【功能描述】向display模块输入显示数据,格式需要为NV12
Display.set_img(img)
| 参数名称 | 定义描述 | 取值范围 |
|---|---|---|
| img | 需要显示的图像数据 | NV12格式 |
无
【返回值】| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| -1 | 失败 |
该接口需要在使用display接口使能显示功能后使用,送入数据需要为NV12格式
import sys, os, time
import numpy as np
import cv2
from hobot_vio import libsrcampy
def test_display():
#create display object
disp = libsrcampy.Display()
#enable display function
ret = disp.display(0, 1920, 1080, 0, 1)
print ("Display display 0 return:%d" % ret)
fo = open("output.img", "rb")
img = fo.read()
fo.close()
#send image data to display
ret = disp.set_img(img)
print ("Display set_img return:%d" % ret)
time.sleep(3)
disp.close()
print("test_display done!!!")
test_display()
set_graph_rect
【功能描述】在显示模块的图形层绘制矩形框
【函数声明】Display.set_graph_rect(x0, y0, x1, y1, chn, flush, color, line_width)
| 参数名称 | 定义描述 | 取值范围 |
|---|---|---|
| x0 | 绘制矩形框左上角的坐标值x | 不超过视频画面尺寸 |
| y0 | 绘制矩形框左上角的坐标值y | 不超过视频画面尺寸 |
| x1 | 绘制矩形框右下角的坐标值x | 不超过视频画面尺寸 |
| y1 | 绘制矩形框右下角的坐标值y | 不超过视频画面尺寸 |
| chn | 图形层通道号 | 范围2~3,默认为2 |
| flush | 是否清零图形层buffer | 0:否,1:是 |
| color | 矩形框颜色设置 | ARGB8888格式 |
| line_width | 矩形框边的宽度 | 范围1~16,默认为4 |
#enable graph layer 2
ret = disp.display(2)
print ("Display display 2 return:%d" % ret)
#set osd rectangle
ret = disp.set_graph_rect(100, 100, 1920, 200, chn = 2, flush = 1, color = 0xffff00ff)
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| -1 | 失败 |
该接口需要在使用display接口使能显示功能后使用
无
set_graph_word
【功能描述】在显示模块的图形层绘制字符
【函数声明】Display.set_graph_word(x, y, str, chn, flush, color, line_width)
| 参数名称 | 描述 | 取值范围 |
|---|---|---|
| x | 绘制字符的起始坐标值x | 不超过视频画面尺寸 |
| y | 绘制字符的起始坐标值y | 不超过视频画面尺寸 |
| str | 需要绘制的字符数据 | GB2312编码 |
| chn | 图形层通道号 | 范围2~3,默认为2 |
| flush | 是否清零图形层buffer | 0:否,1:是 |
| color | 字符颜色设置 | ARGB8888格式 |
| line_width | 字符线条的宽度 | 范围1~16,默认为1 |
#enable graph layer 2
ret = disp.display(2)
print ("Display display 2 return:%d" % ret)
#set osd string
string = "horizon"
ret = disp.set_graph_word(300, 300, string.encode('gb2312'), 2, 0, 0xff00ffff)
print ("Display set_graph_word return:%d" % ret)
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| -1 | 失败 |
该接口需要在使用display接口使能显示功能后使用
无
close
【功能描述】关闭显示模块
【函数声明】Display.close()
无
【使用方法】无
【返回值】| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| -1 | 失败 |
该接口需要在使用display接口使能显示功能后使用
无
bind接口
【功能描述】该接口可以把Camera、Encoder、Decoder、Display模块的输出与输入数据流进行绑定,绑定后无需用户操作,数据可在绑定模块之间自动流转。例如,绑定 Camera 和 Display 后,摄像头数据会自动通过显示模块输出到显示屏上,无需调用额外接口。
libsrcampy.bind(src, dst)
| 参数名称 | 描述 | 取值范围 |
|---|---|---|
| src | 源数据模块 | Camera、Encoder、Decoder模块 |
| dst | 目标数据模块 | Camera、Encoder、Decoder、Display模块 |
#create camera object
cam = libsrcampy.Camera()
ret = cam.open_cam(0, 1, 30, [1920, 1280], [1080, 720])
print("Camera open_cam return:%d" % ret)
#encode start
enc = libsrcampy.Encoder()
ret = enc.encode(0, 1, 1920, 1080)
print("Encoder encode return:%d" % ret)
#bind, input: cam, output: enc
ret = libsrcampy.bind(cam, enc)
print("libsrcampy bind return:%d" % ret)
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| -1 | 失败 |
无
【参考代码】无
unbind接口
【功能描述】将两个绑定过的模块解绑
【函数声明】libsrcampy.unbind(src, dst)
| 参数名称 | 描述 | 取值范围 |
|---|---|---|
| src | 源数据模块 | Camera、Encoder、Decoder模块 |
| dst | 目标数据模块 | Camera、Encoder、Decoder、Display模块 |
#create camera object
cam = libsrcampy.Camera()
ret = cam.open_cam(0, 1, 30, [1920, 1280], [1080, 720])
print("Camera open_cam return:%d" % ret)
#encode start
enc = libsrcampy.Encoder()
ret = enc.encode(0, 1, 1920, 1080)
print("Encoder encode return:%d" % ret)
#bind, input: cam, output: enc
ret = libsrcampy.bind(cam, enc)
print("libsrcampy bind return:%d" % ret)
#unbind, input: cam, output: enc
ret = libsrcampy.unbind(cam, enc)
print("libsrcampy unbind return:%d" % ret)
| 返回值 | 描述 |
|---|---|
| 0 | 成功 |
| -1 | 失败 |
无
【参考代码】无