• RKMEDIA--VO的使用


    这一节主要说说rkmedia vo模块的使用。

    rkmedia的vo是对DRM接口的封装,提供给用户更方便的使用,rv1126/rv1109支持两个vo图层。

    1、首先先介绍一下DRM的测试命令--modetest,用来确认当前屏幕能够正常点亮。 

    1. modetest -M rockchip //打印出rk平台的显示层的信息
    2. [root@RV1126_RV1109:/userdata]# modetest -M rockchip
    3. Encoders:
    4. id crtc type possible crtcs possible clones
    5. 55 53 DSI 0x00000001 0x00000000
    6. Connectors:
    7. id encoder status name size (mm) modes encoders
    8. 56 55 connected DSI-1 68x121 1 55
    9. modes:
    10. name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot)
    11. 720x1280 60 720 768 776 828 1280 1296 1302 1317 65000 flags: nhsync, nvsync; type: preferred, driver
    12. props:
    13. 1 EDID:
    14. flags: immutable blob
    15. blobs:
    16. value:
    17. 2 DPMS:
    18. flags: enum
    19. enums: On=0 Standby=1 Suspend=2 Off=3
    20. value: 0
    21. 5 link-status:
    22. flags: enum
    23. enums: Good=0 Bad=1
    24. value: 0
    25. 6 non-desktop:
    26. flags: immutable range
    27. values: 0 1
    28. value: 0
    29. 43 brightness:
    30. flags: range
    31. values: 0 100
    32. value: 50
    33. 44 contrast:
    34. flags: range
    35. values: 0 100
    36. value: 50
    37. 47 saturation:
    38. flags: range
    39. values: 0 100
    40. value: 50
    41. 48 hue:
    42. flags: range
    43. values: 0 100
    44. value: 50
    45. CRTCs:
    46. id fb pos size
    47. 53 0 (0,0) (720x1280)
    48. 720x1280 60 720 768 776 828 1280 1296 1302 1317 65000 flags: nhsync, nvsync; type: preferred, driver
    49. props:
    50. 38 left margin:
    51. flags: range
    52. values: 0 100
    53. value: 100
    54. 39 right margin:
    55. flags: range
    56. values: 0 100
    57. value: 100
    58. 40 top margin:
    59. flags: range
    60. values: 0 100
    61. value: 100
    62. 41 bottom margin:
    63. flags: range
    64. values: 0 100
    65. value: 100
    66. 51 FEATURE:
    67. flags: immutable bitmask
    68. values: afbdc=0x1
    69. value: 0
    70. Planes:
    71. id crtc fb CRTC x,y x,y gamma size possible crtcs
    72. 52 0 0 0,0 0,0 0 0x00000001
    73. formats: XR24 AR24 XB24 AB24 RG24 BG24 RG16 BG16
    74. props:
    75. 8 type:
    76. flags: immutable enum
    77. enums: Overlay=0 Primary=1 Cursor=2
    78. value: 1
    79. 50 FEATURE:
    80. flags: immutable bitmask
    81. values: scale=0x1 alpha=0x2 hdr2sdr=0x4 sdr2hdr=0x8 afbdc=0x10
    82. value: 2
    83. 54 0 0 0,0 0,0 0 0x00000001
    84. formats: XR24 AR24 XB24 AB24 RG24 BG24 RG16 BG16 NV12 NV16 NV24
    85. props:
    86. 8 type:
    87. flags: immutable enum
    88. enums: Overlay=0 Primary=1 Cursor=2
    89. value: 0
    90. 50 FEATURE:
    91. flags: immutable bitmask
    92. values: scale=0x1 alpha=0x2 hdr2sdr=0x4 sdr2hdr=0x8 afbdc=0x10
    93. value: 3
    94. Frame buffers:
    95. id size pitch

    1. modetest -M rockchip -s 56:720x1280 //正常情况下 在对应屏幕会有彩色条纹显示
    2. -s指定的56 是connectors id号,720x1280 是显示分辨率。rv1126 evb板配上的是此分辨率的屏,所以在正常情况下,屏幕会点亮并出现彩色条纹

     效果图:

    2、rkmedia的vo图层有两个:

    VO_PLANE_OVERLAY :支持RGB888,ARGB8888,RGB565,422,420(nv12),444,

    VO_PLANE_PRIMARY :支持RGB888,ARGB8888,RGB565

    如果需要叠加ui界面,一般情况是放在primary层,overlay层用来显示视频

    1. // VO[0] for primary plane
    2. stVoAttr.pcDevNode = "/dev/dri/card0";
    3. stVoAttr.emPlaneType = VO_PLANE_PRIMARY;
    4. stVoAttr.enImgType = IMAGE_TYPE_RGB888;
    5. stVoAttr.u16Zpos = 0;
    6. stVoAttr.stDispRect.s32X = 0;
    7. stVoAttr.stDispRect.s32Y = 0;
    8. stVoAttr.stDispRect.u32Width = disp_width;
    9. stVoAttr.stDispRect.u32Height = disp_height;
    10. ret = RK_MPI_VO_CreateChn(0, &stVoAttr);
    11. if (ret) {
    12. printf("Create vo[0] failed! ret=%d\n", ret);
    13. return -1;
    14. }
    15. // VO[0] for overlay plane
    16. stVoAttr.pcDevNode = "/dev/dri/card0";
    17. stVoAttr.emPlaneType = VO_PLANE_OVERLAY;
    18. stVoAttr.enImgType = IMAGE_TYPE_NV12;
    19. stVoAttr.u16Zpos = 0;
    20. stVoAttr.stDispRect.s32X = 0;
    21. stVoAttr.stDispRect.s32Y = 0;
    22. stVoAttr.stDispRect.u32Width = disp_width;
    23. stVoAttr.stDispRect.u32Height = disp_height;
    24. ret = RK_MPI_VO_CreateChn(0, &stVoAttr);
    25. if (ret) {
    26. printf("Create vo[0] failed! ret=%d\n", ret);
    27. return -1;
    28. }

    如果设置双层同时显示,记得要配置zpos。zpos的值为0或1,1在上层 0在下层。 

    查看屏幕信息

    cat /sys/kernel/debug/dri/0/summary

    1. VOP [ffb00000.vop]: ACTIVE
    2. Connector: DSI
    3. bus_format[100a]: RGB888_1X24
    4. overlay_mode[0] output_mode[0] color_space[0]
    5. Display mode: 720x1280p60
    6. clk[65000] real_clk[65000] type[48] flag[a]
    7. H: 720 768 776 828
    8. V: 1280 1296 1302 1317
    9. win0-0: DISABLED
    10. win2-0: DISABLED
    11. post: sdr2hdr[0] hdr2sdr[0]
    12. pre : sdr2hdr[0]
    13. post CSC: r2y[0] y2r[0] CSC mode[1]

    vo部分遇到的问题不多,只要可以用modetest点亮屏幕,用rkmedia也可以点亮。

    rkmedia提供测试vo demo: rkmedia_vo_display_test

    暂时关于VO部分写这么多,有新的建议后续加上来

     文章汇总:RKMEDIA使用简介_未_定的博客-CSDN博客

  • 相关阅读:
    9.19 QT作业
    idea插件推荐
    Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理
    Linux中防火墙firewalld
    【场景生成与研究】考虑时序相关性MC的场景生成与削减研究(Matlab代码实现)
    解决Pytest UnknownMarkWarning: Unknown pytest.mark.single - is this a typo?
    成为一个优秀的测试工程师需要具备哪些知识和经验?
    Docker(10)compose容器编排
    requests 2.13.0 版本的 https 连接慢漏提示
    态、势、感、知矩阵
  • 原文地址:https://blog.csdn.net/qq_36769014/article/details/128126435