【BUG反馈】屏幕画面出现割裂现象

Viewed 139

下面两种调用摄像头显示图像的代码,第一种方法直接绑定摄像头到Video层可以正常流畅的显示摄像头的画面,第二种方法用Show_img方法显示画面,在画面移动的时候会有严重的画面撕裂

第一种(正常显示)

import sys,uos
import time
from media.sensor import *
from media.display import *
from media.media import *

if __name__ == "__main__":
    try:

        sensor = Sensor(width=1270,height=960)
        # sensor reset
        sensor.reset()

        # set chn1 output format
        sensor.set_framesize(width = 640, height = 480, chn = CAM_CHN_ID_1)
#        sensor.set_pixformat(Sensor.RGB565, chn = CAM_CHN_ID_1)
        sensor.set_pixformat(PIXEL_FORMAT_YUV_SEMIPLANAR_420, chn = CAM_CHN_ID_1)
        
        sensor_bind_info = sensor.bind_info(x = 0, y = 0, chn = CAM_CHN_ID_1)
        Display.bind_layer(**sensor_bind_info, layer = Display.LAYER_VIDEO1)
        # use lcd as display output
        Display.init(Display.ST7701,width=640,height=480,to_ide = True)

        # init media manager
        MediaManager.init()
        # sensor start run
        sensor.run()

        while True:
            print("1")
#            img = sensor.snapshot(chn = CAM_CHN_ID_1)
#            Display.show_image(img)
    except KeyboardInterrupt as e:
        print(f"user stop")
    except BaseException as e:
        print(f"Exception '{e}'")
    finally:
        # sensor stop run
        if isinstance(sensor, Sensor):
            sensor.stop()
        # deinit display
        Display.deinit()

        os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
        time.sleep_ms(100)
        
        # release media buffer
        MediaManager.deinit()


第二种(画面撕裂)

import sys,uos
import time
from media.sensor import *
from media.display import *
from media.media import *

if __name__ == "__main__":
    try:

        sensor = Sensor(width=1270,height=960)
        # sensor reset
        sensor.reset()

        # set chn1 output format
        sensor.set_framesize(width = 640, height = 480, chn = CAM_CHN_ID_1)
        sensor.set_pixformat(Sensor.RGB565, chn = CAM_CHN_ID_1)
#        sensor.set_pixformat(PIXEL_FORMAT_YUV_SEMIPLANAR_420, chn = CAM_CHN_ID_1)
        
#        sensor_bind_info = sensor.bind_info(x = 0, y = 0, chn = CAM_CHN_ID_1)
#        Display.bind_layer(**sensor_bind_info, layer = Display.LAYER_VIDEO1)
        # use lcd as display output
        Display.init(Display.ST7701,width=640,height=480,to_ide = True)

        # init media manager
        MediaManager.init()
        # sensor start run
        sensor.run()

        while True:
#            print("1")
            img = sensor.snapshot(chn = CAM_CHN_ID_1)
            Display.show_image(img)
    except KeyboardInterrupt as e:
        print(f"user stop")
    except BaseException as e:
        print(f"Exception '{e}'")
    finally:
        # sensor stop run
        if isinstance(sensor, Sensor):
            sensor.stop()
        # deinit display
        Display.deinit()

        os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
        time.sleep_ms(100)
        
        # release media buffer
        MediaManager.deinit()


请问这是什么原因?

1 Answers

你好,这是由于屏幕实际是480x640得,然而是按照640x480使用得,需要在show_image得时候进行一次旋转,因此帧率会有所降低,而bind到video layer得时候,video_layer 1支持硬件旋转,帧率降低得不明显,看起来更加得流畅。

你好,我发现在ST7701显示屏上显示就会有画面撕裂Display.init(Display.ST7701,width=640,height=480,to_ide = True),如果改为VIRT就是正常的Display.init(Display.VIRT,width=640,height=480,to_ide = True),是否说明是屏幕质量的问题?

不是屏幕质量问题,如果使用竖屏480x640就可以改善撕裂的问题