Loading core/jni/android/graphics/BitmapFactory.cpp +3 −1 Original line number Original line Diff line number Diff line Loading @@ -541,7 +541,9 @@ static jobject nativeDecodeAsset(JNIEnv* env, jobject clazz, jint native_asset, } else { } else { // since we know we'll be done with the asset when we return, we can // since we know we'll be done with the asset when we return, we can // just use a simple wrapper // just use a simple wrapper stream = new AssetStreamAdaptor(asset); stream = new AssetStreamAdaptor(asset, AssetStreamAdaptor::kNo_OwnAsset, AssetStreamAdaptor::kNo_HasMemoryBase); } } SkAutoUnref aur(stream); SkAutoUnref aur(stream); return doDecode(env, stream, padding, options, forcePurgeable, forcePurgeable); return doDecode(env, stream, padding, options, forcePurgeable, forcePurgeable); Loading core/jni/android/graphics/Movie.cpp +3 −1 Original line number Original line Diff line number Diff line Loading @@ -85,7 +85,9 @@ static void movie_draw(JNIEnv* env, jobject movie, jobject canvas, static jobject movie_decodeAsset(JNIEnv* env, jobject clazz, jint native_asset) { static jobject movie_decodeAsset(JNIEnv* env, jobject clazz, jint native_asset) { android::Asset* asset = reinterpret_cast<android::Asset*>(native_asset); android::Asset* asset = reinterpret_cast<android::Asset*>(native_asset); if (asset == NULL) return NULL; if (asset == NULL) return NULL; SkAutoTUnref<SkStreamRewindable> stream (new android::AssetStreamAdaptor(asset)); SkAutoTUnref<SkStreamRewindable> stream (new android::AssetStreamAdaptor(asset, android::AssetStreamAdaptor::kNo_OwnAsset, android::AssetStreamAdaptor::kNo_HasMemoryBase)); SkMovie* moov = SkMovie::DecodeStream(stream.get()); SkMovie* moov = SkMovie::DecodeStream(stream.get()); return create_jmovie(env, moov); return create_jmovie(env, moov); } } Loading core/jni/android/graphics/TypefaceImpl.cpp +7 −61 Original line number Original line Diff line number Diff line Loading @@ -32,68 +32,10 @@ #endif #endif #include "TypefaceImpl.h" #include "TypefaceImpl.h" #include "Utils.h" namespace android { namespace android { class AssetStream : public SkStream { public: AssetStream(Asset* asset, bool hasMemoryBase) : fAsset(asset) { fMemoryBase = hasMemoryBase ? fAsset->getBuffer(false) : NULL; } virtual ~AssetStream() { delete fAsset; } virtual const void* getMemoryBase() { return fMemoryBase; } virtual bool rewind() { off64_t pos = fAsset->seek(0, SEEK_SET); return pos != (off64_t)-1; } virtual size_t read(void* buffer, size_t size) { ssize_t amount; if (NULL == buffer) { if (0 == size) // caller is asking us for our total length return fAsset->getLength(); // asset->seek returns new total offset // we want to return amount that was skipped off64_t oldOffset = fAsset->seek(0, SEEK_CUR); if (-1 == oldOffset) return 0; off64_t newOffset = fAsset->seek(size, SEEK_CUR); if (-1 == newOffset) return 0; amount = newOffset - oldOffset; } else { amount = fAsset->read(buffer, size); } if (amount < 0) amount = 0; return amount; } private: Asset* fAsset; const void* fMemoryBase; }; #ifdef USE_MINIKIN #ifdef USE_MINIKIN // Any weight greater than or equal to this is considered "bold" for // Any weight greater than or equal to this is considered "bold" for Loading Loading @@ -194,7 +136,9 @@ TypefaceImpl* TypefaceImpl_createFromFile(const char* filename) { } } TypefaceImpl* TypefaceImpl_createFromAsset(Asset* asset) { TypefaceImpl* TypefaceImpl_createFromAsset(Asset* asset) { SkStream* stream = new AssetStream(asset, true); SkStream* stream = new AssetStreamAdaptor(asset, AssetStreamAdaptor::kYes_OwnAsset, AssetStreamAdaptor::kYes_HasMemoryBase); SkTypeface* face = SkTypeface::CreateFromStream(stream); SkTypeface* face = SkTypeface::CreateFromStream(stream); // SkTypeFace::CreateFromStream calls ref() on the stream, so we // SkTypeFace::CreateFromStream calls ref() on the stream, so we // need to unref it here or it won't be freed later on // need to unref it here or it won't be freed later on Loading Loading @@ -234,7 +178,9 @@ TypefaceImpl* TypefaceImpl_createFromFile(const char* filename) { } } TypefaceImpl* TypefaceImpl_createFromAsset(Asset* asset) { TypefaceImpl* TypefaceImpl_createFromAsset(Asset* asset) { SkStream* stream = new AssetStream(asset, true); SkStream* stream = new AssetStreamAdaptor(asset, AssetStreamAdaptor::kYes_OwnAsset, AssetStreamAdaptor::kYes_HasMemoryBase); SkTypeface* face = SkTypeface::CreateFromStream(stream); SkTypeface* face = SkTypeface::CreateFromStream(stream); // SkTypeFace::CreateFromStream calls ref() on the stream, so we // SkTypeFace::CreateFromStream calls ref() on the stream, so we // need to unref it here or it won't be freed later on // need to unref it here or it won't be freed later on Loading core/jni/android/graphics/Utils.cpp +15 −0 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,21 @@ using namespace android; using namespace android; AssetStreamAdaptor::AssetStreamAdaptor(Asset* asset, OwnAsset ownAsset, HasMemoryBase hasMemoryBase) : fAsset(asset) , fMemoryBase(kYes_HasMemoryBase == hasMemoryBase ? asset->getBuffer(false) : NULL) , fOwnAsset(ownAsset) { } AssetStreamAdaptor::~AssetStreamAdaptor() { if (kYes_OwnAsset == fOwnAsset) { delete fAsset; } } bool AssetStreamAdaptor::rewind() { bool AssetStreamAdaptor::rewind() { off64_t pos = fAsset->seek(0, SEEK_SET); off64_t pos = fAsset->seek(0, SEEK_SET); if (pos == (off64_t)-1) { if (pos == (off64_t)-1) { Loading core/jni/android/graphics/Utils.h +22 −2 Original line number Original line Diff line number Diff line Loading @@ -28,16 +28,36 @@ namespace android { class AssetStreamAdaptor : public SkStreamRewindable { class AssetStreamAdaptor : public SkStreamRewindable { public: public: AssetStreamAdaptor(Asset* a) : fAsset(a) {} // Enum passed to constructor. If set to kYes_OwnAsset, // the passed in Asset will be deleted upon destruction. enum OwnAsset { kYes_OwnAsset, kNo_OwnAsset, }; // Enum passed to constructor. If set to kYes_HasMemoryBase, // getMemoryBase will return the Asset's buffer. enum HasMemoryBase { kYes_HasMemoryBase, kNo_HasMemoryBase, }; AssetStreamAdaptor(Asset*, OwnAsset, HasMemoryBase); ~AssetStreamAdaptor(); virtual bool rewind(); virtual bool rewind(); virtual size_t read(void* buffer, size_t size); virtual size_t read(void* buffer, size_t size); virtual bool hasLength() const { return true; } virtual bool hasLength() const { return true; } virtual size_t getLength() const; virtual size_t getLength() const; virtual bool isAtEnd() const; virtual bool isAtEnd() const; virtual const void* getMemoryBase() { return fMemoryBase; } virtual SkStreamRewindable* duplicate() const; virtual SkStreamRewindable* duplicate() const; private: private: Asset* fAsset; Asset* fAsset; const void* const fMemoryBase; const OwnAsset fOwnAsset; }; }; /** /** Loading Loading
core/jni/android/graphics/BitmapFactory.cpp +3 −1 Original line number Original line Diff line number Diff line Loading @@ -541,7 +541,9 @@ static jobject nativeDecodeAsset(JNIEnv* env, jobject clazz, jint native_asset, } else { } else { // since we know we'll be done with the asset when we return, we can // since we know we'll be done with the asset when we return, we can // just use a simple wrapper // just use a simple wrapper stream = new AssetStreamAdaptor(asset); stream = new AssetStreamAdaptor(asset, AssetStreamAdaptor::kNo_OwnAsset, AssetStreamAdaptor::kNo_HasMemoryBase); } } SkAutoUnref aur(stream); SkAutoUnref aur(stream); return doDecode(env, stream, padding, options, forcePurgeable, forcePurgeable); return doDecode(env, stream, padding, options, forcePurgeable, forcePurgeable); Loading
core/jni/android/graphics/Movie.cpp +3 −1 Original line number Original line Diff line number Diff line Loading @@ -85,7 +85,9 @@ static void movie_draw(JNIEnv* env, jobject movie, jobject canvas, static jobject movie_decodeAsset(JNIEnv* env, jobject clazz, jint native_asset) { static jobject movie_decodeAsset(JNIEnv* env, jobject clazz, jint native_asset) { android::Asset* asset = reinterpret_cast<android::Asset*>(native_asset); android::Asset* asset = reinterpret_cast<android::Asset*>(native_asset); if (asset == NULL) return NULL; if (asset == NULL) return NULL; SkAutoTUnref<SkStreamRewindable> stream (new android::AssetStreamAdaptor(asset)); SkAutoTUnref<SkStreamRewindable> stream (new android::AssetStreamAdaptor(asset, android::AssetStreamAdaptor::kNo_OwnAsset, android::AssetStreamAdaptor::kNo_HasMemoryBase)); SkMovie* moov = SkMovie::DecodeStream(stream.get()); SkMovie* moov = SkMovie::DecodeStream(stream.get()); return create_jmovie(env, moov); return create_jmovie(env, moov); } } Loading
core/jni/android/graphics/TypefaceImpl.cpp +7 −61 Original line number Original line Diff line number Diff line Loading @@ -32,68 +32,10 @@ #endif #endif #include "TypefaceImpl.h" #include "TypefaceImpl.h" #include "Utils.h" namespace android { namespace android { class AssetStream : public SkStream { public: AssetStream(Asset* asset, bool hasMemoryBase) : fAsset(asset) { fMemoryBase = hasMemoryBase ? fAsset->getBuffer(false) : NULL; } virtual ~AssetStream() { delete fAsset; } virtual const void* getMemoryBase() { return fMemoryBase; } virtual bool rewind() { off64_t pos = fAsset->seek(0, SEEK_SET); return pos != (off64_t)-1; } virtual size_t read(void* buffer, size_t size) { ssize_t amount; if (NULL == buffer) { if (0 == size) // caller is asking us for our total length return fAsset->getLength(); // asset->seek returns new total offset // we want to return amount that was skipped off64_t oldOffset = fAsset->seek(0, SEEK_CUR); if (-1 == oldOffset) return 0; off64_t newOffset = fAsset->seek(size, SEEK_CUR); if (-1 == newOffset) return 0; amount = newOffset - oldOffset; } else { amount = fAsset->read(buffer, size); } if (amount < 0) amount = 0; return amount; } private: Asset* fAsset; const void* fMemoryBase; }; #ifdef USE_MINIKIN #ifdef USE_MINIKIN // Any weight greater than or equal to this is considered "bold" for // Any weight greater than or equal to this is considered "bold" for Loading Loading @@ -194,7 +136,9 @@ TypefaceImpl* TypefaceImpl_createFromFile(const char* filename) { } } TypefaceImpl* TypefaceImpl_createFromAsset(Asset* asset) { TypefaceImpl* TypefaceImpl_createFromAsset(Asset* asset) { SkStream* stream = new AssetStream(asset, true); SkStream* stream = new AssetStreamAdaptor(asset, AssetStreamAdaptor::kYes_OwnAsset, AssetStreamAdaptor::kYes_HasMemoryBase); SkTypeface* face = SkTypeface::CreateFromStream(stream); SkTypeface* face = SkTypeface::CreateFromStream(stream); // SkTypeFace::CreateFromStream calls ref() on the stream, so we // SkTypeFace::CreateFromStream calls ref() on the stream, so we // need to unref it here or it won't be freed later on // need to unref it here or it won't be freed later on Loading Loading @@ -234,7 +178,9 @@ TypefaceImpl* TypefaceImpl_createFromFile(const char* filename) { } } TypefaceImpl* TypefaceImpl_createFromAsset(Asset* asset) { TypefaceImpl* TypefaceImpl_createFromAsset(Asset* asset) { SkStream* stream = new AssetStream(asset, true); SkStream* stream = new AssetStreamAdaptor(asset, AssetStreamAdaptor::kYes_OwnAsset, AssetStreamAdaptor::kYes_HasMemoryBase); SkTypeface* face = SkTypeface::CreateFromStream(stream); SkTypeface* face = SkTypeface::CreateFromStream(stream); // SkTypeFace::CreateFromStream calls ref() on the stream, so we // SkTypeFace::CreateFromStream calls ref() on the stream, so we // need to unref it here or it won't be freed later on // need to unref it here or it won't be freed later on Loading
core/jni/android/graphics/Utils.cpp +15 −0 Original line number Original line Diff line number Diff line Loading @@ -19,6 +19,21 @@ using namespace android; using namespace android; AssetStreamAdaptor::AssetStreamAdaptor(Asset* asset, OwnAsset ownAsset, HasMemoryBase hasMemoryBase) : fAsset(asset) , fMemoryBase(kYes_HasMemoryBase == hasMemoryBase ? asset->getBuffer(false) : NULL) , fOwnAsset(ownAsset) { } AssetStreamAdaptor::~AssetStreamAdaptor() { if (kYes_OwnAsset == fOwnAsset) { delete fAsset; } } bool AssetStreamAdaptor::rewind() { bool AssetStreamAdaptor::rewind() { off64_t pos = fAsset->seek(0, SEEK_SET); off64_t pos = fAsset->seek(0, SEEK_SET); if (pos == (off64_t)-1) { if (pos == (off64_t)-1) { Loading
core/jni/android/graphics/Utils.h +22 −2 Original line number Original line Diff line number Diff line Loading @@ -28,16 +28,36 @@ namespace android { class AssetStreamAdaptor : public SkStreamRewindable { class AssetStreamAdaptor : public SkStreamRewindable { public: public: AssetStreamAdaptor(Asset* a) : fAsset(a) {} // Enum passed to constructor. If set to kYes_OwnAsset, // the passed in Asset will be deleted upon destruction. enum OwnAsset { kYes_OwnAsset, kNo_OwnAsset, }; // Enum passed to constructor. If set to kYes_HasMemoryBase, // getMemoryBase will return the Asset's buffer. enum HasMemoryBase { kYes_HasMemoryBase, kNo_HasMemoryBase, }; AssetStreamAdaptor(Asset*, OwnAsset, HasMemoryBase); ~AssetStreamAdaptor(); virtual bool rewind(); virtual bool rewind(); virtual size_t read(void* buffer, size_t size); virtual size_t read(void* buffer, size_t size); virtual bool hasLength() const { return true; } virtual bool hasLength() const { return true; } virtual size_t getLength() const; virtual size_t getLength() const; virtual bool isAtEnd() const; virtual bool isAtEnd() const; virtual const void* getMemoryBase() { return fMemoryBase; } virtual SkStreamRewindable* duplicate() const; virtual SkStreamRewindable* duplicate() const; private: private: Asset* fAsset; Asset* fAsset; const void* const fMemoryBase; const OwnAsset fOwnAsset; }; }; /** /** Loading