映像コーデックを扱うフレームワークはいろいろあって、それぞれでフレームの属性の扱い方も変わってきます。ここではインターレース属性について調べていきます。

そもそも、インターレース状態は、おおむね以下のどれかだと思っていいはずです。

  • 全く不明
  • プログレッシブ
  • インターレースであるがそれ以上は不明
  • トップファーストのインターレース(PALなど)
  • ボトムファーストのインターレース(NTSCなど)

これ以外にも、インターレース時に1フィールドを1フレームにして扱うという方式があります。どれくらい使われているのかは知りませんが。

で、映像コーデックフレームワークごとのインターレースの扱いですが、調べた限りでは以下のようになります。

VCM
指定不可能
DirectShow / DMO
メディアタイプを指定する際に、VIDEOINFOHEADER2 構造体の dwInterlaceFlags で指定できる。
つまり、ストリームごとに設定できる。
「全く不明」と「インターレースであるがそれ以上は不明」は指定できない。(VIDEOINFOHEADER 構造体には dwInterlaceFlags が無いので、それにより「全く不明」を暗黙的に指定することは可能かもしれないが、他のいくつかの拡張フィールドもなくなってしまう)
MFT
メディアタイプを指定する際に、MF_MT_INTERLACE_MODE アトリビュートで指定できる。
また、サンプルのアトリビュートとして MFSampleExtension_Interlaced, MFSampleExtension_BottomFieldFirst アトリビュートなどでも指定できる。
つまり、ストリームごとにもサンプルごとにも指定できる。
「全く不明」は指定できるが「インターレースであるがそれ以上は不明」は指定できない。
QuickTime
いつも言っているが、Apple の出しているドキュメントは、よくもこんな状態で商売がやっていけるもんだと思うぐらいのクソである。よっぽど経営陣が有能なのだろう。
各所に分散して見つかるフラグを見る限り、ストリームごとにもサンプルごとにも指定できそうに見えるが、前述のクソさ加減により確実なことは言えない。詳細も不明…というか詳細をうんぬんできるレベルではない。

「インターレースであるがそれ以上は不明」が指定できないのはちょっと困るところです。インターレースだと分かってるんならフィールドオーダーが分からないってことはないだろう、というのはそうかもしれませんが。

ともかく、インターレースはさっさと滅んでください。ブラウン管時代の遺物です。

Trackback

no comment untill now

Add your comment now