From 7b5eb023f8d87cca6d830ae6c11c6aadbe02aca8 Mon Sep 17 00:00:00 2001 From: The Android Open Source Project Date: Wed, 17 Dec 2008 18:05:43 -0800 Subject: Code drop from //branches/cupcake/...@124589 --- .../MetadataRetrieverClient.cpp | 250 +++++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100644 media/libmediaplayerservice/MetadataRetrieverClient.cpp (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp new file mode 100644 index 0000000..a320bd5 --- /dev/null +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -0,0 +1,250 @@ +/* +** +** Copyright (C) 2008 The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +//#define LOG_NDEBUG 0 +#define LOG_TAG "MetadataRetrieverClient" +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "MetadataRetrieverClient.h" + + +namespace android { + +MetadataRetrieverClient::MetadataRetrieverClient(pid_t pid) +{ + LOGV("MetadataRetrieverClient constructor pid(%d)", pid); + mPid = pid; + mThumbnailDealer = NULL; + mAlbumArtDealer = NULL; + mThumbnail = NULL; + mAlbumArt = NULL; + + mRetriever = new PVMetadataRetriever(); + if (mRetriever == NULL) { + LOGE("failed to initialize the retriever"); + } +} + +MetadataRetrieverClient::~MetadataRetrieverClient() +{ + LOGV("MetadataRetrieverClient destructor"); + disconnect(); +} + +status_t MetadataRetrieverClient::dump(int fd, const Vector& args) const +{ + const size_t SIZE = 256; + char buffer[SIZE]; + String8 result; + result.append(" MetadataRetrieverClient\n"); + snprintf(buffer, 255, " pid(%d)\n", mPid); + result.append(buffer); + write(fd, result.string(), result.size()); + write(fd, "\n", 1); + return NO_ERROR; +} + +void MetadataRetrieverClient::disconnect() +{ + LOGV("disconnect from pid %d", mPid); + Mutex::Autolock lock(mLock); + mRetriever.clear(); + mThumbnailDealer.clear(); + mAlbumArtDealer.clear(); + mThumbnail.clear(); + mAlbumArt.clear(); + IPCThreadState::self()->flushCommands(); +} + +status_t MetadataRetrieverClient::setDataSource(const char *url) +{ + LOGV("setDataSource(%s)", url); + Mutex::Autolock lock(mLock); + if (url == NULL) { + return UNKNOWN_ERROR; + } + if (mRetriever == NULL) { + LOGE("retriever is not initialized"); + return NO_INIT; + } + return mRetriever->setDataSource(url); +} + +status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t length) +{ + LOGV("setDataSource fd=%d, offset=%lld, length=%lld", fd, offset, length); + Mutex::Autolock lock(mLock); + if (mRetriever == NULL) { + LOGE("retriever is not initialized"); + ::close(fd); + return NO_INIT; + } + + struct stat sb; + int ret = fstat(fd, &sb); + if (ret != 0) { + LOGE("fstat(%d) failed: %d, %s", fd, ret, strerror(errno)); + return UNKNOWN_ERROR; + } + LOGV("st_dev = %llu", sb.st_dev); + LOGV("st_mode = %u", sb.st_mode); + LOGV("st_uid = %lu", sb.st_uid); + LOGV("st_gid = %lu", sb.st_gid); + LOGV("st_size = %llu", sb.st_size); + + if (offset >= sb.st_size) { + LOGE("offset (%lld) bigger than file size (%llu)", offset, sb.st_size); + ::close(fd); + return UNKNOWN_ERROR; + } + if (offset + length > sb.st_size) { + length = sb.st_size - offset; + LOGE("calculated length = %lld", length); + } + status_t status = mRetriever->setDataSource(fd, offset, length); + ::close(fd); + return status; +} + +status_t MetadataRetrieverClient::setMode(int mode) +{ + LOGV("setMode"); + Mutex::Autolock lock(mLock); + if (mRetriever == NULL) { + LOGE("retriever is not initialized"); + return NO_INIT; + } + return mRetriever->setMode(mode); +} + +status_t MetadataRetrieverClient::getMode(int* mode) const +{ + LOGV("getMode"); + Mutex::Autolock lock(mLock); + if (mRetriever == NULL) { + LOGE("retriever is not initialized"); + return NO_INIT; + } + return mRetriever->getMode(mode); +} + +sp MetadataRetrieverClient::captureFrame() +{ + LOGV("captureFrame"); + Mutex::Autolock lock(mLock); + mThumbnail.clear(); + mThumbnailDealer.clear(); + if (mRetriever == NULL) { + LOGE("retriever is not initialized"); + return NULL; + } + VideoFrame *frame = mRetriever->captureFrame(); + if (frame == NULL) { + LOGE("failed to capture a video frame"); + return NULL; + } + size_t size = sizeof(VideoFrame) + frame->mSize; + mThumbnailDealer = new MemoryDealer(size); + if (mThumbnailDealer == NULL) { + LOGE("failed to create MemoryDealer"); + delete frame; + return NULL; + } + mThumbnail = mThumbnailDealer->allocate(size); + if (mThumbnail == NULL) { + LOGE("not enough memory for VideoFrame size=%u", size); + mThumbnailDealer.clear(); + delete frame; + return NULL; + } + VideoFrame *frameCopy = static_cast(mThumbnail->pointer()); + frameCopy->mWidth = frame->mWidth; + frameCopy->mHeight = frame->mHeight; + frameCopy->mDisplayWidth = frame->mDisplayWidth; + frameCopy->mDisplayHeight = frame->mDisplayHeight; + frameCopy->mSize = frame->mSize; + frameCopy->mData = (uint8_t *)frameCopy + sizeof(VideoFrame); + memcpy(frameCopy->mData, frame->mData, frame->mSize); + delete frame; // Fix memory leakage + return mThumbnail; +} + +sp MetadataRetrieverClient::extractAlbumArt() +{ + LOGV("extractAlbumArt"); + Mutex::Autolock lock(mLock); + mAlbumArt.clear(); + mAlbumArtDealer.clear(); + if (mRetriever == NULL) { + LOGE("retriever is not initialized"); + return NULL; + } + MediaAlbumArt *albumArt = mRetriever->extractAlbumArt(); + if (albumArt == NULL) { + LOGE("failed to extract an album art"); + return NULL; + } + size_t size = sizeof(MediaAlbumArt) + albumArt->mSize; + mAlbumArtDealer = new MemoryDealer(size); + if (mAlbumArtDealer == NULL) { + LOGE("failed to create MemoryDealer object"); + delete albumArt; + return NULL; + } + mAlbumArt = mAlbumArtDealer->allocate(size); + if (mAlbumArt == NULL) { + LOGE("not enough memory for MediaAlbumArt size=%u", size); + mAlbumArtDealer.clear(); + delete albumArt; + return NULL; + } + MediaAlbumArt *albumArtCopy = static_cast(mAlbumArt->pointer()); + albumArtCopy->mSize = albumArt->mSize; + albumArtCopy->mData = (uint8_t *)albumArtCopy + sizeof(MediaAlbumArt); + memcpy(albumArtCopy->mData, albumArt->mData, albumArt->mSize); + delete albumArt; // Fix memory leakage + return mAlbumArt; +} + +const char* MetadataRetrieverClient::extractMetadata(int keyCode) +{ + LOGV("extractMetadata"); + Mutex::Autolock lock(mLock); + if (mRetriever == NULL) { + LOGE("retriever is not initialized"); + return NULL; + } + return mRetriever->extractMetadata(keyCode); +} + +}; // namespace android -- cgit v1.1 From 6c5b21025f746fcb838499ae01b4d384ab1d2f66 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Queru Date: Sat, 21 Mar 2009 11:40:18 -0700 Subject: Deal better with situations where OpenCORE is disabled. --- media/libmediaplayerservice/MetadataRetrieverClient.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index a320bd5..6cb4a34 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -49,7 +49,11 @@ MetadataRetrieverClient::MetadataRetrieverClient(pid_t pid) mThumbnail = NULL; mAlbumArt = NULL; +#ifndef NO_OPENCORE mRetriever = new PVMetadataRetriever(); +#else + mRetriever = NULL; +#endif if (mRetriever == NULL) { LOGE("failed to initialize the retriever"); } -- cgit v1.1 From 7562408b2261d38415453378b6188f74fda99d88 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Tue, 19 May 2009 19:08:10 -0700 Subject: move libbinder's header files under includes/binder --- media/libmediaplayerservice/MetadataRetrieverClient.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index 6cb4a34..ba8d9a8 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -26,10 +26,10 @@ #include #include -#include +#include #include -#include -#include +#include +#include #include #include #include -- cgit v1.1 From 148c1a2a96774517407717b61e5bc9cb08be8806 Mon Sep 17 00:00:00 2001 From: James Dong Date: Sun, 6 Sep 2009 14:29:45 -0700 Subject: Add basic metadata retrieval support for midi, ogg, etc. Bug 2050320 --- .../MetadataRetrieverClient.cpp | 66 ++++++++++++++++++---- 1 file changed, 55 insertions(+), 11 deletions(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index ba8d9a8..b34421d 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -34,12 +34,15 @@ #include #include #include - +#include "VorbisMetadataRetriever.h" +#include "MidiMetadataRetriever.h" #include "MetadataRetrieverClient.h" - namespace android { +extern player_type getPlayerType(const char* url); +extern player_type getPlayerType(int fd, int64_t offset, int64_t length); + MetadataRetrieverClient::MetadataRetrieverClient(pid_t pid) { LOGV("MetadataRetrieverClient constructor pid(%d)", pid); @@ -90,6 +93,36 @@ void MetadataRetrieverClient::disconnect() IPCThreadState::self()->flushCommands(); } +static sp createRetriever(player_type playerType) +{ + sp p; + switch (playerType) { +#ifndef NO_OPENCORE + case PV_PLAYER: + LOGV("create pv metadata retriever"); + p = new PVMetadataRetriever(); + break; +#endif + case VORBIS_PLAYER: + LOGV("create vorbis metadata retriever"); + p = new VorbisMetadataRetriever(); + break; + case SONIVOX_PLAYER: + LOGV("create midi metadata retriever"); + p = new MidiMetadataRetriever(); + break; + default: + // TODO: + // support for STAGEFRIGHT_PLAYER and TEST_PLAYER + LOGE("player type %d is not supported", playerType); + break; + } + if (p == NULL) { + LOGE("failed to create a retriever object"); + } + return p; +} + status_t MetadataRetrieverClient::setDataSource(const char *url) { LOGV("setDataSource(%s)", url); @@ -97,11 +130,13 @@ status_t MetadataRetrieverClient::setDataSource(const char *url) if (url == NULL) { return UNKNOWN_ERROR; } - if (mRetriever == NULL) { - LOGE("retriever is not initialized"); - return NO_INIT; - } - return mRetriever->setDataSource(url); + player_type playerType = getPlayerType(url); + LOGV("player type = %d", playerType); + sp p = createRetriever(playerType); + if (p == NULL) return NO_INIT; + status_t ret = p->setDataSource(url); + if (ret == NO_ERROR) mRetriever = p; + return ret; } status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t length) @@ -118,7 +153,7 @@ status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t int ret = fstat(fd, &sb); if (ret != 0) { LOGE("fstat(%d) failed: %d, %s", fd, ret, strerror(errno)); - return UNKNOWN_ERROR; + return BAD_VALUE; } LOGV("st_dev = %llu", sb.st_dev); LOGV("st_mode = %u", sb.st_mode); @@ -129,13 +164,22 @@ status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t if (offset >= sb.st_size) { LOGE("offset (%lld) bigger than file size (%llu)", offset, sb.st_size); ::close(fd); - return UNKNOWN_ERROR; + return BAD_VALUE; } if (offset + length > sb.st_size) { length = sb.st_size - offset; - LOGE("calculated length = %lld", length); + LOGV("calculated length = %lld", length); + } + + player_type playerType = getPlayerType(fd, offset, length); + LOGV("player type = %d", playerType); + sp p = createRetriever(playerType); + if (p == NULL) { + ::close(fd); + return NO_INIT; } - status_t status = mRetriever->setDataSource(fd, offset, length); + status_t status = p->setDataSource(fd, offset, length); + if (status == NO_ERROR) mRetriever = p; ::close(fd); return status; } -- cgit v1.1 From a569aebd284506058a34d9772ebb28c8dac09aa3 Mon Sep 17 00:00:00 2001 From: James Dong Date: Tue, 29 Sep 2009 10:45:27 -0700 Subject: Fix some metadata retriever issues: 1. mRetriever was initialized twice: one in the constructor and the other in the setDataSource 2. cached the mode so that setMode can still be called before setDataSource. mRetriever won't be initialized until data source is set; thus we have to do this --- .../MetadataRetrieverClient.cpp | 50 +++++++++++----------- 1 file changed, 26 insertions(+), 24 deletions(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index b34421d..ddd4e24 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -51,15 +51,8 @@ MetadataRetrieverClient::MetadataRetrieverClient(pid_t pid) mAlbumArtDealer = NULL; mThumbnail = NULL; mAlbumArt = NULL; - -#ifndef NO_OPENCORE - mRetriever = new PVMetadataRetriever(); -#else mRetriever = NULL; -#endif - if (mRetriever == NULL) { - LOGE("failed to initialize the retriever"); - } + mMode = METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL; } MetadataRetrieverClient::~MetadataRetrieverClient() @@ -74,7 +67,7 @@ status_t MetadataRetrieverClient::dump(int fd, const Vector& args) con char buffer[SIZE]; String8 result; result.append(" MetadataRetrieverClient\n"); - snprintf(buffer, 255, " pid(%d)\n", mPid); + snprintf(buffer, 255, " pid(%d) mode(%d)\n", mPid, mMode); result.append(buffer); write(fd, result.string(), result.size()); write(fd, "\n", 1); @@ -90,6 +83,7 @@ void MetadataRetrieverClient::disconnect() mAlbumArtDealer.clear(); mThumbnail.clear(); mAlbumArt.clear(); + mMode = METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL; IPCThreadState::self()->flushCommands(); } @@ -134,7 +128,10 @@ status_t MetadataRetrieverClient::setDataSource(const char *url) LOGV("player type = %d", playerType); sp p = createRetriever(playerType); if (p == NULL) return NO_INIT; - status_t ret = p->setDataSource(url); + status_t ret = p->setMode(mMode); + if (ret == NO_ERROR) { + ret = p->setDataSource(url); + } if (ret == NO_ERROR) mRetriever = p; return ret; } @@ -143,12 +140,6 @@ status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t { LOGV("setDataSource fd=%d, offset=%lld, length=%lld", fd, offset, length); Mutex::Autolock lock(mLock); - if (mRetriever == NULL) { - LOGE("retriever is not initialized"); - ::close(fd); - return NO_INIT; - } - struct stat sb; int ret = fstat(fd, &sb); if (ret != 0) { @@ -178,7 +169,10 @@ status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t ::close(fd); return NO_INIT; } - status_t status = p->setDataSource(fd, offset, length); + status_t status = p->setMode(mMode); + if (status == NO_ERROR) { + p->setDataSource(fd, offset, length); + } if (status == NO_ERROR) mRetriever = p; ::close(fd); return status; @@ -188,22 +182,30 @@ status_t MetadataRetrieverClient::setMode(int mode) { LOGV("setMode"); Mutex::Autolock lock(mLock); - if (mRetriever == NULL) { - LOGE("retriever is not initialized"); - return NO_INIT; + if (mode < METADATA_MODE_NOOP || + mode > METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL) { + LOGE("invalid mode %d", mode); + return BAD_VALUE; } - return mRetriever->setMode(mode); + mMode = mode; + return NO_ERROR; } status_t MetadataRetrieverClient::getMode(int* mode) const { LOGV("getMode"); Mutex::Autolock lock(mLock); + + // TODO: + // This may not be necessary. + // If setDataSource() has not been called, return the cached value + // otherwise, return the value retrieved from the retriever if (mRetriever == NULL) { - LOGE("retriever is not initialized"); - return NO_INIT; + *mode = mMode; + } else { + mRetriever->getMode(mode); } - return mRetriever->getMode(mode); + return NO_ERROR; } sp MetadataRetrieverClient::captureFrame() -- cgit v1.1 From 2a4a7d5af053a17586a262a1267ba993e31790f1 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Tue, 6 Oct 2009 16:20:44 -0700 Subject: Split the ColorConverter off SoftwareRenderer, metadata support in stagefright. --- media/libmediaplayerservice/MetadataRetrieverClient.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index ddd4e24..9a0d692 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -37,6 +37,7 @@ #include "VorbisMetadataRetriever.h" #include "MidiMetadataRetriever.h" #include "MetadataRetrieverClient.h" +#include "StagefrightMetadataRetriever.h" namespace android { @@ -105,9 +106,15 @@ static sp createRetriever(player_type playerType) LOGV("create midi metadata retriever"); p = new MidiMetadataRetriever(); break; +#if BUILD_WITH_FULL_STAGEFRIGHT + case STAGEFRIGHT_PLAYER: + LOGV("create StagefrightMetadataRetriever"); + p = new StagefrightMetadataRetriever; + break; +#endif default: // TODO: - // support for STAGEFRIGHT_PLAYER and TEST_PLAYER + // support for TEST_PLAYER LOGE("player type %d is not supported", playerType); break; } -- cgit v1.1 From 41fbe930c0c128bcded1348e60d7d9e8f79d8a77 Mon Sep 17 00:00:00 2001 From: Dave Sparks Date: Mon, 26 Oct 2009 16:28:26 -0700 Subject: Run the metadataretriever at background priority. Bug 2187133. This change forces metadata retreiver threads to background priority. Uses an inner class to encapsulate the priority change so that it automatically restores priority when returning to the client. --- .../MetadataRetrieverClient.cpp | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index ddd4e24..8eabe5d 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -21,6 +21,7 @@ #include #include +#include #include #include @@ -38,6 +39,18 @@ #include "MidiMetadataRetriever.h" #include "MetadataRetrieverClient.h" +/* desktop Linux needs a little help with gettid() */ +#if defined(HAVE_GETTID) && !defined(HAVE_ANDROID_OS) +#define __KERNEL__ +# include +#ifdef _syscall0 +_syscall0(pid_t,gettid) +#else +pid_t gettid() { return syscall(__NR_gettid);} +#endif +#undef __KERNEL__ +#endif + namespace android { extern player_type getPlayerType(const char* url); @@ -212,6 +225,7 @@ sp MetadataRetrieverClient::captureFrame() { LOGV("captureFrame"); Mutex::Autolock lock(mLock); + Priority priority(ANDROID_PRIORITY_BACKGROUND); mThumbnail.clear(); mThumbnailDealer.clear(); if (mRetriever == NULL) { @@ -253,6 +267,7 @@ sp MetadataRetrieverClient::extractAlbumArt() { LOGV("extractAlbumArt"); Mutex::Autolock lock(mLock); + Priority priority(ANDROID_PRIORITY_BACKGROUND); mAlbumArt.clear(); mAlbumArtDealer.clear(); if (mRetriever == NULL) { @@ -294,7 +309,19 @@ const char* MetadataRetrieverClient::extractMetadata(int keyCode) LOGE("retriever is not initialized"); return NULL; } + Priority priority(ANDROID_PRIORITY_BACKGROUND); return mRetriever->extractMetadata(keyCode); } +MetadataRetrieverClient::Priority::Priority(int newPriority) +{ + mOldPriority = getpriority(PRIO_PROCESS, 0); + setpriority(PRIO_PROCESS, 0, newPriority); +} + +MetadataRetrieverClient::Priority::~Priority() +{ + setpriority(PRIO_PROCESS, 0, mOldPriority); +} + }; // namespace android -- cgit v1.1 From 5b65c7043dada0c89d3a941742666ac40ea35746 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Thu, 5 Nov 2009 12:04:22 -0800 Subject: DO NOT MERGE: Squashed commit of the following: commit 08259dd3dc9026887f9bbfedaf45866eb56ea9bc Author: Andreas Huber Date: Thu Nov 5 12:02:31 2009 -0800 DO NOT MERGE: Use PV for metadata extraction even if stagefright is used for playback. commit 991832fe4dc012e51d3d9ed8d647c7f09991858f Author: Andreas Huber Date: Thu Nov 5 11:24:11 2009 -0800 DO NOT MERGE: Do not assert if we encounter OMX_StateInvalid. All bets are off though. commit cec45cf302d9218fe79956cbe8a462d7ca3a10bb Author: Andreas Huber Date: Mon Oct 26 16:11:54 2009 -0700 DO NOT MERGE: When freeing an OMX node, attempt to transition it from its current state all the way to "Loaded" in order to properly free any allocated buffers. commit 34a1e885ef9113d68acbc26d36fcc47fdebbed84 Author: Andreas Huber Date: Thu Nov 5 11:10:49 2009 -0800 DO NOT MERGE: Fix heap corruptin in OMXNodeInstance. commit 5a47f7439a1298b330541a7e4e647a8b44487388 Author: Andreas Huber Date: Thu Nov 5 11:08:19 2009 -0800 DO NOT MERGE: Fix seek-on-initial-read behaviour of OMXCodec. commit 45bed64722501b9f411a2940aff5aff4cc4d2e98 Author: Andreas Huber Date: Thu Nov 5 11:02:23 2009 -0800 DO NOT MERGE: Renaming string.h to stagefright_string.h to avoid conflicts. commit 6738e306a50196f31a73d4fc7b7c45faff639903 Author: Andreas Huber Date: Thu Oct 15 13:46:54 2009 -0700 DO NOT MERGE: Reimplement the OMX backend for stagefright. Besides a major cleanup and refactoring, OMX is now a singleton living in the media server, it listens for death notifications of node observers/clients that allocated OMX nodes and performs/attempts cleanup. Changed APIs to conform to the rest of the system. --- media/libmediaplayerservice/MetadataRetrieverClient.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index 8eabe5d..2cdc351 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -138,6 +138,12 @@ status_t MetadataRetrieverClient::setDataSource(const char *url) return UNKNOWN_ERROR; } player_type playerType = getPlayerType(url); +#if !defined(NO_OPENCORE) && defined(BUILD_WITH_FULL_STAGEFRIGHT) + if (playerType == STAGEFRIGHT_PLAYER) { + // Stagefright doesn't support metadata in this branch yet. + playerType = PV_PLAYER; + } +#endif LOGV("player type = %d", playerType); sp p = createRetriever(playerType); if (p == NULL) return NO_INIT; @@ -176,6 +182,12 @@ status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t } player_type playerType = getPlayerType(fd, offset, length); +#if !defined(NO_OPENCORE) && defined(BUILD_WITH_FULL_STAGEFRIGHT) + if (playerType == STAGEFRIGHT_PLAYER) { + // Stagefright doesn't support metadata in this branch yet. + playerType = PV_PLAYER; + } +#endif LOGV("player type = %d", playerType); sp p = createRetriever(playerType); if (p == NULL) { -- cgit v1.1 From ec4dde75955f87e5afea3f59ef991130257f3f3a Mon Sep 17 00:00:00 2001 From: Dave Sparks Date: Mon, 23 Nov 2009 16:51:15 -0800 Subject: Set metadata retriever thread group to the caller's group. This patch modifies the native binder interface to the metadata retriever to pass the caller's thread group across the binder interface. On the server side, the thread scheduler group is set to the caller's scheduler group temporarily and restored after the request has completed. This patch also reverts a previous patch where the priority of the thread was forced to a low priority foreground thread. This should give apps more control over the priority of their metadata retrieval, particularly allow background process to run without hogging the CPU. --- media/libmediaplayerservice/MetadataRetrieverClient.cpp | 14 -------------- 1 file changed, 14 deletions(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index 2cdc351..d51ce66 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -237,7 +237,6 @@ sp MetadataRetrieverClient::captureFrame() { LOGV("captureFrame"); Mutex::Autolock lock(mLock); - Priority priority(ANDROID_PRIORITY_BACKGROUND); mThumbnail.clear(); mThumbnailDealer.clear(); if (mRetriever == NULL) { @@ -279,7 +278,6 @@ sp MetadataRetrieverClient::extractAlbumArt() { LOGV("extractAlbumArt"); Mutex::Autolock lock(mLock); - Priority priority(ANDROID_PRIORITY_BACKGROUND); mAlbumArt.clear(); mAlbumArtDealer.clear(); if (mRetriever == NULL) { @@ -321,19 +319,7 @@ const char* MetadataRetrieverClient::extractMetadata(int keyCode) LOGE("retriever is not initialized"); return NULL; } - Priority priority(ANDROID_PRIORITY_BACKGROUND); return mRetriever->extractMetadata(keyCode); } -MetadataRetrieverClient::Priority::Priority(int newPriority) -{ - mOldPriority = getpriority(PRIO_PROCESS, 0); - setpriority(PRIO_PROCESS, 0, newPriority); -} - -MetadataRetrieverClient::Priority::~Priority() -{ - setpriority(PRIO_PROCESS, 0, mOldPriority); -} - }; // namespace android -- cgit v1.1 From 47945ea184f62def4c5a1dd15164cfa3fd286882 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Thu, 17 Dec 2009 13:31:13 -0800 Subject: Disable HTTP playback and metadata support in stagefright, use PV instead. --- media/libmediaplayerservice/MetadataRetrieverClient.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index 0fcfb8e..3572b52 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -105,6 +105,17 @@ static sp createRetriever(player_type playerType) { sp p; switch (playerType) { +#if BUILD_WITH_FULL_STAGEFRIGHT + case STAGEFRIGHT_PLAYER: + // For now we are going to keep using PV for meta-data support + // until stagefright is up to par. + + // LOGV("create StagefrightMetadataRetriever"); + // p = new StagefrightMetadataRetriever; + // break; + + // fall through to PV_PLAYER +#endif #ifndef NO_OPENCORE case PV_PLAYER: LOGV("create pv metadata retriever"); @@ -119,12 +130,6 @@ static sp createRetriever(player_type playerType) LOGV("create midi metadata retriever"); p = new MidiMetadataRetriever(); break; -#if BUILD_WITH_FULL_STAGEFRIGHT - case STAGEFRIGHT_PLAYER: - LOGV("create StagefrightMetadataRetriever"); - p = new StagefrightMetadataRetriever; - break; -#endif default: // TODO: // support for TEST_PLAYER -- cgit v1.1 From 065c05e72091567632f927d9e5411e277480c1bf Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Mon, 4 Jan 2010 15:02:02 -0800 Subject: Make metadata support through stagefright property dependent until it's ready. --- .../libmediaplayerservice/MetadataRetrieverClient.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index 3572b52..66de2ee 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -27,6 +27,7 @@ #include #include +#include #include #include #include @@ -107,14 +108,17 @@ static sp createRetriever(player_type playerType) switch (playerType) { #if BUILD_WITH_FULL_STAGEFRIGHT case STAGEFRIGHT_PLAYER: - // For now we are going to keep using PV for meta-data support - // until stagefright is up to par. + { + char value[PROPERTY_VALUE_MAX]; + if (property_get("media.stagefright.enable-meta", value, NULL) + && (!strcmp(value, "1") || !strcasecmp(value, "true"))) { + LOGV("create StagefrightMetadataRetriever"); + p = new StagefrightMetadataRetriever; + break; + } - // LOGV("create StagefrightMetadataRetriever"); - // p = new StagefrightMetadataRetriever; - // break; - - // fall through to PV_PLAYER + // fall through + } #endif #ifndef NO_OPENCORE case PV_PLAYER: -- cgit v1.1 From 867d2f6ce668968e463eb86b856d21525f12fd67 Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Mon, 25 Jan 2010 19:00:00 -0800 Subject: Simplify the MemoryDealer implementation At some point the implementation became complicated because of SurfaceFlinger's special needs, since we are now relying on gralloc we can go back to much simpler MemoryDealer. Removed HeapInterface and AllocatorInterface, since those don't need to be paramterized anymore. Merged SimpleMemory and Allocation. Made SimplisticAllocator non virtual. Removed MemoryDealer flags (READ_ONLY, PAGE_ALIGNED) Removed a lot of unneeded code. --- media/libmediaplayerservice/MetadataRetrieverClient.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index 66de2ee..162bebb 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -253,7 +253,7 @@ sp MetadataRetrieverClient::captureFrame() return NULL; } size_t size = sizeof(VideoFrame) + frame->mSize; - mThumbnailDealer = new MemoryDealer(size); + mThumbnailDealer = new MemoryDealer(size, "MetadataRetrieverClient"); if (mThumbnailDealer == NULL) { LOGE("failed to create MemoryDealer"); delete frame; @@ -294,7 +294,7 @@ sp MetadataRetrieverClient::extractAlbumArt() return NULL; } size_t size = sizeof(MediaAlbumArt) + albumArt->mSize; - mAlbumArtDealer = new MemoryDealer(size); + mAlbumArtDealer = new MemoryDealer(size, "MetadataRetrieverClient"); if (mAlbumArtDealer == NULL) { LOGE("failed to create MemoryDealer object"); delete albumArt; -- cgit v1.1 From 6b3359d4669f539c173bfc40809deb8ffde3dd0c Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Fri, 29 Jan 2010 17:16:30 -0800 Subject: Don't use MemoryDealer in MetadataRetrieverClient as it's not necessary. Use a MemoryHeapBase directly instead. --- .../MetadataRetrieverClient.cpp | 23 ++++++++-------------- 1 file changed, 8 insertions(+), 15 deletions(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index 162bebb..550b84d 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -28,7 +28,8 @@ #include #include #include -#include +#include +#include #include #include #include @@ -62,8 +63,6 @@ MetadataRetrieverClient::MetadataRetrieverClient(pid_t pid) { LOGV("MetadataRetrieverClient constructor pid(%d)", pid); mPid = pid; - mThumbnailDealer = NULL; - mAlbumArtDealer = NULL; mThumbnail = NULL; mAlbumArt = NULL; mRetriever = NULL; @@ -94,8 +93,6 @@ void MetadataRetrieverClient::disconnect() LOGV("disconnect from pid %d", mPid); Mutex::Autolock lock(mLock); mRetriever.clear(); - mThumbnailDealer.clear(); - mAlbumArtDealer.clear(); mThumbnail.clear(); mAlbumArt.clear(); mMode = METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL; @@ -242,7 +239,6 @@ sp MetadataRetrieverClient::captureFrame() LOGV("captureFrame"); Mutex::Autolock lock(mLock); mThumbnail.clear(); - mThumbnailDealer.clear(); if (mRetriever == NULL) { LOGE("retriever is not initialized"); return NULL; @@ -253,16 +249,15 @@ sp MetadataRetrieverClient::captureFrame() return NULL; } size_t size = sizeof(VideoFrame) + frame->mSize; - mThumbnailDealer = new MemoryDealer(size, "MetadataRetrieverClient"); - if (mThumbnailDealer == NULL) { + sp heap = new MemoryHeapBase(size, 0, "MetadataRetrieverClient"); + if (heap == NULL) { LOGE("failed to create MemoryDealer"); delete frame; return NULL; } - mThumbnail = mThumbnailDealer->allocate(size); + mThumbnail = new MemoryBase(heap, 0, size); if (mThumbnail == NULL) { LOGE("not enough memory for VideoFrame size=%u", size); - mThumbnailDealer.clear(); delete frame; return NULL; } @@ -283,7 +278,6 @@ sp MetadataRetrieverClient::extractAlbumArt() LOGV("extractAlbumArt"); Mutex::Autolock lock(mLock); mAlbumArt.clear(); - mAlbumArtDealer.clear(); if (mRetriever == NULL) { LOGE("retriever is not initialized"); return NULL; @@ -294,16 +288,15 @@ sp MetadataRetrieverClient::extractAlbumArt() return NULL; } size_t size = sizeof(MediaAlbumArt) + albumArt->mSize; - mAlbumArtDealer = new MemoryDealer(size, "MetadataRetrieverClient"); - if (mAlbumArtDealer == NULL) { + sp heap = new MemoryHeapBase(size, 0, "MetadataRetrieverClient"); + if (heap == NULL) { LOGE("failed to create MemoryDealer object"); delete albumArt; return NULL; } - mAlbumArt = mAlbumArtDealer->allocate(size); + mAlbumArt = new MemoryBase(heap, 0, size); if (mAlbumArt == NULL) { LOGE("not enough memory for MediaAlbumArt size=%u", size); - mAlbumArtDealer.clear(); delete albumArt; return NULL; } -- cgit v1.1 From 608d77b1cf4fb9f63dc861e4e1fa3e80a732f626 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Wed, 23 Jun 2010 16:40:57 -0700 Subject: Remove most stagefright property overrides, remove VorbisPlayer and VorbisMetadataRetriever as this functionality is now provided by stagefright. Change-Id: Ieafe75a4550c273ad59b4518d7cd4c0fce0f7cce related-to-bug: 2370115 --- .../libmediaplayerservice/MetadataRetrieverClient.cpp | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index 550b84d..ca229fa 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -37,7 +37,6 @@ #include #include #include -#include "VorbisMetadataRetriever.h" #include "MidiMetadataRetriever.h" #include "MetadataRetrieverClient.h" #include "StagefrightMetadataRetriever.h" @@ -103,30 +102,17 @@ static sp createRetriever(player_type playerType) { sp p; switch (playerType) { -#if BUILD_WITH_FULL_STAGEFRIGHT case STAGEFRIGHT_PLAYER: { - char value[PROPERTY_VALUE_MAX]; - if (property_get("media.stagefright.enable-meta", value, NULL) - && (!strcmp(value, "1") || !strcasecmp(value, "true"))) { - LOGV("create StagefrightMetadataRetriever"); - p = new StagefrightMetadataRetriever; - break; - } - - // fall through + p = new StagefrightMetadataRetriever; + break; } -#endif #ifndef NO_OPENCORE case PV_PLAYER: LOGV("create pv metadata retriever"); p = new PVMetadataRetriever(); break; #endif - case VORBIS_PLAYER: - LOGV("create vorbis metadata retriever"); - p = new VorbisMetadataRetriever(); - break; case SONIVOX_PLAYER: LOGV("create midi metadata retriever"); p = new MidiMetadataRetriever(); -- cgit v1.1 From ce0febae177d1816ee7a6750ed9fba52472b9a71 Mon Sep 17 00:00:00 2001 From: James Dong Date: Mon, 8 Nov 2010 16:04:27 -0800 Subject: Support extracting thumbnail from rotated video tracks Change-Id: Ife0a2536aaac5ff1efdf1035b9d2c892773ee16c --- media/libmediaplayerservice/MetadataRetrieverClient.cpp | 2 ++ 1 file changed, 2 insertions(+) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index ca229fa..39fce81 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -253,6 +253,8 @@ sp MetadataRetrieverClient::captureFrame() frameCopy->mDisplayWidth = frame->mDisplayWidth; frameCopy->mDisplayHeight = frame->mDisplayHeight; frameCopy->mSize = frame->mSize; + frameCopy->mRotationAngle = frame->mRotationAngle; + LOGV("rotation: %d", frameCopy->mRotationAngle); frameCopy->mData = (uint8_t *)frameCopy + sizeof(VideoFrame); memcpy(frameCopy->mData, frame->mData, frame->mSize); delete frame; // Fix memory leakage -- cgit v1.1 From 30d713a1c18a5ff892a7f13b2524ba624b70890a Mon Sep 17 00:00:00 2001 From: James Dong Date: Wed, 10 Nov 2010 18:42:40 -0800 Subject: Remove legacy PV stuff Change-Id: I60ffea7c65592df4b3a80c590c863f1f79b371fd --- media/libmediaplayerservice/MetadataRetrieverClient.cpp | 7 ------- 1 file changed, 7 deletions(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index 39fce81..b069345 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -35,7 +35,6 @@ #include #include #include -#include #include #include "MidiMetadataRetriever.h" #include "MetadataRetrieverClient.h" @@ -107,12 +106,6 @@ static sp createRetriever(player_type playerType) p = new StagefrightMetadataRetriever; break; } -#ifndef NO_OPENCORE - case PV_PLAYER: - LOGV("create pv metadata retriever"); - p = new PVMetadataRetriever(); - break; -#endif case SONIVOX_PLAYER: LOGV("create midi metadata retriever"); p = new MidiMetadataRetriever(); -- cgit v1.1 From 16afe2fb439cab6125bb46a07a8078d4ce1c1ea5 Mon Sep 17 00:00:00 2001 From: James Dong Date: Thu, 2 Dec 2010 17:42:08 -0800 Subject: Prepare for publishing MediaMetadataRetriever as public API step one: o replaced captureFrame with getFrameAtTime o removed getMode bug - 2433195 Change-Id: I38a8cecef29014692f0b08b8818326e3ebb40a12 --- .../MetadataRetrieverClient.cpp | 23 +++------------------- 1 file changed, 3 insertions(+), 20 deletions(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index b069345..abaec02 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -196,33 +196,16 @@ status_t MetadataRetrieverClient::setMode(int mode) return NO_ERROR; } -status_t MetadataRetrieverClient::getMode(int* mode) const +sp MetadataRetrieverClient::getFrameAtTime(int64_t timeUs, int option) { - LOGV("getMode"); - Mutex::Autolock lock(mLock); - - // TODO: - // This may not be necessary. - // If setDataSource() has not been called, return the cached value - // otherwise, return the value retrieved from the retriever - if (mRetriever == NULL) { - *mode = mMode; - } else { - mRetriever->getMode(mode); - } - return NO_ERROR; -} - -sp MetadataRetrieverClient::captureFrame() -{ - LOGV("captureFrame"); + LOGV("getFrameAtTime: time(%lld us) option(%d)", timeUs, option); Mutex::Autolock lock(mLock); mThumbnail.clear(); if (mRetriever == NULL) { LOGE("retriever is not initialized"); return NULL; } - VideoFrame *frame = mRetriever->captureFrame(); + VideoFrame *frame = mRetriever->getFrameAtTime(timeUs, option); if (frame == NULL) { LOGE("failed to capture a video frame"); return NULL; -- cgit v1.1 From 7f7d52ac18dfc3c6d8f6267dad29306613e9bd0e Mon Sep 17 00:00:00 2001 From: James Dong Date: Thu, 6 Jan 2011 12:20:35 -0800 Subject: Publish MediaMetadataRetriever.java as public API o Removed setMode() methods and related mode constants o Removed some of the unused the metadata keys o Updated the javadoc o part of a multi-project change. bug - 2433195 Change-Id: I5ed167f1fd6a53cb143b7dc385b149431d434438 --- .../MetadataRetrieverClient.cpp | 27 +++------------------- 1 file changed, 3 insertions(+), 24 deletions(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index abaec02..5fcf2a7 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -64,7 +64,6 @@ MetadataRetrieverClient::MetadataRetrieverClient(pid_t pid) mThumbnail = NULL; mAlbumArt = NULL; mRetriever = NULL; - mMode = METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL; } MetadataRetrieverClient::~MetadataRetrieverClient() @@ -79,7 +78,7 @@ status_t MetadataRetrieverClient::dump(int fd, const Vector& args) con char buffer[SIZE]; String8 result; result.append(" MetadataRetrieverClient\n"); - snprintf(buffer, 255, " pid(%d) mode(%d)\n", mPid, mMode); + snprintf(buffer, 255, " pid(%d)\n", mPid); result.append(buffer); write(fd, result.string(), result.size()); write(fd, "\n", 1); @@ -93,7 +92,6 @@ void MetadataRetrieverClient::disconnect() mRetriever.clear(); mThumbnail.clear(); mAlbumArt.clear(); - mMode = METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL; IPCThreadState::self()->flushCommands(); } @@ -133,10 +131,7 @@ status_t MetadataRetrieverClient::setDataSource(const char *url) LOGV("player type = %d", playerType); sp p = createRetriever(playerType); if (p == NULL) return NO_INIT; - status_t ret = p->setMode(mMode); - if (ret == NO_ERROR) { - ret = p->setDataSource(url); - } + status_t ret = p->setDataSource(url); if (ret == NO_ERROR) mRetriever = p; return ret; } @@ -174,28 +169,12 @@ status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t ::close(fd); return NO_INIT; } - status_t status = p->setMode(mMode); - if (status == NO_ERROR) { - p->setDataSource(fd, offset, length); - } + status_t status = p->setDataSource(fd, offset, length); if (status == NO_ERROR) mRetriever = p; ::close(fd); return status; } -status_t MetadataRetrieverClient::setMode(int mode) -{ - LOGV("setMode"); - Mutex::Autolock lock(mLock); - if (mode < METADATA_MODE_NOOP || - mode > METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL) { - LOGE("invalid mode %d", mode); - return BAD_VALUE; - } - mMode = mode; - return NO_ERROR; -} - sp MetadataRetrieverClient::getFrameAtTime(int64_t timeUs, int option) { LOGV("getFrameAtTime: time(%lld us) option(%d)", timeUs, option); -- cgit v1.1 From af8791e112c8072452bd14ef3c43a47511d19542 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Mon, 21 Mar 2011 10:25:44 -0700 Subject: Support passing headers to MediaMetadataRetriever's setDataSource API Change-Id: Ib1a5c08fc5034cac05034db27007a35c9b660b26 related-to-bug: 3506316 --- media/libmediaplayerservice/MetadataRetrieverClient.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index 5fcf2a7..8f776b4 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -120,7 +120,8 @@ static sp createRetriever(player_type playerType) return p; } -status_t MetadataRetrieverClient::setDataSource(const char *url) +status_t MetadataRetrieverClient::setDataSource( + const char *url, const KeyedVector *headers) { LOGV("setDataSource(%s)", url); Mutex::Autolock lock(mLock); @@ -131,7 +132,7 @@ status_t MetadataRetrieverClient::setDataSource(const char *url) LOGV("player type = %d", playerType); sp p = createRetriever(playerType); if (p == NULL) return NO_INIT; - status_t ret = p->setDataSource(url); + status_t ret = p->setDataSource(url, headers); if (ret == NO_ERROR) mRetriever = p; return ret; } -- cgit v1.1 From 0512ab559d4670c2204078470d7ef5d376811c57 Mon Sep 17 00:00:00 2001 From: Glenn Kasten Date: Wed, 4 May 2011 17:58:57 -0700 Subject: Remove dead code related to gettid The gettid system call is always available now. Change-Id: Ib78b41781eda182dc8605daf456bbea7ff7c2dc0 --- media/libmediaplayerservice/MetadataRetrieverClient.cpp | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index 8f776b4..06fb103 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -40,18 +40,6 @@ #include "MetadataRetrieverClient.h" #include "StagefrightMetadataRetriever.h" -/* desktop Linux needs a little help with gettid() */ -#if defined(HAVE_GETTID) && !defined(HAVE_ANDROID_OS) -#define __KERNEL__ -# include -#ifdef _syscall0 -_syscall0(pid_t,gettid) -#else -pid_t gettid() { return syscall(__NR_gettid);} -#endif -#undef __KERNEL__ -#endif - namespace android { extern player_type getPlayerType(const char* url); -- cgit v1.1 From b8e9897b8ad5d722e424d7a7e256153307ecbd93 Mon Sep 17 00:00:00 2001 From: Glenn Kasten Date: Tue, 14 Jun 2011 17:56:13 -0700 Subject: Remove unneeded #include Suggested in code review for previous change. Change-Id: Ic3225b240367dc6c9bf56fb4498fb8a0f9f806ec --- media/libmediaplayerservice/MetadataRetrieverClient.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index 06fb103..d574ea3 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -21,7 +21,6 @@ #include #include -#include #include #include -- cgit v1.1 From 3856b090cd04ba5dd4a59a12430ed724d5995909 Mon Sep 17 00:00:00 2001 From: Steve Block Date: Thu, 20 Oct 2011 11:56:00 +0100 Subject: Rename (IF_)LOGV(_IF) to (IF_)ALOGV(_IF) DO NOT MERGE See https://android-git.corp.google.com/g/#/c/143865 Bug: 5449033 Change-Id: I0122812ed6ff6f5b59fe4a43ab8bff0577adde0a --- .../MetadataRetrieverClient.cpp | 36 +++++++++++----------- 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index d574ea3..f945c6a 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -46,7 +46,7 @@ extern player_type getPlayerType(int fd, int64_t offset, int64_t length); MetadataRetrieverClient::MetadataRetrieverClient(pid_t pid) { - LOGV("MetadataRetrieverClient constructor pid(%d)", pid); + ALOGV("MetadataRetrieverClient constructor pid(%d)", pid); mPid = pid; mThumbnail = NULL; mAlbumArt = NULL; @@ -55,7 +55,7 @@ MetadataRetrieverClient::MetadataRetrieverClient(pid_t pid) MetadataRetrieverClient::~MetadataRetrieverClient() { - LOGV("MetadataRetrieverClient destructor"); + ALOGV("MetadataRetrieverClient destructor"); disconnect(); } @@ -74,7 +74,7 @@ status_t MetadataRetrieverClient::dump(int fd, const Vector& args) con void MetadataRetrieverClient::disconnect() { - LOGV("disconnect from pid %d", mPid); + ALOGV("disconnect from pid %d", mPid); Mutex::Autolock lock(mLock); mRetriever.clear(); mThumbnail.clear(); @@ -92,7 +92,7 @@ static sp createRetriever(player_type playerType) break; } case SONIVOX_PLAYER: - LOGV("create midi metadata retriever"); + ALOGV("create midi metadata retriever"); p = new MidiMetadataRetriever(); break; default: @@ -110,13 +110,13 @@ static sp createRetriever(player_type playerType) status_t MetadataRetrieverClient::setDataSource( const char *url, const KeyedVector *headers) { - LOGV("setDataSource(%s)", url); + ALOGV("setDataSource(%s)", url); Mutex::Autolock lock(mLock); if (url == NULL) { return UNKNOWN_ERROR; } player_type playerType = getPlayerType(url); - LOGV("player type = %d", playerType); + ALOGV("player type = %d", playerType); sp p = createRetriever(playerType); if (p == NULL) return NO_INIT; status_t ret = p->setDataSource(url, headers); @@ -126,7 +126,7 @@ status_t MetadataRetrieverClient::setDataSource( status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t length) { - LOGV("setDataSource fd=%d, offset=%lld, length=%lld", fd, offset, length); + ALOGV("setDataSource fd=%d, offset=%lld, length=%lld", fd, offset, length); Mutex::Autolock lock(mLock); struct stat sb; int ret = fstat(fd, &sb); @@ -134,11 +134,11 @@ status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t LOGE("fstat(%d) failed: %d, %s", fd, ret, strerror(errno)); return BAD_VALUE; } - LOGV("st_dev = %llu", sb.st_dev); - LOGV("st_mode = %u", sb.st_mode); - LOGV("st_uid = %lu", sb.st_uid); - LOGV("st_gid = %lu", sb.st_gid); - LOGV("st_size = %llu", sb.st_size); + ALOGV("st_dev = %llu", sb.st_dev); + ALOGV("st_mode = %u", sb.st_mode); + ALOGV("st_uid = %lu", sb.st_uid); + ALOGV("st_gid = %lu", sb.st_gid); + ALOGV("st_size = %llu", sb.st_size); if (offset >= sb.st_size) { LOGE("offset (%lld) bigger than file size (%llu)", offset, sb.st_size); @@ -147,11 +147,11 @@ status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t } if (offset + length > sb.st_size) { length = sb.st_size - offset; - LOGV("calculated length = %lld", length); + ALOGV("calculated length = %lld", length); } player_type playerType = getPlayerType(fd, offset, length); - LOGV("player type = %d", playerType); + ALOGV("player type = %d", playerType); sp p = createRetriever(playerType); if (p == NULL) { ::close(fd); @@ -165,7 +165,7 @@ status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t sp MetadataRetrieverClient::getFrameAtTime(int64_t timeUs, int option) { - LOGV("getFrameAtTime: time(%lld us) option(%d)", timeUs, option); + ALOGV("getFrameAtTime: time(%lld us) option(%d)", timeUs, option); Mutex::Autolock lock(mLock); mThumbnail.clear(); if (mRetriever == NULL) { @@ -197,7 +197,7 @@ sp MetadataRetrieverClient::getFrameAtTime(int64_t timeUs, int option) frameCopy->mDisplayHeight = frame->mDisplayHeight; frameCopy->mSize = frame->mSize; frameCopy->mRotationAngle = frame->mRotationAngle; - LOGV("rotation: %d", frameCopy->mRotationAngle); + ALOGV("rotation: %d", frameCopy->mRotationAngle); frameCopy->mData = (uint8_t *)frameCopy + sizeof(VideoFrame); memcpy(frameCopy->mData, frame->mData, frame->mSize); delete frame; // Fix memory leakage @@ -206,7 +206,7 @@ sp MetadataRetrieverClient::getFrameAtTime(int64_t timeUs, int option) sp MetadataRetrieverClient::extractAlbumArt() { - LOGV("extractAlbumArt"); + ALOGV("extractAlbumArt"); Mutex::Autolock lock(mLock); mAlbumArt.clear(); if (mRetriever == NULL) { @@ -241,7 +241,7 @@ sp MetadataRetrieverClient::extractAlbumArt() const char* MetadataRetrieverClient::extractMetadata(int keyCode) { - LOGV("extractMetadata"); + ALOGV("extractMetadata"); Mutex::Autolock lock(mLock); if (mRetriever == NULL) { LOGE("retriever is not initialized"); -- cgit v1.1 From 29357bc2c0dd7c43ad3bd0c8e3efa4e6fd9bfd47 Mon Sep 17 00:00:00 2001 From: Steve Block Date: Fri, 6 Jan 2012 19:20:56 +0000 Subject: Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF) DO NOT MERGE See https://android-git.corp.google.com/g/#/c/157220 Bug: 5449033 Change-Id: Ic9c19d30693bd56755f55906127cd6bd7126096c --- .../MetadataRetrieverClient.cpp | 26 +++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index f945c6a..7dbb57f 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -98,11 +98,11 @@ static sp createRetriever(player_type playerType) default: // TODO: // support for TEST_PLAYER - LOGE("player type %d is not supported", playerType); + ALOGE("player type %d is not supported", playerType); break; } if (p == NULL) { - LOGE("failed to create a retriever object"); + ALOGE("failed to create a retriever object"); } return p; } @@ -131,7 +131,7 @@ status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t struct stat sb; int ret = fstat(fd, &sb); if (ret != 0) { - LOGE("fstat(%d) failed: %d, %s", fd, ret, strerror(errno)); + ALOGE("fstat(%d) failed: %d, %s", fd, ret, strerror(errno)); return BAD_VALUE; } ALOGV("st_dev = %llu", sb.st_dev); @@ -141,7 +141,7 @@ status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t ALOGV("st_size = %llu", sb.st_size); if (offset >= sb.st_size) { - LOGE("offset (%lld) bigger than file size (%llu)", offset, sb.st_size); + ALOGE("offset (%lld) bigger than file size (%llu)", offset, sb.st_size); ::close(fd); return BAD_VALUE; } @@ -169,24 +169,24 @@ sp MetadataRetrieverClient::getFrameAtTime(int64_t timeUs, int option) Mutex::Autolock lock(mLock); mThumbnail.clear(); if (mRetriever == NULL) { - LOGE("retriever is not initialized"); + ALOGE("retriever is not initialized"); return NULL; } VideoFrame *frame = mRetriever->getFrameAtTime(timeUs, option); if (frame == NULL) { - LOGE("failed to capture a video frame"); + ALOGE("failed to capture a video frame"); return NULL; } size_t size = sizeof(VideoFrame) + frame->mSize; sp heap = new MemoryHeapBase(size, 0, "MetadataRetrieverClient"); if (heap == NULL) { - LOGE("failed to create MemoryDealer"); + ALOGE("failed to create MemoryDealer"); delete frame; return NULL; } mThumbnail = new MemoryBase(heap, 0, size); if (mThumbnail == NULL) { - LOGE("not enough memory for VideoFrame size=%u", size); + ALOGE("not enough memory for VideoFrame size=%u", size); delete frame; return NULL; } @@ -210,24 +210,24 @@ sp MetadataRetrieverClient::extractAlbumArt() Mutex::Autolock lock(mLock); mAlbumArt.clear(); if (mRetriever == NULL) { - LOGE("retriever is not initialized"); + ALOGE("retriever is not initialized"); return NULL; } MediaAlbumArt *albumArt = mRetriever->extractAlbumArt(); if (albumArt == NULL) { - LOGE("failed to extract an album art"); + ALOGE("failed to extract an album art"); return NULL; } size_t size = sizeof(MediaAlbumArt) + albumArt->mSize; sp heap = new MemoryHeapBase(size, 0, "MetadataRetrieverClient"); if (heap == NULL) { - LOGE("failed to create MemoryDealer object"); + ALOGE("failed to create MemoryDealer object"); delete albumArt; return NULL; } mAlbumArt = new MemoryBase(heap, 0, size); if (mAlbumArt == NULL) { - LOGE("not enough memory for MediaAlbumArt size=%u", size); + ALOGE("not enough memory for MediaAlbumArt size=%u", size); delete albumArt; return NULL; } @@ -244,7 +244,7 @@ const char* MetadataRetrieverClient::extractMetadata(int keyCode) ALOGV("extractMetadata"); Mutex::Autolock lock(mLock); if (mRetriever == NULL) { - LOGE("retriever is not initialized"); + ALOGE("retriever is not initialized"); return NULL; } return mRetriever->extractMetadata(keyCode); -- cgit v1.1 From afed0e1fa37473a4cd30018577b560acc79d9a3f Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Tue, 20 Sep 2011 15:39:58 -0700 Subject: Use NuPlayer for media playback everywhere if media.stagefright.use-nuplayer is set to true. Change-Id: Ibb217e7d7d5195b7feeea557554fe78e1585744c --- media/libmediaplayerservice/MetadataRetrieverClient.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'media/libmediaplayerservice/MetadataRetrieverClient.cpp') diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index 7dbb57f..776d288 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -87,6 +87,7 @@ static sp createRetriever(player_type playerType) sp p; switch (playerType) { case STAGEFRIGHT_PLAYER: + case NU_PLAYER: { p = new StagefrightMetadataRetriever; break; -- cgit v1.1