QVideoFrame Class
QVideoFrame クラスは、ビデオデータのフレームを表します。詳細...
Header: | #include <QVideoFrame> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Multimedia) target_link_libraries(mytarget PRIVATE Qt6::Multimedia) |
qmake: | QT += multimedia |
パブリック型
enum | HandleType { NoHandle, RhiTextureHandle } |
enum | MapMode { NotMapped, ReadOnly, WriteOnly, ReadWrite } |
パブリック関数
QVideoFrame() | |
(since 6.8) | QVideoFrame(const QImage &image) |
QVideoFrame(const QVideoFrameFormat &format) | |
(since 6.8) | QVideoFrame(std::unique_ptr<QAbstractVideoBuffer> videoBuffer) |
QVideoFrame(const QVideoFrame &other) | |
QVideoFrame(QVideoFrame &&other) | |
~QVideoFrame() | |
uchar * | bits(int plane) |
const uchar * | bits(int plane) const |
int | bytesPerLine(int plane) const |
qint64 | endTime() const |
QVideoFrame::HandleType | handleType() const |
int | height() const |
bool | isMapped() const |
bool | isReadable() const |
bool | isValid() const |
bool | isWritable() const |
bool | map(QVideoFrame::MapMode mode) |
QVideoFrame::MapMode | mapMode() const |
int | mappedBytes(int plane) const |
bool | mirrored() const |
void | paint(QPainter *painter, const QRectF &rect, const QVideoFrame::PaintOptions &options) |
QVideoFrameFormat::PixelFormat | pixelFormat() const |
int | planeCount() const |
QtVideo::Rotation | rotation() const |
void | setEndTime(qint64 time) |
void | setMirrored(bool mirrored) |
void | setRotation(QtVideo::Rotation angle) |
void | setStartTime(qint64 time) |
void | setStreamFrameRate(qreal rate) |
void | setSubtitleText(const QString &text) |
QSize | size() const |
qint64 | startTime() const |
qreal | streamFrameRate() const |
QString | subtitleText() const |
QVideoFrameFormat | surfaceFormat() const |
void | swap(QVideoFrame &other) |
QImage | toImage() const |
void | unmap() |
int | width() const |
bool | operator!=(const QVideoFrame &other) const |
QVideoFrame & | operator=(QVideoFrame &&other) |
QVideoFrame & | operator=(const QVideoFrame &other) |
bool | operator==(const QVideoFrame &other) const |
詳細説明
QVideoFrame は、ビデオ フレームのピクセル データと、フレームに関する情報をカプセル化します。
ビデオフレームは、デコードされたmedia 、camera 、またはプログラムで生成されたものなど、さまざまな場所から取得できます。これらのフレームにおけるピクセルの記述方法は大きく異なり、ピクセル・フォーマットによっては、使いやすさを犠牲にして、より大きな圧縮の機会を提供するものもあります。
ビデオフレームのピクセルコンテンツは、map ()関数を使用してメモリにマッピングすることができる。map ()の呼び出しに成功すると、さまざまな関数を通じてビデオデータにアクセスできるようになる。YUV ピクセル・フォーマットの中には、複数のプレーンでデータを提供するものがある。planeCount ()メソッドは、使用されているプレーン数を返す。
マッピングされている間は、bits ()関数を使用して、各プレーンのビデオデータにアクセスできる。このバッファのサイズはmappedBytes() 関数で与えられ、各行のサイズはbytesPerLine() で与えられる。handle()関数の戻り値は、内部バッファのネイティブAPI(例えばOpenGLテクスチャハンドル)を使用してフレームデータにアクセスするために使用することもできます。
ビデオフレームはタイムスタンプ情報を持つこともできます。これらのタイムスタンプは、フレームの表示を開始するタイミングと停止するタイミングを決定するために使用できます。
QVideoFrame オブジェクトは、かなりの量のメモリやシステムリソースを消費する可能性があるため、アプリケーションで必要な時間以上保持するべきではありません。
注: ビデオフレームはコピーにコストがかかることがあるため、QVideoFrame は明示的に共有されます。
QAbstractVideoBuffer 、QVideoFrameFormat 、およびQVideoFrame::MapModeも参照のこと 。
メンバ型ドキュメント
enum QVideoFrame::HandleType
ビデオ バッファ ハンドルの型を識別します。
定数 | 値 | 説明 |
---|---|---|
QVideoFrame::NoHandle | 0 | バッファはハンドルを持たず、そのデータはバッファをマッピングすることによってのみアクセスできます。 |
QVideoFrame::RhiTextureHandle | 1 | バッファのハンドルは、Qt Rendering Hardware Interface (RHI) によって定義されます。RHIは、OpenGL、Vulkan、Metal、Direct 3Dのような3D APIのためのQtの内部グラフィックス抽象化です。 |
handleType()も参照してください 。
enum QVideoFrame::MapMode
ビデオバッファのデータがどのようにシステムメモリにマッピングされるかを列挙します。
定数 | 値 | 説明 |
---|---|---|
QVideoFrame::NotMapped | 0x00 | ビデオバッファはメモリにマップされない。 |
QVideoFrame::ReadOnly | 0x01 | マップされたメモリには、マップされたときにビデオ バッファからのデータが入力されますが、マップされたメモリの内容は、マップされていないときに破棄される可能性があります。 |
QVideoFrame::WriteOnly | 0x02 | マップされたメモリは、マップされたときに初期化されないが、変更された可能性のある内容は、アンマップされたときにビデオバッファに入力するために使用される。 |
QVideoFrame::ReadWrite | ReadOnly | WriteOnly | マップされたメモリにはビデオバッファのデータが入力され、アンマップされるとビデオバッファにはマップされたメモリの内容が再入力される。 |
メンバ関数ドキュメント
QVideoFrame::QVideoFrame()
NULL ビデオフレームを構築します。
[explicit, since 6.8]
QVideoFrame::QVideoFrame(const QImage &image)
QImage から QVideoFrame を構築します。
QImage::Format がQVideoFrameFormat::PixelFormat のフォーマットの 1 つと一致する場合、QVideoFrame はimage のインスタンスを保持し、ピクセル・フォーマットの変換なしでそのフォーマットを使用します。この場合、ピクセル・データは、元の画像を保持したままWriteOnly
フラグ付きでQVideoFrame::map を呼び出した場合にのみコピーされます。
そうでない場合、QImage::Format がどのビデオフォーマットにも一致しない場合、画像はまず、Qt::AutoColor フラグ付きでQImage::convertedTo() を使って、サポートされている (A)RGB フォーマットに変換されます。この場合、パフォーマンスが低下する可能性がある。
入力QImage に対してQImage::isNull() が真と評価された場合、QVideoFrame は無効となり、QVideoFrameFormat::isValid() は偽を返します。
この関数は Qt 6.8 で導入されました。
QVideoFrameFormat::pixelFormatFromImageFormat()、QImage::convertedTo()、QImage::isNull()も参照してください 。
QVideoFrame::QVideoFrame(const QVideoFrameFormat &format)
与えられたピクセルformat のビデオフレームを構築します。
[explicit, since 6.8]
QVideoFrame::QVideoFrame(std::unique_ptr<QAbstractVideoBuffer> videoBuffer)
QAbstractVideoBuffer から QVideoFrame を構築します。
指定されたvideoBuffer は、再実装されたインスタンスQAbstractVideoBuffer を指します。このインスタンスは、事前に割り当てられたカスタム・ビデオ・バッファを含むことが期待され、GPU コンテンツ用にQAbstractVideoBuffer::format 、QAbstractVideoBuffer::map 、およびQAbstractVideoBuffer::unmap を実装する必要があります。
videoBuffer が NULL または無効なQVideoFrameFormat を取得した場合、コンストラクタは無効なビデオフレームを作成します。
作成されたフレームは、指定されたビデオバッファの所有権をその有効期間中保持します。QVideoFrame が共有プライベートオブジェクトを介して実装されていることを考慮すると、指定されたビデオバッファは、作成されたビデオフレームの最後のコピーが破棄されると破棄されます。
ビデオフレームがQMediaRecorder またはレンダリングパイプラインに渡された場合、フレームの寿命は未定義であり、メディアレコーダは別のスレッドでフレームを破棄できます。
QVideoFrame には、QVideoFrameFormat のインスタンスが含まれます。setStreamFrameRate 、setMirrored 、またはsetRotation を呼び出すと、内部のフォーマットを変更できます。surfaceFormat は、切り離されたインスタンスを返します。
この関数は Qt 6.8 で導入されました。
QAbstractVideoBuffer およびQVideoFrameFormatも参照してください 。
QVideoFrame::QVideoFrame(const QVideoFrame &other)
otherQVideoFrame は明示的に共有されるため、これら 2 つのインスタンスは同じフレームを反映します。
[noexcept]
QVideoFrame::QVideoFrame(QVideoFrame &&other)
other から移動して QVideoFrame を構築します。
[noexcept]
QVideoFrame::~QVideoFrame()
ビデオ・フレームを破棄します。
uchar *QVideoFrame::bits(int plane)
plane のフレーム・データ・バッファの開始位置へのポインタを返します。
この値は、フレーム・データがmapped にある間のみ有効です。
このポインタを介してアクセスされたデータ(書き込みアクセスでマッピングされた場合)に加えられた変更は、unmap ()が呼び出されたとき、およびバッファが書き込み用にマッピングされたときにのみ、永続化されることが保証されます。
map(),mappedBytes(),bytesPerLine(),planeCount()も参照のこと 。
const uchar *QVideoFrame::bits(int plane) const
plane のフレーム・データ・バッファの開始位置へのポインタを返す。
この値は、フレームデータがmapped の間のみ有効です。
バッファが読み込みアクセスでマップされていない場合、このバッファの内容は初期化されていません。
map()、mappedBytes()、bytesPerLine()、planeCount()も参照 。
int QVideoFrame::bytesPerLine(int plane) const
plane の走査線のバイト数を返す。
この値は、フレーム・データがmapped の間のみ有効である。
bits()、map()、mappedBytes()、planeCount()も参照のこと 。
qint64 QVideoFrame::endTime() const
フレームが表示を停止する提示時間(マイクロ秒単位)を返します。
無効な時刻は -1 で表されます。
setEndTime()も参照 。
QVideoFrame::HandleType QVideoFrame::handleType() const
ビデオフレームのハンドルの型を返します。
ハンドルの型は、フレームがメモリベースであることを意味するNoHandle か、RHI テクスチャのいずれかです。
int QVideoFrame::height() const
ビデオフレームの高さを返します。
bool QVideoFrame::isMapped() const
ビデオフレームのコンテンツが現在システムメモリにマップされているかどうかを識別します。
これは、フレームのMapMode がQVideoFrame::NotMapped と等しくないことをチェックする便利な関数です。
ビデオフレームのコンテンツがシステムメモリにマッピングされている場合は true を返し、そうでない場合は false を返します。
mapMode() およびQVideoFrame::MapModeも参照のこと 。
bool QVideoFrame::isReadable() const
ビデオフレームのマッピングされたコンテンツが、マッピングされたときにフレームから読み込まれたかどうかを識別します。
これは、MapMode にQVideoFrame::WriteOnly フラグが含まれているかどうかをチェックする便利な関数である。
マップされたメモリの内容がビデオフレームから読み込まれた場合は true を返し、そうでない場合は false を返します。
mapMode() およびQVideoFrame::MapModeも参照のこと 。
bool QVideoFrame::isValid() const
ビデオフレームが有効かどうかを識別します。
無効なフレームにはビデオバッファがありません。
フレームが有効な場合は true を返し、無効な場合は false を返します。
bool QVideoFrame::isWritable() const
ビデオフレームのマッピングされた内容が、そのフレームがマッピング解除されたときに保持されるかどうかを識別します。
これは、MapMode にQVideoFrame::WriteOnly フラグが含まれているかどうかをチェックする便利な関数です。
ビデオフレームがマッピング解除されたときに更新される場合は true を返し、そうでない場合は false を返します。
注意: 読み取り専用モードでマッピングされたフレームのデータを変更した結果は未定義です。バッファの実装によっては、変更が永続化されたり、共有バッファが変更されたりする可能性があります。
mapMode() およびQVideoFrame::MapModeも参照して ください。
bool QVideoFrame::map(QVideoFrame::MapMode mode)
ビデオフレームの内容をシステム(CPUアドレス指定可能)メモリにマッピングする。
ビデオフレームデータがビデオメモリやアクセスできないメモリに格納されている場合があるため、ピクセルデータにアクセスする前にフレームをマッピングする必要があります。そのため、ピクセルデータにアクセスする前にフレームをマッピングする必要がある。
mapmode は、マップされたメモリの内容をフレームから読み込んだり、フレームに書き込んだりするかどうかを示す。map mode にQVideoFrame::ReadOnly
フラグが含まれている場合、マップされたメモリには、最初にマップされたときにビデオフレームの内容が書き込まれます。マップモードにQVideoFrame::WriteOnly
フラグが含まれている場合、マップ解除時に、変更された可能性のあるマップ済みメモリの内容がフレームに書き戻されます。
マップされている間は、bits() 関数によって返されるポインタを通じて、ビデオフレームのコンテンツに直接アクセスできます。
データへのアクセスが不要になったら、必ずunmap() 関数を呼び出してマップされたメモリを解放し、ビデオフレームの内容を更新してください。
ビデオフレームが読み取り専用モードでマッピングされている場合、読み取り専用モードで複数回マッピングすることが許されます(そして、それに対応する回数だけマッピングを解除します)。それ以外の場合は、2回目のマッピングを行う前に、まずフレームのマッピングを解除する必要がある。
注意: 読み取り専用にマッピングされたメモリへの書き込みは未定義であり、共有データの変更やクラッシュを引き起こす可能性があります。
与えられたmode のメモリにフレームがマップされた場合は true を返し、そうでない場合は false を返します。
QVideoFrame::MapMode QVideoFrame::mapMode() const
ビデオフレームがシステムメモリにマッピングされたモードを返します。
map() およびQVideoFrame::MapModeも参照 。
int QVideoFrame::mappedBytes(int plane) const
マップされたフレームデータのプレーンplane が占めるバイト数を返す。
この値は、フレームデータがmapped の間のみ有効である。
map()も参照 。
bool QVideoFrame::mirrored() const
表示前にフレームを垂直軸周りにミラーリングすべきかどうかを返します。
QVideoFrame
の変換、特に回転とミラーリングは、ビデオフレームの表示にのみ使用され、QVideoFrameFormat によって決定される表面変換の上に適用されます。ミラーリングは回転の後に適用される。
ミラーリングは通常、モバイル機器のフロントカメラからのビデオフレームに必要です。
setMirrored()も参照 。
void QVideoFrame::paint(QPainter *painter, const QRectF &rect, const QVideoFrame::PaintOptions &options)
QPainter,painter を使用して、このQVideoFrame をrect にレンダリングします。 PaintOptionsoptions を使用して、背景色と、rect を動画で塗りつぶす方法を指定できます。
注: このメソッドを使用する場合、レンダリングは通常ハードウェア アクセラレーションなしで行われます。
QVideoFrameFormat::PixelFormat QVideoFrame::pixelFormat() const
この動画フレームのピクセル形式を返します。
int QVideoFrame::planeCount() const
ビデオフレーム内のプレーン数を返します。
map()も参照 。
QtVideo::Rotation QVideoFrame::rotation() const
表示前にフレームを時計回りに回転させる角度を返します。
QVideoFrame
の変換、特に回転とミラーリングは、ビデオフレームを表示するためだけに使用され、QVideoFrameFormat によって決定される表面変換の上に適用されます。回転はミラーリングの前に適用される。
setRotation()も参照 。
void QVideoFrame::setEndTime(qint64 time)
フレームの表示を停止するプレゼンテーションtime (マイクロ秒単位)を設定する。
無効な時間は -1 で表されます。
endTime() も参照 。
void QVideoFrame::setMirrored(bool mirrored)
フレームを表示する前に、縦軸を中心にmirrored するかどうかを設定します。
QVideoFrame
の変換、特に回転とミラーリングは、ビデオフレームの表示にのみ使用され、QVideoFrameFormat で決定される表面変換の上に適用されます。ミラーリングは回転の後に適用される。
ミラーリングは通常、モバイルデバイスのフロントカメラからのビデオフレームに必要です。
デフォルト値はfalse
。
mirrored()も参照 。
void QVideoFrame::setRotation(QtVideo::Rotation angle)
angle 表示前にフレームを時計回りに回転させるかどうかを設定します。
QVideoFrame
の変換、特に回転とミラーリングは、ビデオフレームの表示にのみ使用され、QVideoFrameFormat で決定される表面変換の上に適用されます。回転はミラーリングの前に適用される。
デフォルト値はQtVideo::Rotation::None
。
rotation()も参照 。
void QVideoFrame::setStartTime(qint64 time)
フレームを最初に表示するプレゼンテーションtime (マイクロ秒単位)を設定します。
無効な時間は -1 で表されます。
startTime() も参照 。
void QVideoFrame::setStreamFrameRate(qreal rate)
ビデオストリームのフレームrate を、1 秒あたりのフレーム数で設定する。
streamFrameRate() も参照 。
void QVideoFrame::setSubtitleText(const QString &text)
この動画フレームとともにレンダリングされる字幕テキストをtext に設定する。
subtitleText()も参照 。
QSize QVideoFrame::size() const
動画フレームの寸法を返します。
qint64 QVideoFrame::startTime() const
このフレームが表示されるべき提示時間(マイクロ秒単位)を返します。
無効な時刻は -1 で表されます。
setStartTime()も参照 。
qreal QVideoFrame::streamFrameRate() const
フレームレート関数は、ビデオストリームのフレームレートを 1 秒あたりのフレーム数で返します。
setStreamFrameRate()も参照 。
QString QVideoFrame::subtitleText() const
字幕テキスト この動画フレームとともにレンダリングされるべき字幕テキストを返します。
setSubtitleText() も参照 。
QVideoFrameFormat QVideoFrame::surfaceFormat() const
この動画フレームのサーフェスフォーマットを返します。
[noexcept]
void QVideoFrame::swap(QVideoFrame &other)
other と現在の動画フレームを入れ替えます。
QImage QVideoFrame::toImage() const
現在の動画フレームを画像に変換します。
変換は、現在のピクセル データと QVideoFrame::surfaceFormat に基づいて行われます。フレームの変換は、プレゼンテーションのためだけに適用されるため、結果には影響しません。
void QVideoFrame::unmap()
map() 関数によってマップされたメモリを解放します。
MapMode にQVideoFrame::WriteOnly フラグが含まれていた場合、マップされたメモリの現在の内容がビデオフレームに永続化されます。
map() 関数が失敗した場合は、unmap() を呼び出してはならない。
map()も参照のこと 。
int QVideoFrame::width() const
ビデオフレームの幅を返す。
bool QVideoFrame::operator!=(const QVideoFrame &other) const
このQVideoFrame とother が同じフレームを反映していない場合、true
を返す。
[noexcept]
QVideoFrame &QVideoFrame::operator=(QVideoFrame &&other)
other をこのQVideoFrame に移動する。
QVideoFrame &QVideoFrame::operator=(const QVideoFrame &other)
other の内容をこのビデオフレームに割り当てる。QVideoFrame は明示的に共有されているので、これら 2 つのインスタンスは同じフレームを反映する。
bool QVideoFrame::operator==(const QVideoFrame &other) const
このQVideoFrame とother が同じフレームを反映している場合、true
を返します。
©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。