1
2/*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8#ifndef SkImageRef_ashmem_DEFINED
9#define SkImageRef_ashmem_DEFINED
10
11#include "SkImageRef.h"
12
13struct SkAshmemRec {
14    int     fFD;
15    void*   fAddr;
16    size_t  fSize;
17    bool    fPinned;
18};
19
20class SkImageRef_ashmem : public SkImageRef {
21public:
22    SkImageRef_ashmem(SkStream*, SkBitmap::Config, int sampleSize = 1);
23    virtual ~SkImageRef_ashmem();
24
25    // overrides
26    virtual void flatten(SkFlattenableWriteBuffer&) const;
27    virtual Factory getFactory() const {
28        return Create;
29    }
30    static SkPixelRef* Create(SkFlattenableReadBuffer&);
31
32    SK_DECLARE_PIXEL_REF_REGISTRAR()
33protected:
34    virtual bool onDecode(SkImageDecoder* codec, SkStream* stream,
35                          SkBitmap* bitmap, SkBitmap::Config config,
36                          SkImageDecoder::Mode mode);
37
38    virtual void* onLockPixels(SkColorTable**);
39    virtual void onUnlockPixels();
40
41private:
42    SkImageRef_ashmem(SkFlattenableReadBuffer&);
43    void closeFD();
44
45    SkColorTable* fCT;
46    SkAshmemRec fRec;
47
48    typedef SkImageRef INHERITED;
49};
50
51#endif
52