私は、やや「友好的でない」中国のビデオ圧縮ボードの API を使用しています。ドライバーから返される各ビデオ フレーム バッファーには、ビデオのタイムスタンプがあります。ただし、タイムスタンプは 2 つの独立したフリーランニング コンポーネントに分割されます。
1) 次のように定義された DateTime 構造体
struct DateTime
{
unsigned long second :6; // 0-59
unsigned long minute :6; // 0-59
unsigned long hour :5; // 0-23
unsigned long day :5; // 1-31
unsigned long month :4; // 1-12
unsigned long year :6; // 2000-2063
};
2) ロールオーバーするフリーランニングの 16 ビット (2 バイト) 符号なしミリ秒カウンター。
これら 2 つのタイムスタンプ間で同期されるものはありません。ミリ秒のロールオーバーは、DateTime.second の増分に対応していません。ミリ秒タイマーで単純なモジュロ 1000 除算を実行しても、DateTime.second のインクリメントには対応しません。
これらの両方を組み合わせて、常に単調に増加する統一されたビデオ フレームのタイムスタンプを作成する方法を考え出す必要があります。ドライバーによって配信された元のタイムスタンプを保持したいのですが、ドライバーのタイムスタンプをオーバーライドして、独自のタイムスタンプを添付することもできます。どんな提案でも大歓迎です!