@@ -150,6 +150,54 @@ int VideoFrame::height() const
150150 return RAW_GET (height, 0 );
151151}
152152
153+ template <typename LookupProc>
154+ static PixelFormat adjustJpegPixelFormat (AVFrame *frame, LookupProc&& proc)
155+ {
156+ return frame
157+ ? static_cast <AVPixelFormat>(std::exchange (frame->format , proc (static_cast <AVPixelFormat>(frame->format ))))
158+ : AV_PIX_FMT_NONE ;
159+ }
160+
161+ PixelFormat VideoFrame::adjustFromJpegPixelFormat ()
162+ {
163+ return adjustJpegPixelFormat (m_raw, [](AVPixelFormat pixfmt) {
164+ switch (pixfmt) {
165+ case AV_PIX_FMT_YUVJ420P :
166+ return AV_PIX_FMT_YUV420P ;
167+ case AV_PIX_FMT_YUVJ411P :
168+ return AV_PIX_FMT_YUV411P ;
169+ case AV_PIX_FMT_YUVJ422P :
170+ return AV_PIX_FMT_YUV422P ;
171+ case AV_PIX_FMT_YUVJ444P :
172+ return AV_PIX_FMT_YUV444P ;
173+ case AV_PIX_FMT_YUVJ440P :
174+ return AV_PIX_FMT_YUV440P ;
175+ default :
176+ return pixfmt;
177+ }
178+ });
179+ }
180+
181+ PixelFormat VideoFrame::adjustToJpegPixelFormat ()
182+ {
183+ return adjustJpegPixelFormat (m_raw, [](AVPixelFormat pixfmt) {
184+ switch (pixfmt) {
185+ case AV_PIX_FMT_YUV420P :
186+ return AV_PIX_FMT_YUVJ420P ;
187+ case AV_PIX_FMT_YUV411P :
188+ return AV_PIX_FMT_YUVJ411P ;
189+ case AV_PIX_FMT_YUV422P :
190+ return AV_PIX_FMT_YUVJ422P ;
191+ case AV_PIX_FMT_YUV444P :
192+ return AV_PIX_FMT_YUVJ444P ;
193+ case AV_PIX_FMT_YUV440P :
194+ return AV_PIX_FMT_YUVJ440P ;
195+ default :
196+ return pixfmt;
197+ }
198+ });
199+ }
200+
153201bool VideoFrame::isKeyFrame () const
154202{
155203#if AVCPP_API_FRAME_KEY
0 commit comments