summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/StagefrightMetadataRetriever.cpp
diff options
context:
space:
mode:
authorJames Dong <jdong@google.com>2010-12-02 17:42:08 -0800
committerJames Dong <jdong@google.com>2010-12-03 15:32:47 -0800
commit16afe2fb439cab6125bb46a07a8078d4ce1c1ea5 (patch)
tree146e5ad9abfa370d35b2a8912a4887356764b1e2 /media/libstagefright/StagefrightMetadataRetriever.cpp
parent1cc73922339a110d7ffc47e8842f958492dd85bf (diff)
downloadframeworks_av-16afe2fb439cab6125bb46a07a8078d4ce1c1ea5.zip
frameworks_av-16afe2fb439cab6125bb46a07a8078d4ce1c1ea5.tar.gz
frameworks_av-16afe2fb439cab6125bb46a07a8078d4ce1c1ea5.tar.bz2
Prepare for publishing MediaMetadataRetriever as public API
step one: o replaced captureFrame with getFrameAtTime o removed getMode bug - 2433195 Change-Id: I38a8cecef29014692f0b08b8818326e3ebb40a12
Diffstat (limited to 'media/libstagefright/StagefrightMetadataRetriever.cpp')
-rw-r--r--media/libstagefright/StagefrightMetadataRetriever.cpp31
1 files changed, 24 insertions, 7 deletions
diff --git a/media/libstagefright/StagefrightMetadataRetriever.cpp b/media/libstagefright/StagefrightMetadataRetriever.cpp
index 763a914..c28de93 100644
--- a/media/libstagefright/StagefrightMetadataRetriever.cpp
+++ b/media/libstagefright/StagefrightMetadataRetriever.cpp
@@ -108,7 +108,10 @@ status_t StagefrightMetadataRetriever::setDataSource(
static VideoFrame *extractVideoFrameWithCodecFlags(
OMXClient *client,
const sp<MetaData> &trackMeta,
- const sp<MediaSource> &source, uint32_t flags) {
+ const sp<MediaSource> &source,
+ uint32_t flags,
+ int64_t frameTimeUs,
+ int seekMode) {
sp<MediaSource> decoder =
OMXCodec::Create(
client->interface(), source->getFormat(), false, source,
@@ -130,11 +133,22 @@ static VideoFrame *extractVideoFrameWithCodecFlags(
// and spurious empty buffers.
MediaSource::ReadOptions options;
+ if (seekMode < MediaSource::ReadOptions::SEEK_PREVIOUS_SYNC ||
+ seekMode > MediaSource::ReadOptions::SEEK_CLOSEST) {
+
+ LOGE("Unknown seek mode: %d", seekMode);
+ return NULL;
+ }
+
+ MediaSource::ReadOptions::SeekMode mode =
+ static_cast<MediaSource::ReadOptions::SeekMode>(seekMode);
+
int64_t thumbNailTime;
- if (trackMeta->findInt64(kKeyThumbnailTime, &thumbNailTime)) {
- options.setSeekTo(thumbNailTime);
+ if (frameTimeUs < 0 && trackMeta->findInt64(kKeyThumbnailTime, &thumbNailTime)) {
+ options.setSeekTo(thumbNailTime, mode);
} else {
thumbNailTime = -1;
+ options.setSeekTo(frameTimeUs, mode);
}
MediaBuffer *buffer = NULL;
@@ -238,9 +252,10 @@ static VideoFrame *extractVideoFrameWithCodecFlags(
return frame;
}
-VideoFrame *StagefrightMetadataRetriever::captureFrame() {
- LOGV("captureFrame");
+VideoFrame *StagefrightMetadataRetriever::getFrameAtTime(
+ int64_t timeUs, int option) {
+ LOGV("getFrameAtTime: %lld us option: %d", timeUs, option);
if (0 == (mMode & METADATA_MODE_FRAME_CAPTURE_ONLY)) {
LOGV("captureFrame disabled by mode (0x%08x)", mMode);
@@ -282,13 +297,15 @@ VideoFrame *StagefrightMetadataRetriever::captureFrame() {
VideoFrame *frame =
extractVideoFrameWithCodecFlags(
- &mClient, trackMeta, source, OMXCodec::kPreferSoftwareCodecs);
+ &mClient, trackMeta, source, OMXCodec::kPreferSoftwareCodecs,
+ timeUs, option);
if (frame == NULL) {
LOGV("Software decoder failed to extract thumbnail, "
"trying hardware decoder.");
- frame = extractVideoFrameWithCodecFlags(&mClient, trackMeta, source, 0);
+ frame = extractVideoFrameWithCodecFlags(&mClient, trackMeta, source, 0,
+ timeUs, option);
}
return frame;