QVideoFrame Class
QVideoFrame クラスは、ビデオデータの 1 フレームを表します。詳細...
| ヘッダー: | #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 レンダリング・ハードウェア・インターフェース (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 に列挙されたフォーマットのいずれかに一致する場合、QVideoFrameはimage のインスタンスを保持し、ピクセルフォーマットの変換を行わずにそのフォーマットを使用します。この場合、元の画像を保持したまま、WriteOnly フラグを指定してQVideoFrame::map を呼び出した場合にのみ、ピクセルデータがコピーされます。
それ以外の場合、QImage::Format がどのビデオフォーマットにも一致しないときは、QImage::convertedTo()をQt::AutoColor フラグ付きで呼び出して、画像はまずサポートされている(A)RGBフォーマットに変換されます。これにより、パフォーマンスの低下が生じる可能性があります。
入力されたQImage に対してQImage::isNull()がtrueと評価された場合、QVideoFrameは無効となり、QVideoFrameFormat::isValid()はfalseを返します。
この関数は 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)
other の浅いコピーを作成します。QVideoFrameは明示的に共有されているため、これら2つのインスタンスは同じフレームを反映することになります。
[constexpr noexcept default] 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がアドレス指定可能な)メモリにマッピングします。
場合によっては、ビデオフレームデータがビデオメモリやその他のアクセス不可能なメモリに格納されていることがあるため、ピクセルデータにアクセスする前にフレームをマッピングする必要があります。これには内容のコピーを伴う可能性があるため、必要がない限りマッピングやアンマッピングは避けてください。
マップ関数 `mode ` は、マップされたメモリの内容をフレームから読み込むか、フレームへ書き込むかを指定します。マップモードに `QVideoFrame::ReadOnly ` フラグが含まれている場合、マップされたメモリには、最初のマップ時にビデオフレームの内容が格納されます。マップモードに `QVideoFrame::WriteOnly ` フラグが含まれている場合、変更された可能性があるマップされたメモリの内容は、アンマップ時にフレームへ書き戻されます。
マップされている間、ビデオフレームの内容には、bits() 関数が返すポインタを介して直接アクセスできます。
データへのアクセスが不要になった場合は、必ずunmap() 関数を呼び出して、マップされたメモリを解放し、必要に応じてビデオフレームの内容を更新してください。
ビデオフレームが読み取り専用モードでマップされている場合、読み取り専用モードで複数回マップすること(およびそれに対応する回数だけマップを解除すること)は許容されます。それ以外の場合は、2 回目にマップする前に、まずフレームのマップを解除する必要があります。
注: 読み取り専用としてマップされたメモリへの書き込みは 未定義であり、共有データの変更やクラッシュを引き起こす可能性があります。
フレームが指定されたmode でメモリにマップされていた場合はtrueを返し、そうでない場合はfalseを返します。
関連項目: ` unmap()`、`mapMode()`、および `bits()`。
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 としてレンダリングします。PaintOptions(options )を使用すると、背景色や、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
現在のビデオフレームを画像に変換します。
この変換は、現在のピクセルデータとsurface format に基づいて行われます。フレームへの変換処理は表示目的のみに適用されるため、結果には影響しません。
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 を返します。
© 2026 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.