| Index: Source/WebCore/platform/graphics/win/QTDecompressionSession.cpp
|
| diff --git a/Source/WebCore/platform/graphics/win/QTDecompressionSession.cpp b/Source/WebCore/platform/graphics/win/QTDecompressionSession.cpp
|
| deleted file mode 100644
|
| index eeb3ca77c2c8c87f97791445d8fddad30a886ea8..0000000000000000000000000000000000000000
|
| --- a/Source/WebCore/platform/graphics/win/QTDecompressionSession.cpp
|
| +++ /dev/null
|
| @@ -1,170 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2010 Apple, Inc. All rights reserved.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions
|
| - * are met:
|
| - * 1. Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * 2. Redistributions in binary form must reproduce the above copyright
|
| - * notice, this list of conditions and the following disclaimer in the
|
| - * documentation and/or other materials provided with the distribution.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
|
| - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
| - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
| - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
|
| - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
| - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
| - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
| - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
| - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -#include "config.h"
|
| -
|
| -#include "QTDecompressionSession.h"
|
| -
|
| -#include <ImageCompression.h>
|
| -#include <algorithm>
|
| -
|
| -class QTDecompressionSessionClient {
|
| -public:
|
| - static void trackingCallback(void *decompressionTrackingRefCon, OSStatus,
|
| - ICMDecompressionTrackingFlags decompressionTrackingFlags, CVPixelBufferRef pixelBuffer,
|
| - TimeValue64, TimeValue64, ICMValidTimeFlags, void *, void *)
|
| - {
|
| - QTDecompressionSession* session = static_cast<QTDecompressionSession*>(decompressionTrackingRefCon);
|
| - ASSERT(session);
|
| -
|
| - if (decompressionTrackingFlags & kICMDecompressionTracking_FrameDecoded)
|
| - session->m_latestFrame = QTPixelBuffer(pixelBuffer);
|
| - }
|
| -};
|
| -
|
| -PassOwnPtr<QTDecompressionSession> QTDecompressionSession::create(unsigned long pixelFormat, size_t width, size_t height)
|
| -{
|
| - return adoptPtr(new QTDecompressionSession(pixelFormat, width, height));
|
| -}
|
| -
|
| -QTDecompressionSession::QTDecompressionSession(unsigned long pixelFormat, size_t width, size_t height)
|
| - : m_session(0)
|
| - , m_pixelFormat(pixelFormat)
|
| - , m_width(width)
|
| - , m_height(height)
|
| -{
|
| - initializeSession();
|
| -}
|
| -
|
| -QTDecompressionSession::~QTDecompressionSession()
|
| -{
|
| - if (m_session)
|
| - ICMDecompressionSessionRelease(m_session);
|
| -}
|
| -
|
| -void QTDecompressionSession::initializeSession()
|
| -{
|
| - if (m_session)
|
| - return;
|
| -
|
| - ICMPixelFormatInfo pixelFormatInfo = {sizeof(ICMPixelFormatInfo), 0};
|
| - if (ICMGetPixelFormatInfo(m_pixelFormat, &pixelFormatInfo) != noErr) {
|
| - // The ICM does not know anything about the pixelFormat contained in
|
| - // the pixel buffer, so it won't be able to convert it to RGBA.
|
| - return;
|
| - }
|
| -
|
| - // The depth and cType fields of the ImageDescriptionHandle are filled
|
| - // out according to the instructions in Technical Q&A QA1183:
|
| - // http://developer.apple.com/library/mac/#qa/qa2001/qa1183.html
|
| - bool isIndexed = pixelFormatInfo.formatFlags & kICMPixelFormatIsIndexed;
|
| - bool isQD = pixelFormatInfo.formatFlags & kICMPixelFormatIsSupportedByQD;
|
| - bool isMonochrome = pixelFormatInfo.formatFlags & kICMPixelFormatIsMonochrome;
|
| - bool hasAlpha = pixelFormatInfo.formatFlags & kICMPixelFormatHasAlphaChannel;
|
| -
|
| - unsigned int depth = 24; // The default depth is 24.
|
| - if (hasAlpha)
|
| - depth = 32; // Any pixel format with alpha gets a depth of 32.
|
| - else if (isMonochrome) {
|
| - // Grayscale pixel formats get depths 33 through 40, depending
|
| - // on their bits per pixel. Yes, this means that 16-bit grayscale
|
| - // and 8-bit grayscale have the same pixel depth.
|
| - depth = 32 + std::min<unsigned int>(8, pixelFormatInfo.bitsPerPixel[0]);
|
| - } else if (isIndexed) {
|
| - // Indexed pixel formats get a depth of 1 through 8, depending on
|
| - // the their bits per pixel.
|
| - depth = pixelFormatInfo.bitsPerPixel[0];
|
| - }
|
| -
|
| - // If QuickDraw supports the given pixel format, the cType should be kRawCodecType.
|
| - // Otherwise, use the pixel format code for the cType. We are assuming the pixel
|
| - // buffer is uncompressed.
|
| - unsigned long cType = isQD ? kRawCodecType : m_pixelFormat;
|
| -
|
| - ImageDescriptionHandle description = (ImageDescriptionHandle)NewHandleClear(sizeof(ImageDescription));
|
| - (**description).idSize = sizeof(ImageDescription);
|
| - (**description).cType = cType;
|
| - (**description).version = 2;
|
| - (**description).spatialQuality = codecLosslessQuality;
|
| - (**description).width = m_width;
|
| - (**description).height = m_height;
|
| - (**description).hRes = 72 << 16; // 72 DPI as a fixed-point number
|
| - (**description).vRes = 72 << 16; // 72 DPI as a fixed-point number
|
| - (**description).frameCount = 1;
|
| - (**description).depth = depth;
|
| - (**description).clutID = -1;
|
| -
|
| - // Create the mandatory ICMDecompressionSessionOptions, but leave
|
| - // all the default values.
|
| - ICMDecompressionSessionOptionsRef options = 0;
|
| - ICMDecompressionSessionOptionsCreate(kCFAllocatorDefault, &options);
|
| -
|
| - CFDictionaryRef pixelBufferAttributes = QTPixelBuffer::createPixelBufferAttributesDictionary(QTPixelBuffer::ConfigureForCGImage);
|
| -
|
| - ICMDecompressionTrackingCallbackRecord callback = {
|
| - QTDecompressionSessionClient::trackingCallback,
|
| - this,
|
| - };
|
| -
|
| - ICMDecompressionSessionCreate(kCFAllocatorDefault,
|
| - description,
|
| - options,
|
| - pixelBufferAttributes,
|
| - &callback,
|
| - &m_session);
|
| -
|
| - if (pixelBufferAttributes)
|
| - CFRelease(pixelBufferAttributes);
|
| -
|
| - ICMDecompressionSessionOptionsRelease(options);
|
| - DisposeHandle((Handle)description);
|
| -}
|
| -
|
| -bool QTDecompressionSession::canDecompress(QTPixelBuffer inBuffer)
|
| -{
|
| - return m_session
|
| - && inBuffer.pixelFormatType() == m_pixelFormat
|
| - && inBuffer.width() == m_width
|
| - && inBuffer.height() == m_height;
|
| -}
|
| -
|
| -QTPixelBuffer QTDecompressionSession::decompress(QTPixelBuffer inBuffer)
|
| -{
|
| - if (!canDecompress(inBuffer))
|
| - return QTPixelBuffer();
|
| -
|
| - inBuffer.lockBaseAddress();
|
| - ICMDecompressionSessionDecodeFrame(m_session,
|
| - static_cast<UInt8*>(inBuffer.baseAddress()),
|
| - inBuffer.dataSize(),
|
| - 0, // frameOptions
|
| - 0, // frameTime
|
| - 0); // sourceFrameRefCon
|
| -
|
| - // Because we passed in 0 for frameTime, the above function
|
| - // is synchronous, and the client callback will have been
|
| - // called before the function returns, and m_latestFrame
|
| - // will contain the newly decompressed frame.
|
| - return m_latestFrame;
|
| -}
|
|
|