From 07f5cf3a65287ed4e59c9a0ce6e2975e8888d353 Mon Sep 17 00:00:00 2001 From: initramfs Date: Fri, 5 Aug 2016 08:43:15 +0800 Subject: [PATCH] refactor(video): update code and documentation to honour QSize validity --- src/core/coreav.cpp | 2 +- src/video/videoframe.cpp | 28 +++++++++++++++++----------- src/video/videoframe.h | 6 +++--- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/core/coreav.cpp b/src/core/coreav.cpp index a069ceee9..7ffaecca3 100644 --- a/src/core/coreav.cpp +++ b/src/core/coreav.cpp @@ -360,7 +360,7 @@ void CoreAV::sendCallVideo(uint32_t callId, std::shared_ptr vframe) call.nullVideoBitrate = false; } - ToxYUVFrame frame = vframe->toToxAVFrame(); + ToxYUVFrame frame = vframe->toToxYUVFrame(); if(frame.width == 0 || frame.height == 0) { diff --git a/src/video/videoframe.cpp b/src/video/videoframe.cpp index 87c93d098..a7cadf3d9 100644 --- a/src/video/videoframe.cpp +++ b/src/video/videoframe.cpp @@ -293,8 +293,8 @@ void VideoFrame::releaseFrame() * If a given frame does not exist, this function will perform appropriate conversions to * return a frame that fulfills the given parameters. * - * @param frameSize the dimensions of the frame to get. If frame size is 0, defaults to source - * frame size. + * @param frameSize the dimensions of the frame to get. Defaults to source frame size if frameSize + * is invalid. * @param pixelFormat the desired pixel format of the frame. * @param requireAligned true if the returned frame must be frame aligned, false if not. * @return a pointer to a AVFrame with the given parameters or nullptr if the VideoFrame is no @@ -302,6 +302,11 @@ void VideoFrame::releaseFrame() */ const AVFrame* VideoFrame::getAVFrame(QSize frameSize, const int pixelFormat, const bool requireAligned) { + if(!frameSize.isValid()) + { + frameSize = sourceDimensions.size(); + } + // Since we are retrieving the AVFrame* directly, we merely need to pass the arguement through const std::function converter = [](AVFrame* const frame) { @@ -321,14 +326,14 @@ const AVFrame* VideoFrame::getAVFrame(QSize frameSize, const int pixelFormat, co * The VideoFrame will be scaled into the RGB24 pixel format along with the given * dimension. * - * @param frameSize the given frame size of QImage to generate. If frame size is 0, defaults to - * source frame size. + * @param frameSize the given frame size of QImage to generate. Defaults to source frame size if + * frameSize is invalid. * @return a QImage that represents this VideoFrame, sharing it's buffers or a null image if * this VideoFrame is no longer valid. */ QImage VideoFrame::toQImage(QSize frameSize) { - if(frameSize.width() == 0 && frameSize.height() == 0) + if(!frameSize.isValid()) { frameSize = sourceDimensions.size(); } @@ -349,14 +354,15 @@ QImage VideoFrame::toQImage(QSize frameSize) * The given ToxAVFrame will be frame aligned under a pixel format of planar YUV with a chroma * subsampling format of 4:2:0 (i.e. AV_PIX_FMT_YUV420P). * - * @param frameSize the given frame size of ToxAVFrame to generate. If frame size is 0, defaults + * @param frameSize the given frame size of ToxAVFrame to generate. Defaults to source frame size + * if frameSize is invalid. * to source frame size. * @return a ToxAVFrame structure that represents this VideoFrame, sharing it's buffers or an * empty structure if this VideoFrame is no longer valid. */ -ToxYUVFrame VideoFrame::toToxAVFrame(QSize frameSize) +ToxYUVFrame VideoFrame::toToxYUVFrame(QSize frameSize) { - if(frameSize.width() == 0 && frameSize.height() == 0) + if(!frameSize.isValid()) { frameSize = sourceDimensions.size(); } @@ -386,7 +392,7 @@ ToxYUVFrame VideoFrame::toToxAVFrame(QSize frameSize) * Note: this function differs from getAVFrame() in that it returns a nullptr if no frame was * found. * - * @param dimensions the dimensions of the frame. + * @param dimensions the dimensions of the frame, must be valid. * @param pixelFormat the desired pixel format of the frame. * @param requireAligned true if the frame must be frame aligned, false otherwise. * @return a pointer to a AVFrame with the given parameters or nullptr if no such frame was @@ -425,7 +431,7 @@ AVFrame* VideoFrame::retrieveAVFrame(const QSize& dimensions, const int pixelFor * * This function is not thread-safe and must be called from a thread-safe context. * - * @param dimensions the required dimensions for the frame. + * @param dimensions the required dimensions for the frame, must be valid. * @param pixelFormat the required pixel format for the frame. * @param requireAligned true if the generated frame needs to be frame aligned, false otherwise. * @return an AVFrame with the given specifications. @@ -499,7 +505,7 @@ AVFrame* VideoFrame::generateAVFrame(const QSize& dimensions, const int pixelFor * This function is not thread-safe and must be called from a thread-safe context. * * @param frame the given frame to store. - * @param dimensions the dimensions of the frame. + * @param dimensions the dimensions of the frame, must be valid. * @param pixelFormat the pixel format of the frame. */ void VideoFrame::storeAVFrame(AVFrame* frame, const QSize& dimensions, const int pixelFormat) diff --git a/src/video/videoframe.h b/src/video/videoframe.h index 219f4be59..3a1d938ef 100644 --- a/src/video/videoframe.h +++ b/src/video/videoframe.h @@ -76,8 +76,8 @@ public: void releaseFrame(); const AVFrame* getAVFrame(QSize frameSize, const int pixelFormat, const bool requireAligned); - QImage toQImage(QSize frameSize = {0, 0}); - ToxYUVFrame toToxAVFrame(QSize frameSize = {0, 0}); + QImage toQImage(QSize frameSize = {}); + ToxYUVFrame toToxYUVFrame(QSize frameSize = {}); /** * @brief Returns the ID for the given frame. @@ -237,7 +237,7 @@ private: * a null object of type T that represents an invalid/null object for when the generation * process fails (e.g. when the VideoFrame is no longer valid). * - * @param dimensions the dimensions of the frame. + * @param dimensions the dimensions of the frame, must be valid. * @param pixelFormat the pixel format of the frame. * @param requireAligned true if the generated frame needs to be frame aligned, false otherwise. * @param objectConstructor a std::function that takes the generated AVFrame and converts it