Просмотр исходного кода

add:添加105 视频播放demo

Dozingfiretruck 3 лет назад
Родитель
Сommit
c48043fc41
1 измененных файлов с 79 добавлено и 0 удалено
  1. 79 0
      demo/video_play/Air105/main.lua

+ 79 - 0
demo/video_play/Air105/main.lua

@@ -0,0 +1,79 @@
+--- 模块功能:video_play_demo
+-- @module video_play
+-- @author Dozingfiretruck
+-- @release 2021.09.06
+
+-- LuaTools需要PROJECT和VERSION这两个信息
+PROJECT = "video_play_demo"
+VERSION = "1.0.1"
+
+log.info("main", PROJECT, VERSION)
+
+-- sys库是标配
+_G.sys = require("sys")
+
+--添加硬狗防止程序卡死
+if wdt then
+    wdt.init(15000)--初始化watchdog设置为15s
+    sys.timerLoopStart(wdt.feed, 10000)--10s喂一次狗
+end
+
+sys.taskInit(function()
+    --初始化lcd
+    spi_lcd = spi.deviceSetup(5,pin.PC14,0,0,8,48*1000*1000,spi.MSB,1,1)
+    log.info("lcd.init",
+    lcd.init("st7735",{port = "device",pin_dc = pin.PE08 ,pin_rst = pin.PC12,pin_pwr = pin.PE09,direction = 3,w = 160,h = 128,xoffset = 1,yoffset = 2},spi_lcd))
+    --初始化sd
+    local spiId = 2
+    local result = spi.setup(
+        spiId,--串口id
+        255, -- 不使用默认CS脚
+        0,--CPHA
+        0,--CPOL
+        8,--数据宽度
+        400*1000  -- 初始化时使用较低的频率
+    )
+    local TF_CS = pin.PB3
+    gpio.setup(TF_CS, 1)
+    --fatfs.debug(1) -- 若挂载失败,可以尝试打开调试信息,查找原因
+    fatfs.mount("SD", spiId, TF_CS, 24000000)
+    local data, err = fatfs.getfree("SD")
+    if data then
+        log.info("fatfs", "getfree", json.encode(data))
+    else
+        log.info("fatfs", "err", err)
+    end
+    
+    -- 使用ffmpeg.exe将视频转成字节流文件.rgb放入TF卡 教程见 https://wiki.luatos.com/appDevelopment/video_play/105/video_play.html
+    local video_w = 160
+    local video_h = 128
+    local rgb_file = "mwsy.rgb"
+
+    local buff_size = video_w*video_h*2
+    local file_size = fs.fsize("/sd/"..rgb_file)
+    print("/sd/"..rgb_file.." file_size",file_size)
+    
+    local file = io.open("/sd/"..rgb_file, "rb")
+    if file then
+        local file_cnt = 0
+        local buff = zbuff.create(buff_size)
+        repeat
+            if file:fill(buff) then
+                file_cnt = file_cnt + buff_size
+                lcd.draw(0, 0, video_w-1, video_h-1, buff)
+                sys.wait(20)
+            end
+        until( file_size - file_cnt < buff_size )
+        local temp_data = file:fill(buff,0,file_size - file_cnt)
+        lcd.draw(0, 0, video_w-1, video_h-1, buff)
+        sys.wait(30)
+        file:close()
+    end
+
+    while 1 do
+        sys.wait(1000)
+    end
+end)
+
+-- 主循环, 必须加
+sys.run()