Line data Source code
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 0 : class GrYUVProvider {
28 : public:
29 0 : 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
|