diff options
author | Andreas Huber <andih@google.com> | 2012-09-28 11:34:41 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-09-28 12:47:57 -0700 |
commit | 3a0ef0dc71f3776d115f30d87f1d8867daefea88 (patch) | |
tree | 0156b1ffe3663b676b37de5a96921713ba78df1a /media/libstagefright | |
parent | e646b2d26459ca30667097e9600ee3f57ebfd228 (diff) | |
download | frameworks_av-3a0ef0dc71f3776d115f30d87f1d8867daefea88.zip frameworks_av-3a0ef0dc71f3776d115f30d87f1d8867daefea88.tar.gz frameworks_av-3a0ef0dc71f3776d115f30d87f1d8867daefea88.tar.bz2 |
Tell the encoder to emit SPS/PPS before IDR frames in wifi display code.
Change-Id: Ic40e09b66784dd2e370d30b688d50561a47ab85a
related-to-bug: 7245308
Diffstat (limited to 'media/libstagefright')
-rw-r--r-- | media/libstagefright/ACodec.cpp | 29 | ||||
-rw-r--r-- | media/libstagefright/wifi-display/source/Converter.cpp | 8 | ||||
-rw-r--r-- | media/libstagefright/wifi-display/source/PlaybackSession.cpp | 5 |
3 files changed, 41 insertions, 1 deletions
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index af7a459..2b4220f 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -32,6 +32,8 @@ #include <media/stagefright/OMXClient.h> #include <media/stagefright/OMXCodec.h> +#include <media/hardware/HardwareAPI.h> + #include <OMX_Component.h> #include "include/avc_utils.h" @@ -881,6 +883,33 @@ status_t ACodec::configureCodec( } } + int32_t prependSPSPPS; + if (encoder + && msg->findInt32("prepend-sps-pps-to-idr-frames", &prependSPSPPS) + && prependSPSPPS != 0) { + OMX_INDEXTYPE index; + err = mOMX->getExtensionIndex( + mNode, + "OMX.google.android.index.prependSPSPPSToIDRFrames", + &index); + + if (err == OK) { + PrependSPSPPSToIDRFramesParams params; + InitOMXParams(¶ms); + params.bEnable = OMX_TRUE; + + err = mOMX->setParameter( + mNode, index, ¶ms, sizeof(params)); + } + + if (err != OK) { + ALOGE("Encoder could not be configured to emit SPS/PPS before " + "IDR frames. (err %d)", err); + + return err; + } + } + if (!strncasecmp(mime, "video/", 6)) { if (encoder) { err = setupVideoEncoder(mime, msg); diff --git a/media/libstagefright/wifi-display/source/Converter.cpp b/media/libstagefright/wifi-display/source/Converter.cpp index 0cdff6b..968a805 100644 --- a/media/libstagefright/wifi-display/source/Converter.cpp +++ b/media/libstagefright/wifi-display/source/Converter.cpp @@ -53,6 +53,13 @@ Converter::Converter( } mInitCheck = initEncoder(); + + if (mInitCheck != OK) { + if (mEncoder != NULL) { + mEncoder->release(); + mEncoder.clear(); + } + } } Converter::~Converter() { @@ -127,6 +134,7 @@ status_t Converter::initEncoder() { mOutputFormat->setInt32("bitrate", videoBitrate); mOutputFormat->setInt32("frame-rate", 24); mOutputFormat->setInt32("i-frame-interval", 1); // Iframes every 1 secs + // mOutputFormat->setInt32("prepend-sps-pps-to-idr-frames", 1); } ALOGV("output format is '%s'", mOutputFormat->debugString(0).c_str()); diff --git a/media/libstagefright/wifi-display/source/PlaybackSession.cpp b/media/libstagefright/wifi-display/source/PlaybackSession.cpp index 9b729fc..775f23b 100644 --- a/media/libstagefright/wifi-display/source/PlaybackSession.cpp +++ b/media/libstagefright/wifi-display/source/PlaybackSession.cpp @@ -846,7 +846,10 @@ status_t WifiDisplaySource::PlaybackSession::addSource( sp<Converter> converter = new Converter(notify, codecLooper, format); - CHECK_EQ(converter->initCheck(), (status_t)OK); + + if (converter->initCheck() != OK) { + return converter->initCheck(); + } looper()->registerHandler(converter); |