QVideoFrame Class
QVideoFrame クラスは、ビデオデータのフレームを表します。詳細...
ヘッダー | #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()
ヌル・ビデオ・フレームを構築します。
[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 を秒あたりのフレーム数で設定する。
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
を返す。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.