2011-01-18 4 views
0

DESを使用して重複するビデオクリップまたは静止画像を切り替える際に、奇妙なメモリ関連の問題が発生しました。他のDESユーザーが見つかったのかどうか不思議です同じ問題か、それとも私が見つけられなかった自分のバグかどうか。DirectShow編集サービスのビデオトランジションに関するメモリの問題

タイムラインに十分な数のトランジションが設定されると、タイムラインの再生が途中で停止することがわかりました。 DirectShowエラーは発生せず、DirectShowは再生が完了したと報告しませんが、IVMRWindowlessControl9 :: RepaintVideoは何も描画せずにS_OKを返し、フィルタチェーンに挿入した変換フィルタはTransform()メソッドの呼び出しを停止します。

トランジションを追加し続けると(新しいクリップの間にトランジションを追加することも意味します)、再生はタイムラインの前と後で失敗し、最終的にDirectShowは何もレンダリングしません。

Windowsタスクマネージャーは、再生中にメモリ使用量が絶え間なく増加したことを示し、再生が移行に達するたびにジャンプし、ポイントレンダリングに失敗したときにメモリ使用量が約150mb増加します。この時点以降、newまたはfopenへの呼び出しは失敗することがありますが、これは信頼できる動作ではありません。同じクリップを再生してもトランジションがない場合、最初の3〜4クリップに比べてメモリ使用量が約50MB増加しますが、それ以上の増加はなく、レンダリングに失敗することはありません。

故障の発生の鍵は、入力メディアの寸法のように見えます。 1920 x 1080の静止画では、タイムラインで約35回のトランジションが発生すると障害が発生します。 640×480のビデオクリップでは約80になります。静止画像とビデオクリップ、トランジションの長さ、特定のトランジションが使用されている他の要因に違いはありません。

再生を再開すると(ただし停止していないにしても)150 MBの余分なメモリが解放され、単一セッション中にトランジションを追加または削除して問題を表示して消滅させることができます純粋なメモリリークに対して、私はまだ絶対に何かを排除する準備ができていません。私はこれは私が「DESのバグであるかどうかを把握しようとしている:これは私の開発マシンは、要約すると、64ビットのWindows 7.

を実行している、問題に任意の光を追加します念の

回避する必要があるかどうか、あるいはしばしばそうであることが判明したとしても、それは自分自身のバグです。他の開発者が、成功した多数のトランジション(50〜100)でDESタイムラインを作成できましたか?あるいは、同じ問題が発生し、それに対処する方法を考えましたか?または、これをDESのバグとして確認して回避策を提案するマイクロソフトの社員がいますか?

この長いメッセージを読んでいただきありがとうございます。ご返信いただきありがとうございます。

+0

この質問の原著者の回答は遅すぎるかもしれませんが、私は最近、ここで説明したのとまったく同じ問題に直面しています。私は動的再接続をオンにしようとしましたが、それでも問題は解決しませんでした。この問題はメモリに関連しているようですが、システムがメモリ不足になったときの動作と同じです(時間が経過している間にフレームが特定の位置に固定される)。 DESのドキュメンテーションやディスカッションフォーラムで、この問題の解決策を見つけられませんでした。 –

+0

25以上のトランジションを持つ大規模ビデオプロジェクトにDESを使用しようとする人はあまりいないようです。皮肉なことに、システムとその能力/メモリによっては、画像のサイズが十分に大きく、正しい遷移が使用されていても、約25の画像/遷移でこの問題を再現することができます(特定の遷移により、早く)。 –

答えて

0

回答に遅れていますが、IRenderEngine::SetDynamicReconnectLevel()で動的再接続を有効にしましたか?

0

問題が解決するかどうかは不明ですが、メモリ関連の問題である場合は、アプリケーションの大規模な覚えを確認してください。オーバーレイを追加するためにDESを使用して再エンコードしているときに問題に遭遇しました。解像度1 920×1 200のビデオで作業するときに、「No more memory」のようなエラーが発生しました。メインプロジェクトのコンパイルの下でStudio 2010を設定する場合、[リンカ - >システム]で[大きなアドレスを有効にする]を[はい]にしてもう一度テストします。多分あなたの状況を修正するでしょう。 c#アプリケーションの場合は、POST EVENT BUILDSを使用して行います。詳細については、このリンクを参照してください。

https://blogs.msdn.microsoft.com/calvin_hsia/2010/09/27/out-of-memory-easy-ways-to-increase-the-memory-available-to-your-program/

よろしく、ニック。

希望すると便利です!