カスタムDirectShowフィルターで正しいフレーム時間を秒単位で取得するにはどうすればよいですか?

2kを送信

ビデオファイルからフレームを取得したい。DirectshowのSampleGrabberにいくつかのバグがあるため、同様のフィルター(変換フィルターではなく、レンダラー)を作成することにしました。

Windows SDKダンプフィルター(Microsoft SDKs\Windows\v7.1\Samples\multimedia\directshow\filters\dump)に基づいてDirectShowフィルターを作成しようとしています私のフィルターはRGB24フォーマットのみを受け入れます。

class CDumpInputPin : public CRenderedInputPin
{

//...

STDMETHODIMP Receive(IMediaSample *pSample) override {
    //...
    REFERENCE_TIME tStart=0, tStop=0;
    if (FAILED(pSample->GetTime(&tStart, &tStop))) {
        LOG(ERROR) << "Unable to get sample time";
    }
    LOG(INFO) << "tStart=" << tStart << " tStop=" << tStop ;
}

HRESULT CheckMediaType(const CMediaType *pmt){
        if (*pmt->Type() != MEDIATYPE_Video) {
            return S_FALSE;
        }
        if ((*pmt->FormatType() != FORMAT_VideoInfo)) {
            return S_FALSE;
        }

        if ((*pmt->Subtype() != MEDIASUBTYPE_RGB24)) {
            return S_FALSE;
        }
        return S_OK;
}

}

正しいRGBフレームを取得しますが、IMediaSample :: GetTime()メソッドから返された値を解釈する方法がわかりません。pSeeking->SetPositions( &Start, AM_SEEKING_AbsolutePositioning | AM_SEEKING_SeekToKeyFrame, 0, AM_SEEKING_NoPositioning);はソースファイル内のさまざまな位置を探すために使用します。8フレームを取得しようとすると、ログが表示されます。

tStart=222223 tStop=622223
tStart=266668 tStop=666668
tStart=311113 tStop=711113
tStart=355558 tStop=755558
tStart=3 tStop=400003
tStart=44448 tStop=444448
tStart=88893 tStop=488893
tStart=133338 tStop=533338

これらの数字が何を意味するのか、そしてなぜそれらが増加するシーケンスを構成していないのか理解できません。

これらのフレームの正しいタイムスタンプは次のとおりです。

00:00:12
00:00:37
00:01:01
00:01:26
00:01:51
00:02:15
00:02:40
00:03:05
ローマンR。

正しい時刻を取得します-100ns単位の64ビット値。参照してくださいREFERENCE_TIMEDirectShowの時間と時計を

REFERENCE_TIMEデータ型は、DirectShowの参照時間の単位を定義します。参照時間の各単位は100ナノ秒です。

..。

タイムスタンプは、ストリーム時間で測定されたメディアサンプルの開始時間と終了時間を定義します。タイムスタンプは、プレゼンテーション時間と呼ばれることもあります

..。

ファイルの再生:最初のサンプルには、開始時刻がゼロのタイムスタンプが付けられます。後続のタイムスタンプは、サンプルの長さと再生速度によって決定されます。再生速度自体は、ファイル形式によって決定されます。ファイルを解析するフィルターは、正しいタイムスタンプを計算する役割を果たします。

そう、

秒単位で正しいフレーム時間を取得する方法...

DOUBLE Time = tStart / 1E7; // <<--- presentation time (see above) in seconds

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

dqlの2つのタイムスタンプ間の経過時間を秒単位で取得するにはどうすればよいですか?

分類Dev

jQueryで2つのタイムスタンプ間の時差を秒単位で取得するにはどうすればよいですか?

分類Dev

データフレーム内の時間を時間、分、秒、ミリ秒で並べ替えるにはどうすればよいですか?

分類Dev

式でカスタムフィルターを選択するにはどうすればよいですか?

分類Dev

カスタムビューのフレームをTableViewCellフレームと正しく一致させるにはどうすればよいですか?

分類Dev

単一のフィールドに特定のフォームビュー(カスタム)を表示するにはどうすればよいですか?

分類Dev

Outlookの新着メールフォームの間にカスタムフィールドを挿入するにはどうすればよいですか?

分類Dev

サンプルデータフレームのcreated_time列から時間を取得し、それを別のデータフレームとしてカウントするにはどうすればよいですか?

分類Dev

Swiftで現在の時刻を秒単位で取得し、プレーヤーの継続時間を追加するにはどうすればよいですか?

分類Dev

Angularjs-カスタムフィルターをDOMに正しく出力するにはどうすればよいですか?

分類Dev

SuiteCRM:カスタムフィールドにJSを追加するにはどうすればよいですか

分類Dev

logstash / kibanaにカスタムフィールドを追加するにはどうすればよいですか?

分類Dev

ARInvoiceカスタマーセレクターにカスタムフィールドを追加するにはどうすればよいですか?

分類Dev

カスタムIDフィールドを設定するにはどうすればよいですか?

分類Dev

Django Adminのresponse_change内からカスタムフォームフィールド値を取得するにはどうすればよいですか?

分類Dev

Pythonを介してWorkfrontでカスタムフィールド値を取得するにはどうすればよいですか?

分類Dev

JJWTを使用してペイロードからカスタムフィールドを取得するにはどうすればよいですか

分類Dev

Office 365でインプレースアーカイブカスタムフォルダー名を取得するにはどうすればよいですか?

分類Dev

Linuxでログファイルを表示し、表示中にカスタムフィルターを適用するにはどうすればよいですか?

分類Dev

iOSで任意のスレッドの正しいフレームポインタを取得するにはどうすればよいですか?

分類Dev

ミリ秒から日時までのタイムスタンプフィールドをカバーしながら、Avro GenericRecordを有効なJsonに変換するにはどうすればよいですか?

分類Dev

APIを使用してTrelloカスタムフィールドを取得/設定するにはどうすればよいですか?

分類Dev

カスタム フォーム バリデーターのフィールドにエラーを表示するにはどうすればよいですか?

分類Dev

Wordpressのカスタム投稿タイプのJSON応答でカスタムフィールドを表示するにはどうすればよいですか?

分類Dev

データフレーム間の合計時間オーバーラップを取得するにはどうすればよいですか?

分類Dev

WooCommerceカートでカスタムフィールドを追加料金としてカウントするにはどうすればよいですか?

分類Dev

マングースの日付フィールドに正しいタイムゾーンを設定するにはどうすればよいですか?

分類Dev

カスタムオーバーレイフィルターを作成するにはどうすればよいですか?

分類Dev

C ++でシステムの稼働時間をミリ秒単位で取得するにはどうすればよいですか?

Related 関連記事

  1. 1

    dqlの2つのタイムスタンプ間の経過時間を秒単位で取得するにはどうすればよいですか?

  2. 2

    jQueryで2つのタイムスタンプ間の時差を秒単位で取得するにはどうすればよいですか?

  3. 3

    データフレーム内の時間を時間、分、秒、ミリ秒で並べ替えるにはどうすればよいですか?

  4. 4

    式でカスタムフィルターを選択するにはどうすればよいですか?

  5. 5

    カスタムビューのフレームをTableViewCellフレームと正しく一致させるにはどうすればよいですか?

  6. 6

    単一のフィールドに特定のフォームビュー(カスタム)を表示するにはどうすればよいですか?

  7. 7

    Outlookの新着メールフォームの間にカスタムフィールドを挿入するにはどうすればよいですか?

  8. 8

    サンプルデータフレームのcreated_time列から時間を取得し、それを別のデータフレームとしてカウントするにはどうすればよいですか?

  9. 9

    Swiftで現在の時刻を秒単位で取得し、プレーヤーの継続時間を追加するにはどうすればよいですか?

  10. 10

    Angularjs-カスタムフィルターをDOMに正しく出力するにはどうすればよいですか?

  11. 11

    SuiteCRM:カスタムフィールドにJSを追加するにはどうすればよいですか

  12. 12

    logstash / kibanaにカスタムフィールドを追加するにはどうすればよいですか?

  13. 13

    ARInvoiceカスタマーセレクターにカスタムフィールドを追加するにはどうすればよいですか?

  14. 14

    カスタムIDフィールドを設定するにはどうすればよいですか?

  15. 15

    Django Adminのresponse_change内からカスタムフォームフィールド値を取得するにはどうすればよいですか?

  16. 16

    Pythonを介してWorkfrontでカスタムフィールド値を取得するにはどうすればよいですか?

  17. 17

    JJWTを使用してペイロードからカスタムフィールドを取得するにはどうすればよいですか

  18. 18

    Office 365でインプレースアーカイブカスタムフォルダー名を取得するにはどうすればよいですか?

  19. 19

    Linuxでログファイルを表示し、表示中にカスタムフィルターを適用するにはどうすればよいですか?

  20. 20

    iOSで任意のスレッドの正しいフレームポインタを取得するにはどうすればよいですか?

  21. 21

    ミリ秒から日時までのタイムスタンプフィールドをカバーしながら、Avro GenericRecordを有効なJsonに変換するにはどうすればよいですか?

  22. 22

    APIを使用してTrelloカスタムフィールドを取得/設定するにはどうすればよいですか?

  23. 23

    カスタム フォーム バリデーターのフィールドにエラーを表示するにはどうすればよいですか?

  24. 24

    Wordpressのカスタム投稿タイプのJSON応答でカスタムフィールドを表示するにはどうすればよいですか?

  25. 25

    データフレーム間の合計時間オーバーラップを取得するにはどうすればよいですか?

  26. 26

    WooCommerceカートでカスタムフィールドを追加料金としてカウントするにはどうすればよいですか?

  27. 27

    マングースの日付フィールドに正しいタイムゾーンを設定するにはどうすればよいですか?

  28. 28

    カスタムオーバーレイフィルターを作成するにはどうすればよいですか?

  29. 29

    C ++でシステムの稼働時間をミリ秒単位で取得するにはどうすればよいですか?

ホットタグ

アーカイブ