이 페이지에서

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 픽셀 형식은 데이터를 여러 평면(plane)으로 제공합니다. planeCount() 메서드는 사용 중인 평면의 수를 반환합니다.

매핑된 상태에서 각 플레인의 비디오 데이터는 bits() 함수를 사용하여 접근할 수 있으며, 이 함수는 버퍼에 대한 포인터를 반환합니다. 이 버퍼의 크기는 mappedBytes() 함수에 의해 지정되며, 각 라인의 크기는 bytesPerLine() 함수에 의해 지정됩니다. handle() 함수의 반환 값은 내부 버퍼의 네이티브 API(예: OpenGL 텍스처 핸들)를 사용하여 프레임 데이터에 접근하는 데에도 사용할 수 있습니다.

비디오 프레임에는 타임스탬프 정보가 연관될 수도 있습니다. 이러한 타임스탬프를 사용하여 프레임 표시를 시작하고 중지할 시점을 결정할 수 있습니다.

QVideoFrame 객체는 상당한 양의 메모리나 시스템 리소스를 소모할 수 있으므로, 애플리케이션에서 필요한 기간 이상으로 보유해서는 안 됩니다.

참고: 비디오 프레임을 복사하는 데 많은 비용이 들 수있으므로 , QVideoFrame은 명시적으로 공유되므로 비디오 프레임에 대한 모든 변경 사항은 복사본에도 적용됩니다.

QAbstractVideoBuffer, QVideoFrameFormat 및 QVideoFrame::MapMode도 참조하십시오 .

멤버 유형 문서

enum QVideoFrame::HandleType

비디오 버퍼 핸들의 유형을 식별합니다.

상수값설명
QVideoFrame::NoHandle0버퍼에 핸들이 없으며, 버퍼를 매핑해야만 데이터에 접근할 수 있습니다.
QVideoFrame::RhiTextureHandle1버퍼의 핸들은 Qt 렌더링 하드웨어 인터페이스(RHI)에 의해 정의됩니다. RHI는 OpenGL, Vulkan, Metal 및 Direct 3D와 같은 3D API를 위한 Qt의 내부 그래픽 추상화 계층입니다.

handleType()도 참조하십시오 .

enum QVideoFrame::MapMode

비디오 버퍼의 데이터가 시스템 메모리에 어떻게 매핑되는지 설명합니다.

상수값설명
QVideoFrame::NotMapped0x00비디오 버퍼가 메모리에 매핑되지 않습니다.
QVideoFrame::ReadOnly0x01매핑 시 매핑된 메모리에는 비디오 버퍼의 데이터가 채워지지만, 매핑 해제 시 매핑된 메모리의 내용은 삭제될 수 있습니다.
QVideoFrame::WriteOnly0x02매핑된 메모리는 매핑될 때 초기화되지 않은 상태이지만, 매핑이 해제될 때 수정되었을 수도 있는 내용이 비디오 버퍼를 채우는 데 사용됩니다.
QVideoFrame::ReadWriteReadOnly | WriteOnly매핑된 메모리는 비디오 버퍼의 데이터로 채워지며, 매핑이 해제되면 비디오 버퍼는 매핑된 메모리의 내용으로 다시 채워집니다.

mapMode() 및 map()도 참조하십시오 .

멤버 함수 문서

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 가 어떤 비디오 포맷과도 일치하지 않는 경우, 이미지는 먼저 Qt::AutoColor 플래그를 사용하여 QImage::convertedTo()를 통해 지원되는 (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이 명시적으로 공유되므로, 이 두 인스턴스는 동일한 프레임을 반영하게 됩니다.

[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() 함수를 호출하여 매핑된 메모리를 해제하고, 필요한 경우 비디오 프레임 내용을 업데이트해야 합니다.

비디오 프레임이 읽기 전용 모드로 매핑된 경우, 읽기 전용 모드로 여러 번 매핑하는 것(그리고 그에 상응하는 횟수만큼 매핑 해제하는 것)이 허용됩니다. 그 외의 모든 경우에는 두 번째 매핑을 수행하기 전에 먼저 프레임의 매핑을 해제해야 합니다.

참고: 읽기 전용으로 매핑된 메모리에쓰기 작업을 수행하면 정의되지 않은 동작이 발생하며, 공유 데이터의 변경이나 프로그램 충돌을 초래할 수 있습니다.

프레임이 주어진 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 을 초당 프레임 수(fps)로 설정합니다.

streamFrameRate()도 참조하십시오 .

void QVideoFrame::setSubtitleText(const QString &text)

이 비디오 프레임과 함께 표시될 자막 텍스트를 text 로 설정합니다.

subtitleText()도 참조하십시오 .

QSize QVideoFrame::size() const

비디오 프레임의 크기를 반환합니다.

qint64 QVideoFrame::startTime() const

프레임을 표시해야 하는 표시 시간(마이크로초 단위)을 반환합니다.

유효하지 않은 시간은 -1로 표시됩니다.

setStartTime()도 참조하십시오 .

qreal QVideoFrame::streamFrameRate() const

비디오 스트림의 프레임 속도를 초당 프레임 수(fps) 단위로 반환합니다.

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 가 명시적으로 공유되어 있으므로, 이 두 인스턴스는 동일한 프레임을 반영하게 됩니다.

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.