1

問題

Windows Mobile / Directdraw: ビデオ ストリームの回転

ビデオのプレビューは機能しています。今必要なのは、画像を回転させる方法だけです。CTransformFilterこれを処理する唯一の方法は、カメラ画像を回転させるカスタム フィルターを作成することだと思います。この問題を解決するのを手伝ってくれるなら、例えば、限られた DirectDraw の知識でこのフィルタを開発するのを手伝ってくれれば、報奨金はあなたのものです。

背景/前の質問

現在、モバイル デバイス (HTC HD2、Windows Mobile 6) 用のアプリケーションを開発しています。プログラムが行う必要があることの 1 つは、内蔵カメラを使用して写真を撮ることです。以前はCameraCaptureDialog、Windows Mobile 6 SDK が提供する を使用してこれを行っていましたが、顧客はよりユーザー フレンドリーなソリューションを望んでいます。

アイデアは、コントロールでカメラのビデオ ストリームをプレビューし、コントロールがクリックされたときに、カメラの写真機能を使用して高解像度の写真 (>= 2 メガピクセル) を撮影することです。このトピックについて調査を行った結果、これを達成する最善の方法は Direct Draw を使用することであることがわかりました。

マイナス面は、ネイティブ Windows API を実際に使用したことがないことと、私の C++ がかなり悪いことです。これに加えて、私はどこかで、HTC 携帯電話の Direct Draw サポートは特殊性が悪く、高品質の写真を撮るには文書化されていないネイティブの HTC ライブラリ呼び出しを使用する必要があることを読みました。

良いニュースは、会社が上記の仕様を満たすコントロールを開発することを申し出たことです。彼らは約 10 日かかると見積もっており、妥当な時間内にこのコントロールを開発できるかどうかの議論につながりました。

どの代替案が優れているかを研究するのが今の私の仕事です。言うまでもなく、アーキテクチャ全体を研究してデモを開発するには、あまりにも時間がかかりすぎるため、次のような疑問が生じます。

質問はもはや関係ありません!

  • 同様のプロジェクトの経験がある人はいますか? あなたの推奨事項は何ですか?
  • ビデオのプレビューと画像のキャプチャを処理する Direct Draw のソース コードの例はありますか?
4

2 に答える 2

2

EZRGB24 サンプルを見ると、単純なビデオ変換フィルターの基本がわかります。

サンプルを目的の動作にするには、サンプルに対して行う必要があることが 2 つあります。

1) x,y を y,x にコピーする必要があります。
2) サンプルが幅 x 高さではなく高さ x 幅になったことをメディア サンプルに伝える必要があります。

最終的な画像のピクセル数はまったく同じになることに注意してください。

1を解決するのは比較的簡単です。「x + (y * Width)」を実行すると、ピクセルの位置を計算できます。したがって、各 x と y をステップ実行してそのように位置を計算し、それを「y + (x * 高さ)」に書き込みます。これにより、画像が転置されます。もちろん、step2 がなければ、これは完全に間違っているように見えます。

2 を解決するには、入力サンプルの AM_MEDIA_TYPE を取得する必要があります。次に、formatType が何であるかを調べる必要があります (おそらく FormatType_VideoInfo または FormatType_VideoInfo2)。したがって、AM_MEDIA_TYPE の pbFormat メンバーを VIDEOINFOHEADER または VIDEOINFOHEADER2 (FormatType に応じて) にキャストできます。VIDEOINFOHEADER[2]::bmiHeader.biWidth と biHeight を入力メディア サンプルの biHeight と biWidth (それぞれ) に設定する必要があります。それ以外はすべて、入力 AM_MEDIA_TYPE と同じにする必要があります。

それが少し役立つことを願っています。

于 2010-03-01T19:00:50.643 に答える
1

この質問は、DirectDraw に関する詳細を知るのに役立ちます。私はこれについて少し前にいくつかの調査を行いましたが、見つけることができた最高のものはこのブログ投稿でした (上記の質問にも記載されています)。この投稿は、SDK の CameraCapture サンプルの拡張機能を示しています。

ただし、大きな期待はしないでください。プレビューと撮影した写真は低解像度でしか機能しないようです。DirectDraw は解像度を構成する方法を記述していますが、これがドライバーによって適切に実装されるという保証はありません。

したがって、私の経験から、あなたが読んだことは真実です。それを行う唯一の方法は、HTC ドライバーを使用することです。したがって、疑わしい結果のためにリバース エンジニアリングに終わりのない日々を費やしたくない場合は、他の人に任せてください。試してみたい場合は、xda-developers forumを試してください。

于 2010-02-19T12:16:26.247 に答える