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 텍스처 핸들)를 사용하여 프레임 데이터에 액세스하는 데에도 사용할 수 있습니다.
비디오 프레임에는 타임스탬프 정보가 연관되어 있을 수도 있습니다. 이러한 타임스탬프는 프레임 표시 시작 및 중지 시기를 결정하는 데 사용할 수 있습니다.
Q비디오프레임 개체는 상당한 양의 메모리 또는 시스템 리소스를 소모할 수 있으므로 애플리케이션에서 요구하는 것보다 오래 보유해서는 안 됩니다.
참고: 비디오 프레임은 복사 비용이 많이 들 수 있으므로 QVideoFrame은 명시적으로 공유되므로 비디오 프레임에 대한 모든 변경 사항은 모든 복사본에도 적용됩니다.
QAbstractVideoBuffer, QVideoFrameFormat, 및 QVideoFrame::MapMode 를참조하세요 .
멤버 유형 문서
enum QVideoFrame::HandleType
비디오 버퍼 핸들의 유형을 식별합니다.
Constant | 값 | 설명 |
---|---|---|
QVideoFrame::NoHandle | 0 | 버퍼에는 핸들이 없으며, 버퍼를 매핑해야만 데이터에 액세스할 수 있습니다. |
QVideoFrame::RhiTextureHandle | 1 | 버퍼의 핸들은 Qt 렌더링 하드웨어 인터페이스(RHI)에 의해 정의됩니다. RHI는 OpenGL, Vulkan, Metal, Direct 3D와 같은 3D API를 위한 Qt의 내부 그래픽 추상화입니다. |
handleType()도 참조하십시오 .
enum QVideoFrame::MapMode
비디오 버퍼의 데이터가 시스템 메모리에 매핑되는 방법을 열거합니다.
Constant | 값 | 설명 |
---|---|---|
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 의 형식 중 하나와 일치하면 QVideoFrame은 image 의 인스턴스를 보유하며 픽셀 형식 변환 없이 해당 형식을 사용합니다. 이 경우 원본 이미지를 유지하면서 WriteOnly
플래그와 함께 QVideoFrame::map 을 호출하는 경우에만 픽셀 데이터가 복사됩니다.
그렇지 않고 QImage::Format 에 일치하는 동영상 형식이 없는 경우, 먼저 QImage::convertedTo()에 Qt::AutoColor 플래그를 사용하여 이미지를 지원되는 (A)RGB 형식으로 변환합니다. 이 경우 성능 저하가 발생할 수 있습니다.
QImage::isNull()가 QImage 입력에 대해 참으로 평가되면 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)
other 의 얕은 복사본을 생성합니다. QVideoFrame이 명시적으로 공유되므로 이 두 인스턴스는 동일한 프레임을 반영합니다.
[noexcept]
QVideoFrame::QVideoFrame(QVideoFrame &&other)
에서 이동하여 QVideoFrame을 구성합니다 other.
[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 과 같지 않은지 확인하는 편의 함수입니다.
비디오 프레임의 콘텐츠가 시스템 메모리에 매핑되어 있으면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.
mapMode() 및 QVideoFrame::MapMode도 참조하세요 .
bool QVideoFrame::isReadable() const
동영상 프레임이 매핑될 때 프레임에서 매핑된 콘텐츠를 읽었는지 확인합니다.
MapMode 에 QVideoFrame::WriteOnly 플래그가 포함되어 있는지 확인하는 편의 함수입니다.
매핑된 메모리의 콘텐츠를 비디오 프레임에서 읽은 경우 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.
mapMode() 및 QVideoFrame::MapMode 을참조하세요 .
bool QVideoFrame::isValid() const
비디오 프레임이 유효한지 여부를 식별합니다.
유효하지 않은 프레임에는 연결된 비디오 버퍼가 없습니다.
프레임이 유효하면 참을 반환하고 유효하지 않으면 거짓을 반환합니다.
bool QVideoFrame::isWritable() const
비디오 프레임의 매핑된 콘텐츠가 프레임이 매핑 해제될 때 지속될지 여부를 식별합니다.
MapMode 에 QVideoFrame::WriteOnly 플래그가 포함되어 있는지 확인하는 편의 함수입니다.
매핑 해제 시 동영상 프레임이 업데이트되면 참을 반환하고, 그렇지 않으면 거짓을 반환합니다.
참고: 읽기 전용 모드로 매핑된 프레임의 데이터를 변경하면 결과가 정의되지 않습니다. 버퍼 구현에 따라 변경 사항이 유지되거나 공유 버퍼가 변경될 수 있습니다.
mapMode() 및 QVideoFrame::MapMode 을참조하세요 .
bool QVideoFrame::map(QVideoFrame::MapMode mode)
비디오 프레임의 내용을 시스템(CPU 주소 지정 가능) 메모리에 매핑합니다.
경우에 따라 비디오 프레임 데이터가 비디오 메모리 또는 기타 액세스할 수 없는 메모리에 저장될 수 있으므로 픽셀 데이터에 액세스하기 전에 프레임을 매핑해야 합니다. 여기에는 콘텐츠 복사가 포함될 수 있으므로 필요한 경우가 아니면 매핑 및 매핑 해제를 피하세요.
mode 맵은 매핑된 메모리의 콘텐츠를 프레임에서 읽거나 프레임에 써야 하는지 여부를 나타냅니다. 지도 모드에 QVideoFrame::ReadOnly
플래그가 포함되어 있으면 처음 매핑할 때 매핑된 메모리가 동영상 프레임의 콘텐츠로 채워집니다. 맵 모드에 QVideoFrame::WriteOnly
플래그가 포함된 경우 매핑이 해제되면 수정되었을 가능성이 있는 매핑된 메모리의 콘텐츠가 프레임에 다시 기록됩니다.
매핑된 상태에서는 bits() 함수가 반환하는 포인터를 통해 비디오 프레임의 콘텐츠에 직접 액세스할 수 있습니다.
데이터에 대한 액세스가 더 이상 필요하지 않은 경우 unmap() 함수를 호출하여 매핑된 메모리를 해제하고 비디오 프레임 콘텐츠를 업데이트할 수 있습니다.
비디오 프레임이 읽기 전용 모드로 매핑된 경우, 읽기 전용 모드에서 여러 번 매핑하고 해당 횟수만큼 매핑을 해제하는 것이 허용됩니다. 다른 모든 경우에는 두 번째로 매핑하기 전에 먼저 프레임을 매핑 해제해야 합니다.
참고: 읽기 전용으로 매핑된 메모리에 쓰기는 정의되지 않았으므로 공유 데이터가 변경되거나 충돌이 발생할 수 있습니다.
주어진 mode 에 프레임이 메모리에 매핑된 경우 참을 반환하고 그렇지 않으면 거짓을 반환합니다.
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 을 초당 프레임으로 설정합니다.
streamFrameRate()도 참조하세요 .
void QVideoFrame::setSubtitleText(const QString &text)
이 비디오 프레임과 함께 렌더링할 자막 텍스트를 text 로 설정합니다.
subtitleText()도 참조하세요 .
QSize QVideoFrame::size() const
동영상 프레임의 치수를 반환합니다.
qint64 QVideoFrame::startTime() const
프레임을 표시해야 하는 프레젠테이션 시간(마이크로초 단위)을 반환합니다.
유효하지 않은 시간은 -1로 표시됩니다.
setStartTime()도 참조하세요 .
qreal QVideoFrame::streamFrameRate() const
동영상 스트림의 프레임 속도를 초당 프레임 수로 반환합니다.
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 이 명시적으로 공유되므로 이 두 인스턴스는 동일한 프레임을 반영합니다.
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.