void ColorCodecBench::decodeAndXformQCMS() { SkAutoTDelete<SkCodec> codec(SkCodec::NewFromData(fEncoded)); #ifdef SK_DEBUG const SkCodec::Result result = #endif codec->startScanlineDecode(fSrcInfo); SkASSERT(SkCodec::kSuccess == result); SkAutoTCallVProc<qcms_profile, qcms_profile_release> srcSpace(qcms_profile_from_memory(fSrcData->data(), fSrcData->size())); SkASSERT(srcSpace); SkAutoTCallVProc<qcms_transform, qcms_transform_release> transform (qcms_transform_create(srcSpace, QCMS_DATA_RGBA_8, fDstSpaceQCMS.get(), QCMS_DATA_RGBA_8, QCMS_INTENT_PERCEPTUAL)); SkASSERT(transform); #ifdef SK_PMCOLOR_IS_RGBA qcms_output_type outType = QCMS_OUTPUT_RGBX; #else qcms_output_type outType = QCMS_OUTPUT_BGRX; #endif void* dst = fDst.get(); for (int y = 0; y < fSrcInfo.height(); y++) { #ifdef SK_DEBUG const int rows = #endif codec->getScanlines(fSrc.get(), 1, 0); SkASSERT(1 == rows); qcms_transform_data_type(transform, fSrc.get(), dst, fSrcInfo.width(), outType); dst = SkTAddOffset<void>(dst, fDstInfo.minRowBytes()); } }
void ColorCodecBench::xformOnlyQCMS() { SkAutoTCallVProc<qcms_profile, qcms_profile_release> srcSpace(qcms_profile_from_memory(fSrcData->data(), fSrcData->size())); SkASSERT(srcSpace); SkAutoTCallVProc<qcms_transform, qcms_transform_release> transform (qcms_transform_create(srcSpace, QCMS_DATA_RGBA_8, fDstSpaceQCMS.get(), QCMS_DATA_RGBA_8, QCMS_INTENT_PERCEPTUAL)); SkASSERT(transform); #ifdef SK_PMCOLOR_IS_RGBA qcms_output_type outType = QCMS_OUTPUT_RGBX; #else qcms_output_type outType = QCMS_OUTPUT_BGRX; #endif void* dst = fDst.get(); void* src = fSrc.get(); for (int y = 0; y < fSrcInfo.height(); y++) { // Transform in place qcms_transform_data_type(transform, src, dst, fSrcInfo.width(), outType); dst = SkTAddOffset<void>(dst, fDstInfo.minRowBytes()); src = SkTAddOffset<void>(src, fSrcInfo.minRowBytes()); } }
static std::unique_ptr<SkColorSpaceXform> CreateDefaultXform(const sk_sp<SkGammas>& srcGamma, const SkMatrix44& srcToDst, const sk_sp<SkGammas>& dstGamma) { sk_sp<SkColorSpace> srcSpace( new SkColorSpace_Base(nullptr, srcGamma, SkMatrix::I(), nullptr)); sk_sp<SkColorSpace> dstSpace( new SkColorSpace_Base(nullptr, dstGamma, SkMatrix::I(), nullptr)); return SkColorSpaceXform::New(srcSpace, dstSpace); }