diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Video/MMALFFmpeg.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Video/MMALFFmpeg.cpp index 97ebe5f4b0b9f..b610debf552d7 100644 --- a/xbmc/cores/VideoPlayer/DVDCodecs/Video/MMALFFmpeg.cpp +++ b/xbmc/cores/VideoPlayer/DVDCodecs/Video/MMALFFmpeg.cpp @@ -96,6 +96,8 @@ void CMMALYUVBuffer::GetStrides(int(&strides)[YuvImage::MAX_PLANES]) strides[0] = geo.stride_y; strides[1] = geo.stride_c; strides[2] = geo.stride_c; + if (geo.stripes > 1) + strides[3] = geo.height_y + geo.height_c; // abuse: strides[3] = stripe stride } void CMMALYUVBuffer::SetDimensions(int width, int height, const int (&strides)[YuvImage::MAX_PLANES]) @@ -273,7 +275,7 @@ CDVDVideoCodec::VCReturn CDecoder::Decode(AVCodecContext* avctx, AVFrame* frame) if (frame) { - if ((frame->format != AV_PIX_FMT_YUV420P && frame->format != AV_PIX_FMT_BGR0 && frame->format != AV_PIX_FMT_RGB565LE) || + if ((frame->format != AV_PIX_FMT_YUV420P && frame->format != AV_PIX_FMT_SAND128 && frame->format != AV_PIX_FMT_BGR0 && frame->format != AV_PIX_FMT_RGB565LE) || frame->buf[1] != nullptr || frame->buf[0] == nullptr) { CLog::Log(LOGERROR, "%s::%s frame format invalid format:%d buf:%p,%p", CLASSNAME, __func__, frame->format, frame->buf[0], frame->buf[1]); diff --git a/xbmc/cores/VideoPlayer/Process/VideoBuffer.h b/xbmc/cores/VideoPlayer/Process/VideoBuffer.h index a57ab7dc91821..ae5708a16323b 100644 --- a/xbmc/cores/VideoPlayer/Process/VideoBuffer.h +++ b/xbmc/cores/VideoPlayer/Process/VideoBuffer.h @@ -32,7 +32,7 @@ extern "C" { struct YuvImage { - static const int MAX_PLANES = 3; + static const int MAX_PLANES = 4; uint8_t* plane[MAX_PLANES]; int planesize[MAX_PLANES]; diff --git a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/MMALRenderer.cpp b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/MMALRenderer.cpp index fc3de630ae44c..ee596702ab129 100644 --- a/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/MMALRenderer.cpp +++ b/xbmc/cores/VideoPlayer/VideoRenderers/HwDecRender/MMALRenderer.cpp @@ -199,6 +199,7 @@ CMMALPool::~CMMALPool() std::vector CMMALPool::mmal_encoding_table = { { AV_PIX_FMT_YUV420P, MMAL_ENCODING_I420 }, + { AV_PIX_FMT_SAND128, MMAL_ENCODING_YUVUV128 }, { AV_PIX_FMT_RGBA, MMAL_ENCODING_RGBA, }, { AV_PIX_FMT_BGRA, MMAL_ENCODING_BGRA }, { AV_PIX_FMT_RGB0, MMAL_ENCODING_RGBA },