Loading media/libstagefright/wifi-display/source/Converter.cpp +5 −17 Original line number Original line Diff line number Diff line Loading @@ -135,7 +135,9 @@ bool Converter::needToManuallyPrependSPSPPS() const { return mNeedToManuallyPrependSPSPPS; return mNeedToManuallyPrependSPSPPS; } } static int32_t getBitrate(const char *propName, int32_t defaultValue) { // static int32_t Converter::GetInt32Property( const char *propName, int32_t defaultValue) { char val[PROPERTY_VALUE_MAX]; char val[PROPERTY_VALUE_MAX]; if (property_get(propName, val, NULL)) { if (property_get(propName, val, NULL)) { char *end; char *end; Loading Loading @@ -185,8 +187,8 @@ status_t Converter::initEncoder() { mOutputFormat->setString("mime", outputMIME.c_str()); mOutputFormat->setString("mime", outputMIME.c_str()); int32_t audioBitrate = getBitrate("media.wfd.audio-bitrate", 128000); int32_t audioBitrate = GetInt32Property("media.wfd.audio-bitrate", 128000); int32_t videoBitrate = getBitrate("media.wfd.video-bitrate", 5000000); int32_t videoBitrate = GetInt32Property("media.wfd.video-bitrate", 5000000); mPrevVideoBitrate = videoBitrate; mPrevVideoBitrate = videoBitrate; ALOGI("using audio bitrate of %d bps, video bitrate of %d bps", ALOGI("using audio bitrate of %d bps, video bitrate of %d bps", Loading Loading @@ -622,20 +624,6 @@ status_t Converter::feedEncoderInputBuffers() { } } status_t Converter::doMoreWork() { status_t Converter::doMoreWork() { #if 0 if (mIsVideo) { int32_t videoBitrate = getBitrate("media.wfd.video-bitrate", 5000000); if (videoBitrate != mPrevVideoBitrate) { sp<AMessage> params = new AMessage; params->setInt32("videoBitrate", videoBitrate); mEncoder->setParameters(params); mPrevVideoBitrate = videoBitrate; } } #endif status_t err; status_t err; for (;;) { for (;;) { Loading media/libstagefright/wifi-display/source/Converter.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -73,6 +73,8 @@ struct Converter : public AHandler { int32_t getVideoBitrate() const; int32_t getVideoBitrate() const; void setVideoBitrate(int32_t bitrate); void setVideoBitrate(int32_t bitrate); static int32_t GetInt32Property(const char *propName, int32_t defaultValue); protected: protected: virtual ~Converter(); virtual ~Converter(); virtual void onMessageReceived(const sp<AMessage> &msg); virtual void onMessageReceived(const sp<AMessage> &msg); Loading media/libstagefright/wifi-display/source/PlaybackSession.cpp +59 −12 Original line number Original line Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include "WifiDisplaySource.h" #include "WifiDisplaySource.h" #include <binder/IServiceManager.h> #include <binder/IServiceManager.h> #include <cutils/properties.h> #include <media/IHDCP.h> #include <media/IHDCP.h> #include <media/stagefright/foundation/ABitReader.h> #include <media/stagefright/foundation/ABitReader.h> #include <media/stagefright/foundation/ABuffer.h> #include <media/stagefright/foundation/ABuffer.h> Loading Loading @@ -66,6 +67,7 @@ struct WifiDisplaySource::PlaybackSession::Track : public AHandler { bool isAudio() const; bool isAudio() const; const sp<Converter> &converter() const; const sp<Converter> &converter() const; const sp<RepeaterSource> &repeaterSource() const; ssize_t mediaSenderTrackIndex() const; ssize_t mediaSenderTrackIndex() const; void setMediaSenderTrackIndex(size_t index); void setMediaSenderTrackIndex(size_t index); Loading Loading @@ -171,6 +173,11 @@ const sp<Converter> &WifiDisplaySource::PlaybackSession::Track::converter() cons return mConverter; return mConverter; } } const sp<RepeaterSource> & WifiDisplaySource::PlaybackSession::Track::repeaterSource() const { return mRepeaterSource; } ssize_t WifiDisplaySource::PlaybackSession::Track::mediaSenderTrackIndex() const { ssize_t WifiDisplaySource::PlaybackSession::Track::mediaSenderTrackIndex() const { CHECK_GE(mMediaSenderTrackIndex, 0); CHECK_GE(mMediaSenderTrackIndex, 0); return mMediaSenderTrackIndex; return mMediaSenderTrackIndex; Loading Loading @@ -663,23 +670,31 @@ void WifiDisplaySource::PlaybackSession::onSinkFeedback(const sp<AMessage> &msg) if (mVideoTrackIndex >= 0) { if (mVideoTrackIndex >= 0) { const sp<Track> &videoTrack = mTracks.valueFor(mVideoTrackIndex); const sp<Track> &videoTrack = mTracks.valueFor(mVideoTrackIndex); sp<Converter> converter = videoTrack->converter(); sp<Converter> converter = videoTrack->converter(); if (converter != NULL) { if (converter != NULL) { int32_t videoBitrate = converter->getVideoBitrate(); int32_t videoBitrate = Converter::GetInt32Property("media.wfd.video-bitrate", -1); char val[PROPERTY_VALUE_MAX]; if (videoBitrate < 0 && property_get("media.wfd.video-bitrate", val, NULL) && !strcasecmp("adaptive", val)) { videoBitrate = converter->getVideoBitrate(); if (avgLatencyUs > 300000ll) { if (avgLatencyUs > 300000ll) { videoBitrate *= 0.6; videoBitrate *= 0.6; if (videoBitrate < 500000) { videoBitrate = 500000; // cap at 500kbit/sec } } else if (avgLatencyUs < 100000ll) { } else if (avgLatencyUs < 100000ll) { videoBitrate *= 1.1; videoBitrate *= 1.1; if (videoBitrate > 10000000) { videoBitrate = 10000000; // cap at 10Mbit/sec } } } } if (videoBitrate > 0) { if (videoBitrate < 500000) { videoBitrate = 500000; } else if (videoBitrate > 10000000) { videoBitrate = 10000000; } if (videoBitrate != converter->getVideoBitrate()) { if (videoBitrate != converter->getVideoBitrate()) { ALOGI("setting video bitrate to %d bps", videoBitrate); ALOGI("setting video bitrate to %d bps", videoBitrate); Loading @@ -687,6 +702,38 @@ void WifiDisplaySource::PlaybackSession::onSinkFeedback(const sp<AMessage> &msg) } } } } } } sp<RepeaterSource> repeaterSource = videoTrack->repeaterSource(); if (repeaterSource != NULL) { double rateHz = Converter::GetInt32Property( "media.wfd.video-framerate", -1); if (rateHz < 0.0) { rateHz = repeaterSource->getFrameRate(); if (avgLatencyUs > 300000ll) { rateHz *= 0.9; } else if (avgLatencyUs < 200000ll) { rateHz *= 1.1; } } if (rateHz > 0) { if (rateHz < 5.0) { rateHz = 5.0; } else if (rateHz > 30.0) { rateHz = 30.0; } if (rateHz != repeaterSource->getFrameRate()) { ALOGI("setting frame rate to %.2f Hz", rateHz); repeaterSource->setFrameRate(rateHz); } } } } } } status_t WifiDisplaySource::PlaybackSession::setupMediaPacketizer( status_t WifiDisplaySource::PlaybackSession::setupMediaPacketizer( Loading media/libstagefright/wifi-display/source/RepeaterSource.cpp +19 −0 Original line number Original line Diff line number Diff line Loading @@ -27,6 +27,25 @@ RepeaterSource::~RepeaterSource() { CHECK(!mStarted); CHECK(!mStarted); } } double RepeaterSource::getFrameRate() const { return mRateHz; } void RepeaterSource::setFrameRate(double rateHz) { Mutex::Autolock autoLock(mLock); if (rateHz == mRateHz) { return; } if (mStartTimeUs >= 0ll) { int64_t nextTimeUs = mStartTimeUs + (mFrameCount * 1000000ll) / mRateHz; mStartTimeUs = nextTimeUs; mFrameCount = 0; } mRateHz = rateHz; } status_t RepeaterSource::start(MetaData *params) { status_t RepeaterSource::start(MetaData *params) { CHECK(!mStarted); CHECK(!mStarted); Loading media/libstagefright/wifi-display/source/RepeaterSource.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,9 @@ struct RepeaterSource : public MediaSource { // send updates in a while, this is its wakeup call. // send updates in a while, this is its wakeup call. void wakeUp(); void wakeUp(); double getFrameRate() const; void setFrameRate(double rateHz); protected: protected: virtual ~RepeaterSource(); virtual ~RepeaterSource(); Loading Loading
media/libstagefright/wifi-display/source/Converter.cpp +5 −17 Original line number Original line Diff line number Diff line Loading @@ -135,7 +135,9 @@ bool Converter::needToManuallyPrependSPSPPS() const { return mNeedToManuallyPrependSPSPPS; return mNeedToManuallyPrependSPSPPS; } } static int32_t getBitrate(const char *propName, int32_t defaultValue) { // static int32_t Converter::GetInt32Property( const char *propName, int32_t defaultValue) { char val[PROPERTY_VALUE_MAX]; char val[PROPERTY_VALUE_MAX]; if (property_get(propName, val, NULL)) { if (property_get(propName, val, NULL)) { char *end; char *end; Loading Loading @@ -185,8 +187,8 @@ status_t Converter::initEncoder() { mOutputFormat->setString("mime", outputMIME.c_str()); mOutputFormat->setString("mime", outputMIME.c_str()); int32_t audioBitrate = getBitrate("media.wfd.audio-bitrate", 128000); int32_t audioBitrate = GetInt32Property("media.wfd.audio-bitrate", 128000); int32_t videoBitrate = getBitrate("media.wfd.video-bitrate", 5000000); int32_t videoBitrate = GetInt32Property("media.wfd.video-bitrate", 5000000); mPrevVideoBitrate = videoBitrate; mPrevVideoBitrate = videoBitrate; ALOGI("using audio bitrate of %d bps, video bitrate of %d bps", ALOGI("using audio bitrate of %d bps, video bitrate of %d bps", Loading Loading @@ -622,20 +624,6 @@ status_t Converter::feedEncoderInputBuffers() { } } status_t Converter::doMoreWork() { status_t Converter::doMoreWork() { #if 0 if (mIsVideo) { int32_t videoBitrate = getBitrate("media.wfd.video-bitrate", 5000000); if (videoBitrate != mPrevVideoBitrate) { sp<AMessage> params = new AMessage; params->setInt32("videoBitrate", videoBitrate); mEncoder->setParameters(params); mPrevVideoBitrate = videoBitrate; } } #endif status_t err; status_t err; for (;;) { for (;;) { Loading
media/libstagefright/wifi-display/source/Converter.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -73,6 +73,8 @@ struct Converter : public AHandler { int32_t getVideoBitrate() const; int32_t getVideoBitrate() const; void setVideoBitrate(int32_t bitrate); void setVideoBitrate(int32_t bitrate); static int32_t GetInt32Property(const char *propName, int32_t defaultValue); protected: protected: virtual ~Converter(); virtual ~Converter(); virtual void onMessageReceived(const sp<AMessage> &msg); virtual void onMessageReceived(const sp<AMessage> &msg); Loading
media/libstagefright/wifi-display/source/PlaybackSession.cpp +59 −12 Original line number Original line Diff line number Diff line Loading @@ -27,6 +27,7 @@ #include "WifiDisplaySource.h" #include "WifiDisplaySource.h" #include <binder/IServiceManager.h> #include <binder/IServiceManager.h> #include <cutils/properties.h> #include <media/IHDCP.h> #include <media/IHDCP.h> #include <media/stagefright/foundation/ABitReader.h> #include <media/stagefright/foundation/ABitReader.h> #include <media/stagefright/foundation/ABuffer.h> #include <media/stagefright/foundation/ABuffer.h> Loading Loading @@ -66,6 +67,7 @@ struct WifiDisplaySource::PlaybackSession::Track : public AHandler { bool isAudio() const; bool isAudio() const; const sp<Converter> &converter() const; const sp<Converter> &converter() const; const sp<RepeaterSource> &repeaterSource() const; ssize_t mediaSenderTrackIndex() const; ssize_t mediaSenderTrackIndex() const; void setMediaSenderTrackIndex(size_t index); void setMediaSenderTrackIndex(size_t index); Loading Loading @@ -171,6 +173,11 @@ const sp<Converter> &WifiDisplaySource::PlaybackSession::Track::converter() cons return mConverter; return mConverter; } } const sp<RepeaterSource> & WifiDisplaySource::PlaybackSession::Track::repeaterSource() const { return mRepeaterSource; } ssize_t WifiDisplaySource::PlaybackSession::Track::mediaSenderTrackIndex() const { ssize_t WifiDisplaySource::PlaybackSession::Track::mediaSenderTrackIndex() const { CHECK_GE(mMediaSenderTrackIndex, 0); CHECK_GE(mMediaSenderTrackIndex, 0); return mMediaSenderTrackIndex; return mMediaSenderTrackIndex; Loading Loading @@ -663,23 +670,31 @@ void WifiDisplaySource::PlaybackSession::onSinkFeedback(const sp<AMessage> &msg) if (mVideoTrackIndex >= 0) { if (mVideoTrackIndex >= 0) { const sp<Track> &videoTrack = mTracks.valueFor(mVideoTrackIndex); const sp<Track> &videoTrack = mTracks.valueFor(mVideoTrackIndex); sp<Converter> converter = videoTrack->converter(); sp<Converter> converter = videoTrack->converter(); if (converter != NULL) { if (converter != NULL) { int32_t videoBitrate = converter->getVideoBitrate(); int32_t videoBitrate = Converter::GetInt32Property("media.wfd.video-bitrate", -1); char val[PROPERTY_VALUE_MAX]; if (videoBitrate < 0 && property_get("media.wfd.video-bitrate", val, NULL) && !strcasecmp("adaptive", val)) { videoBitrate = converter->getVideoBitrate(); if (avgLatencyUs > 300000ll) { if (avgLatencyUs > 300000ll) { videoBitrate *= 0.6; videoBitrate *= 0.6; if (videoBitrate < 500000) { videoBitrate = 500000; // cap at 500kbit/sec } } else if (avgLatencyUs < 100000ll) { } else if (avgLatencyUs < 100000ll) { videoBitrate *= 1.1; videoBitrate *= 1.1; if (videoBitrate > 10000000) { videoBitrate = 10000000; // cap at 10Mbit/sec } } } } if (videoBitrate > 0) { if (videoBitrate < 500000) { videoBitrate = 500000; } else if (videoBitrate > 10000000) { videoBitrate = 10000000; } if (videoBitrate != converter->getVideoBitrate()) { if (videoBitrate != converter->getVideoBitrate()) { ALOGI("setting video bitrate to %d bps", videoBitrate); ALOGI("setting video bitrate to %d bps", videoBitrate); Loading @@ -687,6 +702,38 @@ void WifiDisplaySource::PlaybackSession::onSinkFeedback(const sp<AMessage> &msg) } } } } } } sp<RepeaterSource> repeaterSource = videoTrack->repeaterSource(); if (repeaterSource != NULL) { double rateHz = Converter::GetInt32Property( "media.wfd.video-framerate", -1); if (rateHz < 0.0) { rateHz = repeaterSource->getFrameRate(); if (avgLatencyUs > 300000ll) { rateHz *= 0.9; } else if (avgLatencyUs < 200000ll) { rateHz *= 1.1; } } if (rateHz > 0) { if (rateHz < 5.0) { rateHz = 5.0; } else if (rateHz > 30.0) { rateHz = 30.0; } if (rateHz != repeaterSource->getFrameRate()) { ALOGI("setting frame rate to %.2f Hz", rateHz); repeaterSource->setFrameRate(rateHz); } } } } } } status_t WifiDisplaySource::PlaybackSession::setupMediaPacketizer( status_t WifiDisplaySource::PlaybackSession::setupMediaPacketizer( Loading
media/libstagefright/wifi-display/source/RepeaterSource.cpp +19 −0 Original line number Original line Diff line number Diff line Loading @@ -27,6 +27,25 @@ RepeaterSource::~RepeaterSource() { CHECK(!mStarted); CHECK(!mStarted); } } double RepeaterSource::getFrameRate() const { return mRateHz; } void RepeaterSource::setFrameRate(double rateHz) { Mutex::Autolock autoLock(mLock); if (rateHz == mRateHz) { return; } if (mStartTimeUs >= 0ll) { int64_t nextTimeUs = mStartTimeUs + (mFrameCount * 1000000ll) / mRateHz; mStartTimeUs = nextTimeUs; mFrameCount = 0; } mRateHz = rateHz; } status_t RepeaterSource::start(MetaData *params) { status_t RepeaterSource::start(MetaData *params) { CHECK(!mStarted); CHECK(!mStarted); Loading
media/libstagefright/wifi-display/source/RepeaterSource.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -28,6 +28,9 @@ struct RepeaterSource : public MediaSource { // send updates in a while, this is its wakeup call. // send updates in a while, this is its wakeup call. void wakeUp(); void wakeUp(); double getFrameRate() const; void setFrameRate(double rateHz); protected: protected: virtual ~RepeaterSource(); virtual ~RepeaterSource(); Loading