1 /* 2 * Copyright 2015 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef GrYUVProvider_DEFINED 9 #define GrYUVProvider_DEFINED 10 11 #include "GrTypes.h" 12 #include "SkImageInfo.h" 13 #include "SkYUVSizeInfo.h" 14 15 class GrContext; 16 class GrTexture; 17 class GrTextureProxy; 18 19 /** 20 * There are at least 2 different ways to extract/retrieve YUV planar data... 21 * - SkPixelRef 22 * - SkImageGeneartor 23 * 24 * To share common functionality around using the planar data, we use this abstract base-class 25 * to represent accessing that data. 26 */ 27 class GrYUVProvider { 28 public: ~GrYUVProvider()29 virtual ~GrYUVProvider() {} 30 31 /** 32 * On success, this returns a texture proxy that has converted the YUV data from the provider 33 * into a form that is supported by the GPU (typically transformed into RGB). If useCache 34 * is true, then the texture will automatically have a key added, so it can be retrieved 35 * from the cache (assuming it is requested by a provider w/ the same genID). 36 * 37 * On failure (e.g. the provider had no data), this returns NULL. 38 */ 39 sk_sp<GrTextureProxy> refAsTextureProxy(GrContext*, const GrSurfaceDesc&, bool useCache); 40 41 virtual uint32_t onGetID() = 0; 42 43 // These are not meant to be called by a client, only by the implementation 44 45 /** 46 * If decoding to YUV is supported, this returns true. Otherwise, this 47 * returns false and does not modify any of the parameters. 48 * 49 * @param sizeInfo Output parameter indicating the sizes and required 50 * allocation widths of the Y, U, and V planes. 51 * @param colorSpace Output parameter. 52 */ 53 virtual bool onQueryYUV8(SkYUVSizeInfo* sizeInfo, SkYUVColorSpace* colorSpace) const = 0; 54 55 /** 56 * Returns true on success and false on failure. 57 * This always attempts to perform a full decode. If the client only 58 * wants size, it should call onQueryYUV8(). 59 * 60 * @param sizeInfo Needs to exactly match the values returned by the 61 * query, except the WidthBytes may be larger than the 62 * recommendation (but not smaller). 63 * @param planes Memory for each of the Y, U, and V planes. 64 */ 65 virtual bool onGetYUV8Planes(const SkYUVSizeInfo& sizeInfo, void* planes[3]) = 0; 66 }; 67 68 #endif 69