SH-MobileR と CE で作る携帯端末 ~ DirectShow でのフィルター実装手法 ~ 株式会社アキタ電子システムズソフトウェア開発部第一ソフトウェア開発 Gr 主任技師伊藤優 (ito-yu@akita-elec.co.jp) Agenda Windows Embedded 製品 DirectShow とは? Filter Graph Manager DMO:DirectX Media Object デモ SH-MobileR ミドルウェアの実装 1
Windows Embedded 製品 高性能.NET Micro Framework Windows Embedded CE Windows XP Embedded Windows XP 高機能 携帯デバイスに求められる機能.NET Micro Framework Windows Embedded CE Windows XP Embedded Windows XP 2
機能への要求と回答 要求項目 マルチメディア機能 :WMV WMA, MP3 1SEG etc. 処理能力の高さ 低消費電力 低コスト LSI としての回答 :SoC による要求実現 コーデック内蔵 :CPU 負荷の低減 動作クロックを下げることによる低消費電力化 マルチメディア機能を内蔵 IP が処理することによる CPU リソースの有効活用 SoC による性能向上 Codec 内蔵 SoC CPU CPU Core Applications DirectShow Playback App DS Filter Graph Manager Applications DirectShow Playback App DS Filter Graph Manager Source Codec Renderer Source Codec Renderer Codec IP 3
DirectShow とは? DirectShow: マルチメディアデータを処理するためのミドルウェアの総称 マルチメディアデータはデータ処理を行うフィルターから構成されるパイプラインにて処理される パイプラインは Filter Graph Manager により生成されるため ユーザーは意識する必要は無い Windows Media API でのアプリケーション開発が容易 多くのコーデックやフォーマットが標準でサポートされる 標準のコーデックとフォーマットのサポート Advanced Streaming Format (ASF) Motion Picture Experts Group (MPEG) Audio-Video Interleaved (AVI) MPEG Audio Layer-3 (MP3) Waveform Audio (WAV) Windows Media Audio (WMA) Windows Media Video (WMV) 4
WinCE マルチメディアアーキテクチャ Sample Player App, IE 6 WMP ActiveX Control DirectShow Playback App DirectShow Capture Application DS Filter Graph Manager DS Filter Graph Manager Source Codec Renderer Capture Preview Codec Muxer Network, File System DirectDraw, GDI, WaveDev File System Network, File system, Graphics, Audio, Video, Camera Drivers Hardware DirectShow Framework 概要 Application commands events File System DirectShow Filter Graph Manager Legacy VCM/ACM Codecs Internet Source filters Transfom filters Rendering filters File System Kernel Streaming Architecture Wave API DirectDraw WDM Capture Devices Legacy VFW Capture Devices Hardware Decoders Sound Card Video Graphic Card 5
フィルターグラフの要素 フィルターグラフフィルターピンメディアサンプルアロケータークロック サポートされる DirectShow 再生フィルター File Source Filter MPEG1 Parser/splitter AVI Splitter Wave parser Video Renderer Generic streamer Color converter MP3 filter Windows Media Source Filter DMO wrapper filter (WMA and WMV) ACM wrapper Audio Renderer Source Filters Transform Filters Renderers 6
Filter Graph Manager(FGM) Filter Graph Manager は自動的にデータ処理用のパイプラインを構築 Intelligent Connect フィルターはデータ入出力用のピンを持ち 受付可能なデータをフィルター自身が判断する パイプラインを任意に生成することも可能 高速起動 フィルターの切り替え DirectShow(Windows Media Technology) Input Source Filter Filter Graph Manager Transform Filter Render Filter Output DirectShow のフィルター Source Filter ローカルストレージ ネットワークストリーミングなど 入力データを取り込む Transform Filter デコード エンコードなどのデータ処理を行う Render Filter オーディオやビデオへの出力処理を行う 7
サポートされているフィルター ACM Wrapper Video/Image Compression Manager AVI Filter DMO Wrapper Filter File Source Filter (Async / URL) MPEG-1 Parser / Spliter Overlay Mixer Direct Show Video Render WAVE/AIFF/au/snd File Parser Generic File Streamer Audio Lip-Sync Filter MPEG-2 Program Stream Multiplexer Filter MPEG-2 Program Stream Demultiplex Filter DVR Sink Filter DVR Source Filter VBI Render Filter DirectShow アプリケーションの記述 アプリケーションの記述は簡単な 3 ステップ Step 1:FGM のインスタンスを生成する Application CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, void **)&pgraph ); Filter Graph Manager 8
DirectShow アプリケーションの記述 Step 2: フィルターグラフを構築するために FGM を使用する Application pgraph->renderfile( lpwstrfile, NULL ); FGM DirectShow アプリケーションの記述 Step 3: フィルターグラフとイベント応答を制御する Run Method calls Application FGM pgraph->queryinterface( IID_IMediaControl, (void **)&pcontrol ); pgraph->queryinterface( IID_IMediaEvent, (void **)&pevent ); Events Complete pcontrol->run(); pevent-> WaitForCompletion( INFINITE, &evcode ); 9
簡単な再生プログラム #include <streams.h> int WINAPI WinMain( HINSTANCE hinstance, HINSTANCE hprevinst, LPWSTR lpszcmdline, int ncmdshow ) { IGraphBuilder *pgraph = NULL; IMediaControl *pmediacontrol = NULL; IMediaEvent *pmediaevent = NULL; CoInitializeEx(NULL, COINIT_MULTITHREADED); // Step1: Create the filter graph manager. CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void **)&pgraph); pgraph->queryinterface(iid_imediacontrol, (void **)&pmediacontrol); pgraph->queryinterface(iid_imediaevent, (void **)&pmediaevent); 簡単な再生プログラム ( 続き ) } // Step2: Build the graph. pgraph->renderfile(l" Hello_World.avi",NULL); // Step3: Run the graph and respond to events. pmediacontrol->run(); long evcode; pmediaevent->waitforcompletion(infinite,evcode); // Clean up. pmediacontrol->release(); pmediaevent->release(); pgraph->release(); CoUninitialize(); 10
Intelligent Connect FGM での IGraphBuilder インターフェイス RenderFile FGM IGraphBuilder AddSourceFilter Render Connect Intelligent Connect AddSourceFilter によるソースフィルターの追加 RenderFile FGM AddSourceFilter Check the protocol Check the file extension Check the check bytes 11
Intelligent Connect フィルターグラフの登録を構築するために IGraphBuilder::Render を使用する IPin::IStreamBuilder FGM Upper stream filter Intelligent Connect のまとめ AddSourceFilter メソッドを呼び出してソースフィルターを追加する グラフの残りを構築するためにレンダーを使用する 有効であれば IStreamBuilder で出力ピンを使用する 以前の接続からキャッシュフィルターを試みる フィルターグラフ内のフィルタの接続解除を試みる FGM は IFilterMapper::EnumMatchingFilters を使ってレジストリからフィルタを検索する 12
Manual Connect グラフにフィルターを生成して追加する ソースフィルターの出力ピンを順に接続解除する IBaseFilter::EnumPins( IEnumPins **ppenum ) デスティネーションフィルターの入力ピンを順に接続解除する IFilterGraph::ConnectDirect で二つのピンを直接接続する DirectX Media Object(DMO) DMO : メディアデータ処理用オブジェクト DirectShow フィルタと比べ I/F が少なく開発が容易 DMO Wrapper Filter を介して DirectShow フィルタとして利用可能 WinCE 標準の WMA WMV MP3 は DMO フィルタ DirectShow(Windows Media Technology) Input Source Filter Filter Graph Manager DMO Wrapper Transform Filter DMO Filter Render Filter Output 13
DMO Filter のデータ処理 Step 1. Query the DMO GetStreamCount GetInputType GetOutputType Step 2. Set Media Type SetInputType SetOutputType Step 3. Allocate Buffer GetInputSizeInfo GetOutputSizeInfo DMO Filter のデータ処理 Step 4. Process Input ProcessInput GetInputStatus Step 5. Process Output ProcessOutput Step 6. Signal a Discontinuity Discontinuity 14
DMO による音楽再生 使用プラットフォーム : ソリューションエンジン ( 日立超 LSIシステムズ製 ) CPU:Renesas SH-MobileR(SH7722) コーデック : ルネサステクノロジ製 WMA Reference DirectShow http://msdn2.microsoft.com/en-us/library/aa930379.aspx Demo application source is available on CodePlex Test source is available in Shared Source private test multimedia directx dshow playback Newsgroup Microsoft.public.windowsce.app.development Microsoft.public.windowsce.embedded Microsoft.public.windowsce.embedded.vc Microsoft.public.windowsce.platbuilder Microsoft.public.windowsce.targeted.device Microsoft.public.windowsce.testtools 15
16