summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/StagefrightMetadataRetriever.cpp
diff options
context:
space:
mode:
authorKeith Mok <kmok@cyngn.com>2015-12-09 16:47:54 -0800
committerGerrit Code Review <gerrit@cyanogenmod.org>2015-12-09 22:52:49 -0800
commit4d1793b8a90eb4b9e19184532f713c6aba7828cf (patch)
tree7b05e54c48e9cd27f1fb55c34ade7fe0a9a55c13 /media/libstagefright/StagefrightMetadataRetriever.cpp
parent6904c9ac0058e81d2ea063e2b09f3f1754d7e8f4 (diff)
downloadframeworks_av-4d1793b8a90eb4b9e19184532f713c6aba7828cf.zip
frameworks_av-4d1793b8a90eb4b9e19184532f713c6aba7828cf.tar.gz
frameworks_av-4d1793b8a90eb4b9e19184532f713c6aba7828cf.tar.bz2
stagefright: Fix videot thumbnail retrival for wmv
We override some h/w decoders in video configure since we know some h/w decoder does not support certain types of video. e.g. WMV7/8. But we did not do that when application retrieving video frame for thumbnail causing video frame retrieved is corrupted. Fix it by calling FFMPEGSoftCodec::overrideComponentName when we retrieve a single video frame for thumbnail purpose. Change-Id: I334698c331dfd3d49bb5d8b8e9c1fe381b304179
Diffstat (limited to 'media/libstagefright/StagefrightMetadataRetriever.cpp')
-rw-r--r--media/libstagefright/StagefrightMetadataRetriever.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/media/libstagefright/StagefrightMetadataRetriever.cpp b/media/libstagefright/StagefrightMetadataRetriever.cpp
index c3adac4..5b96040 100644
--- a/media/libstagefright/StagefrightMetadataRetriever.cpp
+++ b/media/libstagefright/StagefrightMetadataRetriever.cpp
@@ -28,6 +28,8 @@
#include <media/ICrypto.h>
#include <media/IMediaHTTPService.h>
+#include <media/stagefright/FFMPEGSoftCodec.h>
+
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
@@ -506,6 +508,14 @@ VideoFrame *StagefrightMetadataRetriever::getFrameAtTime(
for (size_t i = 0; i < matchingCodecs.size(); ++i) {
const char *componentName = matchingCodecs[i].mName.string();
+ const char *ffmpegComponentName;
+ /* determine whether ffmpeg should override a broken h/w codec */
+ ffmpegComponentName = FFMPEGSoftCodec::overrideComponentName(0, trackMeta, mime, false);
+ if (ffmpegComponentName) {
+ ALOGV("override compoent %s to %s for video frame extraction.", componentName, ffmpegComponentName);
+ componentName = ffmpegComponentName;
+ }
+
VideoFrame *frame =
extractVideoFrame(componentName, trackMeta, source, timeUs, option);