зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1421187 - P4. Make mac decoder output YUV420 format. r=mattwoodrow
There's little advantage over using NV12 and using YUV420 allows for easier and faster frame copy. We assume of course that Apple's VideoToolbox have more optimized code than we do. MozReview-Commit-ID: IjvepxW3OZI --HG-- extra : rebase_source : 089f5a63c4871366aed8f0c0ef3ef6bd3c2d0a0f
This commit is contained in:
Родитель
4fd0cbda6e
Коммит
46c877fa75
|
@ -361,7 +361,7 @@ AppleVTDecoder::OutputFrame(CVPixelBufferRef aImage,
|
||||||
size_t width = CVPixelBufferGetWidth(aImage);
|
size_t width = CVPixelBufferGetWidth(aImage);
|
||||||
size_t height = CVPixelBufferGetHeight(aImage);
|
size_t height = CVPixelBufferGetHeight(aImage);
|
||||||
DebugOnly<size_t> planes = CVPixelBufferGetPlaneCount(aImage);
|
DebugOnly<size_t> planes = CVPixelBufferGetPlaneCount(aImage);
|
||||||
MOZ_ASSERT(planes == 2, "Likely not NV12 format and it must be.");
|
MOZ_ASSERT(planes == 3, "Likely not YUV420 format and it must be.");
|
||||||
|
|
||||||
VideoData::YCbCrBuffer buffer;
|
VideoData::YCbCrBuffer buffer;
|
||||||
|
|
||||||
|
@ -391,15 +391,15 @@ AppleVTDecoder::OutputFrame(CVPixelBufferRef aImage,
|
||||||
buffer.mPlanes[1].mWidth = (width+1) / 2;
|
buffer.mPlanes[1].mWidth = (width+1) / 2;
|
||||||
buffer.mPlanes[1].mHeight = (height+1) / 2;
|
buffer.mPlanes[1].mHeight = (height+1) / 2;
|
||||||
buffer.mPlanes[1].mOffset = 0;
|
buffer.mPlanes[1].mOffset = 0;
|
||||||
buffer.mPlanes[1].mSkip = 1;
|
buffer.mPlanes[1].mSkip = 0;
|
||||||
// Cr plane.
|
// Cr plane.
|
||||||
buffer.mPlanes[2].mData =
|
buffer.mPlanes[2].mData =
|
||||||
static_cast<uint8_t*>(CVPixelBufferGetBaseAddressOfPlane(aImage, 1));
|
static_cast<uint8_t*>(CVPixelBufferGetBaseAddressOfPlane(aImage, 2));
|
||||||
buffer.mPlanes[2].mStride = CVPixelBufferGetBytesPerRowOfPlane(aImage, 1);
|
buffer.mPlanes[2].mStride = CVPixelBufferGetBytesPerRowOfPlane(aImage, 2);
|
||||||
buffer.mPlanes[2].mWidth = (width+1) / 2;
|
buffer.mPlanes[2].mWidth = (width+1) / 2;
|
||||||
buffer.mPlanes[2].mHeight = (height+1) / 2;
|
buffer.mPlanes[2].mHeight = (height+1) / 2;
|
||||||
buffer.mPlanes[2].mOffset = 1;
|
buffer.mPlanes[2].mOffset = 0;
|
||||||
buffer.mPlanes[2].mSkip = 1;
|
buffer.mPlanes[2].mSkip = 0;
|
||||||
|
|
||||||
gfx::IntRect visible = gfx::IntRect(0,
|
gfx::IntRect visible = gfx::IntRect(0,
|
||||||
0,
|
0,
|
||||||
|
@ -602,7 +602,7 @@ AppleVTDecoder::CreateOutputConfiguration()
|
||||||
if (mUseSoftwareImages) {
|
if (mUseSoftwareImages) {
|
||||||
// Output format type:
|
// Output format type:
|
||||||
SInt32 PixelFormatTypeValue =
|
SInt32 PixelFormatTypeValue =
|
||||||
kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange;
|
kCVPixelFormatType_420YpCbCr8Planar;
|
||||||
AutoCFRelease<CFNumberRef> PixelFormatTypeNumber =
|
AutoCFRelease<CFNumberRef> PixelFormatTypeNumber =
|
||||||
CFNumberCreate(kCFAllocatorDefault,
|
CFNumberCreate(kCFAllocatorDefault,
|
||||||
kCFNumberSInt32Type,
|
kCFNumberSInt32Type,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче