SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

Enhanced Video Rendererを使ってみよう

DirectShowからEVRを使って動画再生を行うアプリケーションの制作

  • このエントリーをはてなブックマークに追加

ダウンロード サンプルコード (17.9 KB)

 Windows Vistaでは新しいビデオレンダラとしてEnhanced Video Rendererが追加されました。本稿では、それを使ってウォーターマークのビットマップを合成しながら動画を再生するアプリケーションを作成します。

  • このエントリーをはてなブックマークに追加

はじめに

 Windows XP以前ではDirectShowにおける静止画や動画の表示に使われるレンダラーとして、Video Renderer、Overlay Mixer、Video Mixing Renderer(以下、VMR)、VMR9が使われてきました。Windows Vistaでは、これらは引き続き使用可能ではありますが、新たにEnhanced Video Renderer(以下、EVR)と呼ばれるコンポーネントがインストールされています。

 本稿では、EVRの概要を説明します。それから、実際にEVRを使って動画をウォーターマークと共に再生する方法を説明します。

対象読者

  • C++言語、ATLが分かる方
  • DirectShowを使ったアプリケーションを作成したことのある方

 本稿のサンプルコードはATLを使っていますが、EVRを使うための必須条件ではありません。

必要な環境

EVRとは?

 EVRは、入力したフレームを画面に表示するビデオレンダラーコンポーネントです。

 EVRは、従来のレンダラーのようにDirectShowフィルタとして機能するだけでなく、新たな映像・音声プラットフォームであるMedia Foundationのメディアシンクとしても機能します。これはEVRというコンポーネントがDirectShowとMedia Foundationの両方のインターフェイスを持っているからです。

EVRを構成しているコンポーネント

 EVRは「ミキサー」と「プレゼンタ」と呼ばれる2つのコンポーネントで構成されています。ミキサーは入力したフレームを合成し、プレゼンタはミキサーから合成したフレームを受け取り、レンダリングします(図1)。

図1. EVR内部の構成
図1

 これら2つのコンポーネントは独自のものに置き換えることができます。例えば、EVRに既定で割り当てられている標準プレゼンタは指定したウィンドウにフレームを表示するだけですが、独自のプレゼンタをEVRに割り当てることにより、自前で用意したDirect3Dサーフェイスなどへレンダリングすることもできます。

EVRにおける操作モード

 EVRにはVMRにおける「操作モード」がないという大きな違いがあります。

 VMRには、3つの表示モード「ウィンドウモード」「ウィンドウレスモード」「レンダリングレス再生モード」と、複数の入力ストリームの合成を行う「ミキシングモード」という、「操作モード」と呼ばれる仕組みがありました。アプリケーションは、必要に応じて、これらのモードを選択していました。

 EVRには、このような区別がありません。あえて言うと、常にミキシングモードが有効であり、レンダリングレス再生モードです。

 EVRではミキサーが常にロードされた状態となっています。VMRでは入力ストリームの数が1であった場合、ミキサーはロードされませんでしたが、EVRでは常にロードされます。

 また、レンダリングレス再生モードなので、何らかのプレゼンタが常に使われます。EVRでは標準プレゼンタが用意されていて、既定ではこれがロードされています。これはウィンドウレスモードのように動作をします。つまり、プレゼンタ自身がウィンドウを作成しないので、アプリケーション側で表示先となるウィンドウを用意し、それを指定します。

EVRの準備とインスタンスの作成

 では実装に入っていきましょう。DirectShowとEVRを使うには、次のファイルをインクルードし、ライブラリをリンクします。

  • dshow.h
  • strmiids.lib
  • evr.h

 ウォーターマークを表示するために必要なIMFVideoMixerBitmapインターフェイスを使うために、次のファイルを追加でインクルードします。

  • evr9.h
  • d3d9.h

 EVRのインスタンスを作成します。CLSIDとしてCLSID_EnhancedVideoRendererを指定します。DirectShowで使うために、インターフェイスはIBaseFilterとします。

CComPtr<IBaseFilter> m_Evr;
hr=m_Evr.CoCreateInstance(CLSID_EnhancedVideoRenderer);

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
標準プレゼンタのカスタマイズ

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

syu5()

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3663 2009/06/12 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング