今日はffmpegのfilterling.cサンプルをちょっとだけ読んだ。
https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/filtering_video.c
やっぱりメモリ確保・解放を明示的に書かなくてはいけないところはCらしいなぁと思う。C++だとスマートポインターを使うところだ。ただこういうストレートなところがCの良いところである。メモリをここで確保する、この位置で開放すると書いてあったほうがわかりやすいこともある。
面白いなと思ったのはメモリ確保がすべて最終的にはav_malloc
関数を使っているところ。できる限りアラインメントしたメモリブロックを返すためにmallocをラップしているのだ。コンパイラによってはメモリアラインメントつきのメモリ確保関数が用意されているのでなるたけそれを使うようになっている。ffmpegは処理が高速ということだが、こういうところを見るとなるほどなと思った。おそらくありとあらゆるところで高速化の工夫をしているのだろうなと。