2023/11/3(金)

Chromiumのビルドに成功した後いろいろいじっていたが、ビルドしたものを使ってどうやってCEF開発を進めればいいのかよく分からず放り投げた。デスクトップ機でビルドしたものから最低限のものを取り出して手軽に開発を進めたいんだが。

make_distrib.shを実行するとバイナリディストリビューションが作れるという話なのでそれを試みたのだが、一部のヘッダファイルがないみたいなのが出て止まる。解決できず。


FFmpeg APIの研究を進めた。今日は読み込み処理を研究。フレームのタイムスタンプptsを解釈するとき、CodecContextのtime_baseではなくStreamのtime_baseを使わないとバグるっぽいことが実験により分かった。この辺の挙動の仕組みが分からん。

あとav_read_frameで入手できるデータがいわゆる動画の「フレーム」ではなく、フレームと1対1対応していない「パケット」とかいう概念なのが罠すぎる。それから、今までデータ書き込みでavcodec_receive_packetを使ったりデータ読み込みでavcodec_send_packetを使っているのがよく分かっていなかったのだが、ようやく仕組みを理解した。これはエンコーダ/デコーダとのやり取りの話だ。

  • エンコード時
    • フレームデータを用意する
    • →エンコーダにフレームデータを書き込む(avcodec_send_frame)
    • →エンコーダからパケットを受け取る(avcodec_receive_packet)
  • デコード時
    • パケットデータを読み込む
    • →デコーダにパケットデータを書き込む(avcodec_send_packet)
    • →デコーダからフレームデータを受け取る(avcodec_receive_frame)

理解してしまえば簡単な話だが、ここが今まで分かってなかった。


昨日久しぶりにジョギングしたせいで脚が少し痛い。有酸素運動のつもりだったのだが筋トレよりになってしまったようだ。

また毎日のジョギングをやるつもりでいたが早速一日休む運びとなっている。

Categories: