20 AV输入控件-M系列
什么是视频AV控件?
带AV摄像头输入的物联型串口支持AV信号输入显示,常用于美容仪行业的皮肤护理、头发检测等

针对M型系列的视频播放/AV输入功能时,视频图层会一直显示在最上层,此时如果我们将文字等其他图形叠加放在视频控件上显示时,视频图层会将其他图形都覆盖,导致只能显示出视频,而无法显示视频上叠放的其他文字和图形。为此,我司针对有此类需求的客户开发了对应的M系列视频底层播放API接口,来满足此类客户的需求,api函数接口如下所示
set_color_key(Min_Color,Max_Color,Match)
函数说明:
- Min_Color:24位RGB颜色范围的最小值,例如0x00BFBFBF,R-BF/G-BF/B-BF;
- Min_Color:24位RGB颜色范围的最大值,例如0x00C8C8C8,R-C8/G-C8/B-C8;
- Match:6位的比较规则101010(2A);10-R/10-G/10-B,代表颜色范围在0x00BFBFBF—0x00C8C8C8之间的颜色值经过比较后会被过滤。(0x00BFBFBF <= color <= 0x00C8C8C8之间的颜色会被过滤,其他颜色会显示出来)
function on_init()
    set_color_key(0x00BFBFBF,0x00C8C8C8,0x0000002A)
end
注:set_color_key(Min_Color,Max_Color,Match),此API接口函数必须要放在on_init()系统初始化函数中使用,默认在初始时配置的属性
适用范围:M系列
相关例程下载链接:
- 《M系列 AV输入》(点击跳转)
20.1 视频AV控件属性介绍

用途
选中视频控件,在属性窗口中选择“播放AV输入”
20.2 AV输入坐标显示
【AV输入坐标显示】画面,介绍配置LUA脚本的AV应用,结合按钮上下左右移动,显示‘十字线’

属性配置
视频控件配置
视频控件配置拖动选择视频控件,用途选择播放AV输入,如下所示

按钮配置
按钮控件上(控件ID6):控制十字光标显示坐标y减
按钮控件下(控件ID8):控制十字光标显示坐标y加
按钮控件左(控件ID7):控制十字光标显示坐标x减
按钮控件右(控件ID9):控制十字光标显示坐标x加
属性配置如下所示

LUA脚本控制
20.3 LUA脚本逻辑实现
LUA脚本配置实现代码:
-- 十字光标坐标显示点 
local LineH_Y = 263                             --十字显示光标点y坐标
local LineV_X = 240                             --十字显示光标点x坐标 
local TextH_X = LineV_X + 5                        --坐标text显示的坐标位置
local TextH_Y = LineH_Y - 40 
local TextV_X = LineV_X + 5
local TextV_Y = LineH_Y - 20
function on_init()                             --初始化
    set_color_key(0x00BFBFBF,0x00C8C8C8,0x0000002A)             --设置颜色过滤属性(必须在on_init()中配置)
end
function on_draw(screen)                          --界面刷新回调函数,具体使用说明参考《LUA脚本API》
    if screen == 1 then
        set_pen_color(0x3666)                        --设置画笔颜色  
        draw_line(40,LineH_Y,440,LineH_Y,1)                 --画十字线  
        draw_line(LineV_X,63,LineV_X,440,1)
        local text_h = "LineH_Y:"..LineH_Y
        local text_v = "LineV_X:"..LineV_X
        draw_text(text_h,TextH_X,TextH_Y,90,20,4,0x3666,4)         --画坐标text显示
        draw_text(text_v,TextV_X,TextV_Y,90,20,4,0x3666,4)
    end 
end
function on_control_notify(screen,control,value)              --触摸控件回调函数
    if screen == 1 then
        if control == 6 then --上
            if value == 1 then
                LineH_Y = LineH_Y - 1
                if LineH_Y < 63 then
                    LineH_Y = 63
                end
            elseif value == 2 then
                LineH_Y = LineH_Y - 5
                if LineH_Y < 63 then
                    LineH_Y = 63
                end
            end
        elseif control == 7 then --下
            if value == 1 then
                LineV_X = LineV_X - 1
                if LineV_X < 63 then
                    LineV_X = 63
                end
           elseif value == 2 then
                LineV_X = LineV_X - 5
                if LineV_X < 63 then
                    LineV_X = 63
                end
          end
        elseif control == 8 then --左
            if value == 1 then
               LineH_Y = LineH_Y + 1
               if LineH_Y > 440 then
                   LineH_Y = 463
               end
            elseif value == 2 then
                LineH_Y = LineH_Y + 5
                if LineH_Y > 440 then
                    LineH_Y = 463
                end
            end
        elseif control == 9 then --右
            if value == 1 then
                LineV_X = LineV_X + 1
                if LineV_X > 440 then
                    LineV_X = 440
                 end
            elseif value == 2 then
                LineV_X = LineV_X + 5
                if LineV_X > 440 then
                    LineV_X = 440
                end
            end
        end
        follow_pos(LineV_X,LineH_Y) --text显示坐标传入
        redraw()
    end
end
function on_press(state,x,y) --触摸屏点击回调函数                   
    if get_current_screen() == 1 then
        if state == 1 or state == 2 then
            if x >= 40 and x <= 440 then
                if y >= 63 and y <= 463 then
                    follow_pos(x,y)
                    LineV_X = x
                    LineH_Y = y
                    redraw()
                end
            end
        end 
    end
end
function follow_pos(p_x,p_y) --text坐标显示
    if p_x < 240 and p_y < 263 then
        TextV_X = p_x + 5
        TextH_X = p_x + 5
        TextV_Y = p_y + 5
        TextH_Y = p_y + 25
     elseif p_x < 240 and p_y > 263 then
        TextV_X = p_x + 5
        TextH_X = p_x + 5
        TextV_Y = p_y - 40
        TextH_Y = p_y - 20
    elseif p_x >= 240 and p_y <= 263 then
        TextV_X = p_x - 85
        TextH_X = p_x - 85
        TextV_Y = p_y + 5
        TextH_Y = p_y + 25
    elseif p_x > 240 and p_y > 263 then
        TextV_X = p_x - 85
        TextH_X = p_x - 85
        TextV_Y = p_y - 40
        TextH_Y = p_y - 20
    end
end
20.4 两路AV切换
指令切换
M系列带两路AV的可以支持来回切换,指令如下所示
| 帧头 | 组态指令 | 功能码-AV通道切换 | 画面ID | 控件ID | 通道 | 帧尾 | 
|---|---|---|---|---|---|---|
| EE | B1 | 77 | 00 00 | 00 01 | 00/01 | FF FC FF FF | 
当通道为00,表示切换到通道0的AV信号输入,当前通道为0x01,表示切换到通道1的AV信号输入
LUA API切换
set_av_channel(channel)
切换AV通道,仅M系列支持
- channel = 0,切换到通道0 
- channel= 1,切换到通道1