実は透過率を含んだ動画フォーマットの「透過率を含んだ時」のデバッグが完全ではなかったのでその部分のテストをやっていたのですが・・・。
そのときに起こったVideoMixingRendererの思わぬ「わがまま」です。
透過率を含んだ動画をDirectShowで出力し、かつGraphEditなどで確認する時には透過率を受け付けるビデオレンダラが必要になります。
受け付けられない時はColorSpaceConverterが中間に入ってアルファを無効化して描画を行おうとします。(ビデオレンダラが透過率を受け入れる場合でもColorSpaceConverterが入る場合はあります)
VideoMixingRendererは標準のレンダラで透過率付き画像フレームを受け入れるほぼ唯一のレンダラな訳ですが、VideoMixingRendererに接続した時にちょっとびっくりしたのがこんな現象でした。
VideoMixingRendererと接続する際のメディアタイプの確認でこんなシーケンスがありました。すべて出力ピンのCheckMediaTypeの呼び出しです。感情は適当につけました。
- ピンからGetMediaType(800×600)で取得=>VideoMixingRendererから「現在のメディアタイプってこれ(800×600)だよね?」の確認
- VideoMixingRendererから「このフォーマット(800×600)は使えるよね?」の確認
- VideoMixingRendererから「ちょっとサイズが自分に合わないから変更して(1024×600)で行きたいからよろしく!」
・・・おい・・・。
最後の確認シーケンスがやっかいで、出力ピンのCheckMediaTypeでサイズを確認していないと出力側のサイズが変わっていることに気がつかないという現象でした。
フォーマットの確認の最中に出力先の描画サイズが変更されることもあると言うことでした。
ちなみに、三番目のシーケンスで「サイズ変更は許可しません!」というとサイズ変換用のColorSpaceConverterが中間に入ります。
動画本体の方はかなり大きくなってしまいましたが(YUVが4:1:1に対してAYUVを4:4:1:1で差し込む、動き補償が透過率の部分に合わないものをテストで使った)、ちょっとおもしろかったです。
今の段階でも透過率付き動画を演出にうまく使っているADVシステムは一つだけ確認していますが(直接の動画だけ)・・・。私も参戦しようかと思います。
といってもそもそも「動画を演出に使う」と言うこと自体がやったことがないので次に担当するところでは使用しないでしょうが・・・。もったいないです。
演出がよくなってもどうせ売れないんですけれどね・・・。絵とシナリオ(後は声?)で売れる要素は終わっていますので。