LoginSignup
1
0

More than 1 year has passed since last update.

LovyanGFXで画面描画(5):PC でも動画再生

Last updated at Posted at 2022-12-15

「LED パネルキット AKBONE2022 で動画再生」
https://qiita.com/nanbuwks/items/2d71f9a12442f91e34ec

では SD カードから動画を読み込み、LEDパネルに出力しましたが、 LovyanGFX の PC エミュレータで同様に出力してみます。

画面出力サイズ

今回は、LEDパネルのサイズにあわせて、128x64のドットのスクリーンを仮想的に作ります。PC 画面上ではそれを縦横3倍にして、出力します。

準備

「LED パネルキット AKBONE2022 で動画再生」の記事のとおりにして、128x64.rgb を用意します。
ファイルを作業ディレクトリにコピーしておきます。
また、以下の内容の pc.hpp ファイルを作り、作業ディレクトリに保存しておきます。

#define delay(msec) SDL_Delay(msec)
#include <stdint.h>
#include <stdlib.h>
#include <string>

これは Arduino スケッチで使われているインクルードファイルや、delay 関数を使えるようにするためのものです。

スケッチ

LEDパネルキット用のものを元に、以下のようにしました。
かなり簡略化できています。
冒頭に、先程作った pc.hpp を読み込ませています。

#include "pc.hpp"
// video info
#define FRAME_W 128
#define FRAME_H 64
#define FRAMEBUFF_SIZE FRAME_W*FRAME_H*2 
#define FILENAME "128x64.rgb"
auto buffer = (uint8_t*)malloc(FRAMEBUFF_SIZE);

//rgb565=buffer;
#define LGFX_USE_V1
#include <LovyanGFX.hpp>

// #define PANEL_64x32
#define PANEL_128x64

#include <LGFX_AUTODETECT.hpp>
LGFX gfx ( 128,64,4 );

void setup() {
  Serial.begin(115200);
    //gfx.setColorDepth(8);
  gfx.init();
  gfx.setBrightness(128);
  gfx.setColorDepth(16);
//  Serial.println("setup done");
  delay(1000);
}

void loop() {
  char filename[50];
  int size;

  while (1){
    sprintf(filename,FILENAME);
    //Serial.print(filename);
    // File fp=SD.open(filename);
    // File fp=SPIFFS.open(filename, "r");
    FILE *fp;
    fp = fopen(filename,"r");
    if (!fp){
      //Serial.println("---fail----");
      continue;
    }
    // for ( int i=1; fp.available(); i++){
    for ( int i=1; !feof(fp); i++){
      // size = fp.read(buffer,FRAMEBUFF_SIZE);     
      size = fread(buffer,1,FRAMEBUFF_SIZE,fp);
      // Serial.println(String(i)+" "+String(size) + "bytes  " + String(millis()) + "ms ");
      gfx.pushImage(0,0,FRAME_W,FRAME_H,(uint16_t *)buffer);
      delay(40);
    }
    //fp.close();
    fclose(fp);
  }
}

Serial 関数はコメントアウト、またファイル入出力は元々のものをコメントアウトして、Cのスタンダードファイル入出力関数のものを別に足しています。

ここらへんの詳しい説明は後日・・・

実行

image.png

動画が表示されました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0