diff options
-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); |