Loading include/media/MediaMetadataRetrieverInterface.h +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <utils/RefBase.h> #include <media/mediametadataretriever.h> #include <media/mediascanner.h> #include <private/media/VideoFrame.h> namespace android { Loading include/media/mediascanner.h +26 −2 Original line number Diff line number Diff line Loading @@ -41,6 +41,31 @@ enum MediaScanResult { MEDIA_SCAN_RESULT_ERROR, }; struct MediaAlbumArt { public: static MediaAlbumArt *fromData(int32_t size, const void* data); static void init(MediaAlbumArt* instance, int32_t size, const void* data); MediaAlbumArt *clone(); const char *data() { return &mData[0]; } int32_t size() { return mSize; } private: int32_t mSize; char mData[0]; // You can't construct instances of this class directly because this is a // variable-sized object passed through the binder. MediaAlbumArt(); } __packed; struct MediaScanner { MediaScanner(); virtual ~MediaScanner(); Loading @@ -53,8 +78,7 @@ struct MediaScanner { void setLocale(const char *locale); // extracts album art as a block of data virtual char *extractAlbumArt(int fd) = 0; virtual MediaAlbumArt *extractAlbumArt(int fd) = 0; protected: const char *locale() const; Loading include/media/stagefright/StagefrightMediaScanner.h +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ struct StagefrightMediaScanner : public MediaScanner { const char *path, const char *mimeType, MediaScannerClient &client); virtual char *extractAlbumArt(int fd); virtual MediaAlbumArt *extractAlbumArt(int fd); private: StagefrightMediaScanner(const StagefrightMediaScanner &); Loading include/private/media/VideoFrame.h +0 −58 Original line number Diff line number Diff line Loading @@ -25,64 +25,6 @@ namespace android { // A simple buffer to hold binary data class MediaAlbumArt { public: MediaAlbumArt(): mSize(0), mData(0) {} explicit MediaAlbumArt(const char* url) { mSize = 0; mData = NULL; FILE *in = fopen(url, "r"); if (!in) { return; } fseek(in, 0, SEEK_END); mSize = ftell(in); // Allocating buffer of size equals to the external file size. if (mSize == 0 || (mData = new uint8_t[mSize]) == NULL) { fclose(in); if (mSize != 0) { mSize = 0; } return; } rewind(in); if (fread(mData, 1, mSize, in) != mSize) { // Read failed. delete[] mData; mData = NULL; mSize = 0; return; } fclose(in); } MediaAlbumArt(const MediaAlbumArt& copy) { mSize = copy.mSize; mData = NULL; // initialize it first if (mSize > 0 && copy.mData != NULL) { mData = new uint8_t[copy.mSize]; if (mData != NULL) { memcpy(mData, copy.mData, mSize); } else { mSize = 0; } } } ~MediaAlbumArt() { if (mData != 0) { delete[] mData; } } // Intentional public access modifier: // We have to know the internal structure in order to share it between // processes? uint32_t mSize; // Number of bytes in mData uint8_t* mData; // Actual binary data }; // Represents a color converted (RGB-based) video frame // with bitmap pixels stored in FrameBuffer class VideoFrame Loading media/libmedia/MediaScanner.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -237,4 +237,24 @@ MediaScanResult MediaScanner::doProcessDirectoryEntry( return MEDIA_SCAN_RESULT_OK; } MediaAlbumArt *MediaAlbumArt::clone() { size_t byte_size = this->size() + sizeof(MediaAlbumArt); MediaAlbumArt *result = reinterpret_cast<MediaAlbumArt *>(malloc(byte_size)); result->mSize = this->size(); memcpy(&result->mData[0], &this->mData[0], this->size()); return result; } void MediaAlbumArt::init(MediaAlbumArt *instance, int32_t dataSize, const void *data) { instance->mSize = dataSize; memcpy(&instance->mData[0], data, dataSize); } MediaAlbumArt *MediaAlbumArt::fromData(int32_t dataSize, const void* data) { size_t byte_size = sizeof(MediaAlbumArt) + dataSize; MediaAlbumArt *result = reinterpret_cast<MediaAlbumArt *>(malloc(byte_size)); init(result, dataSize, data); return result; } } // namespace android Loading
include/media/MediaMetadataRetrieverInterface.h +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <utils/RefBase.h> #include <media/mediametadataretriever.h> #include <media/mediascanner.h> #include <private/media/VideoFrame.h> namespace android { Loading
include/media/mediascanner.h +26 −2 Original line number Diff line number Diff line Loading @@ -41,6 +41,31 @@ enum MediaScanResult { MEDIA_SCAN_RESULT_ERROR, }; struct MediaAlbumArt { public: static MediaAlbumArt *fromData(int32_t size, const void* data); static void init(MediaAlbumArt* instance, int32_t size, const void* data); MediaAlbumArt *clone(); const char *data() { return &mData[0]; } int32_t size() { return mSize; } private: int32_t mSize; char mData[0]; // You can't construct instances of this class directly because this is a // variable-sized object passed through the binder. MediaAlbumArt(); } __packed; struct MediaScanner { MediaScanner(); virtual ~MediaScanner(); Loading @@ -53,8 +78,7 @@ struct MediaScanner { void setLocale(const char *locale); // extracts album art as a block of data virtual char *extractAlbumArt(int fd) = 0; virtual MediaAlbumArt *extractAlbumArt(int fd) = 0; protected: const char *locale() const; Loading
include/media/stagefright/StagefrightMediaScanner.h +1 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ struct StagefrightMediaScanner : public MediaScanner { const char *path, const char *mimeType, MediaScannerClient &client); virtual char *extractAlbumArt(int fd); virtual MediaAlbumArt *extractAlbumArt(int fd); private: StagefrightMediaScanner(const StagefrightMediaScanner &); Loading
include/private/media/VideoFrame.h +0 −58 Original line number Diff line number Diff line Loading @@ -25,64 +25,6 @@ namespace android { // A simple buffer to hold binary data class MediaAlbumArt { public: MediaAlbumArt(): mSize(0), mData(0) {} explicit MediaAlbumArt(const char* url) { mSize = 0; mData = NULL; FILE *in = fopen(url, "r"); if (!in) { return; } fseek(in, 0, SEEK_END); mSize = ftell(in); // Allocating buffer of size equals to the external file size. if (mSize == 0 || (mData = new uint8_t[mSize]) == NULL) { fclose(in); if (mSize != 0) { mSize = 0; } return; } rewind(in); if (fread(mData, 1, mSize, in) != mSize) { // Read failed. delete[] mData; mData = NULL; mSize = 0; return; } fclose(in); } MediaAlbumArt(const MediaAlbumArt& copy) { mSize = copy.mSize; mData = NULL; // initialize it first if (mSize > 0 && copy.mData != NULL) { mData = new uint8_t[copy.mSize]; if (mData != NULL) { memcpy(mData, copy.mData, mSize); } else { mSize = 0; } } } ~MediaAlbumArt() { if (mData != 0) { delete[] mData; } } // Intentional public access modifier: // We have to know the internal structure in order to share it between // processes? uint32_t mSize; // Number of bytes in mData uint8_t* mData; // Actual binary data }; // Represents a color converted (RGB-based) video frame // with bitmap pixels stored in FrameBuffer class VideoFrame Loading
media/libmedia/MediaScanner.cpp +20 −0 Original line number Diff line number Diff line Loading @@ -237,4 +237,24 @@ MediaScanResult MediaScanner::doProcessDirectoryEntry( return MEDIA_SCAN_RESULT_OK; } MediaAlbumArt *MediaAlbumArt::clone() { size_t byte_size = this->size() + sizeof(MediaAlbumArt); MediaAlbumArt *result = reinterpret_cast<MediaAlbumArt *>(malloc(byte_size)); result->mSize = this->size(); memcpy(&result->mData[0], &this->mData[0], this->size()); return result; } void MediaAlbumArt::init(MediaAlbumArt *instance, int32_t dataSize, const void *data) { instance->mSize = dataSize; memcpy(&instance->mData[0], data, dataSize); } MediaAlbumArt *MediaAlbumArt::fromData(int32_t dataSize, const void* data) { size_t byte_size = sizeof(MediaAlbumArt) + dataSize; MediaAlbumArt *result = reinterpret_cast<MediaAlbumArt *>(malloc(byte_size)); init(result, dataSize, data); return result; } } // namespace android