Loading include/media/stagefright/MediaCodecSource.h +2 −2 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ struct MediaCodecSource : public MediaSource, virtual status_t start(MetaData *params = NULL); virtual status_t stop(); virtual status_t pause(); virtual sp<MetaData> getFormat() { return mMeta; } virtual sp<MetaData> getFormat(); virtual status_t read( MediaBuffer **buffer, const ReadOptions *options = NULL); Loading Loading @@ -105,7 +105,7 @@ private: sp<ALooper> mCodecLooper; sp<AHandlerReflector<MediaCodecSource> > mReflector; sp<AMessage> mOutputFormat; sp<MetaData> mMeta; Mutexed<sp<MetaData>> mMeta; sp<Puller> mPuller; sp<MediaCodec> mEncoder; uint32_t mFlags; Loading include/media/stagefright/foundation/Mutexed.h +5 −0 Original line number Diff line number Diff line Loading @@ -110,6 +110,11 @@ public: inline T* operator->() const { return mLocked ? &mTreasure : nullptr; } inline T& operator*() const { return mLocked ? mTreasure : *(T*)nullptr; } // same as * inline T& get() const { return mLocked ? mTreasure : *(T*)nullptr; } // sets structure. this will abort if mLocked is false. inline void set(T& o) const { get() = o; } // Wait on the condition variable using lock. Must be locked. inline status_t waitForCondition(Condition &cond) { return cond.wait(mLock); } Loading media/libstagefright/MediaCodecSource.cpp +11 −2 Original line number Diff line number Diff line Loading @@ -358,6 +358,11 @@ status_t MediaCodecSource::pause() { return OK; } sp<MetaData> MediaCodecSource::getFormat() { Mutexed<sp<MetaData>>::Locked meta(mMeta); return *meta; } sp<IGraphicBufferProducer> MediaCodecSource::getGraphicBufferProducer() { CHECK(mFlags & FLAG_USE_SURFACE_INPUT); return mGraphicBufferProducer; Loading Loading @@ -493,7 +498,9 @@ status_t MediaCodecSource::initEncoder() { } mEncoder->getOutputFormat(&mOutputFormat); convertMessageToMetaData(mOutputFormat, mMeta); sp<MetaData> meta = new MetaData; convertMessageToMetaData(mOutputFormat, meta); mMeta.lock().set(meta); if (mFlags & FLAG_USE_SURFACE_INPUT) { CHECK(mIsVideo); Loading Loading @@ -787,7 +794,9 @@ void MediaCodecSource::onMessageReceived(const sp<AMessage> &msg) { signalEOS(err); break; } convertMessageToMetaData(mOutputFormat, mMeta); sp<MetaData> meta = new MetaData; convertMessageToMetaData(mOutputFormat, meta); mMeta.lock().set(meta); } else if (cbID == MediaCodec::CB_OUTPUT_AVAILABLE) { int32_t index; size_t offset; Loading Loading
include/media/stagefright/MediaCodecSource.h +2 −2 Original line number Diff line number Diff line Loading @@ -56,7 +56,7 @@ struct MediaCodecSource : public MediaSource, virtual status_t start(MetaData *params = NULL); virtual status_t stop(); virtual status_t pause(); virtual sp<MetaData> getFormat() { return mMeta; } virtual sp<MetaData> getFormat(); virtual status_t read( MediaBuffer **buffer, const ReadOptions *options = NULL); Loading Loading @@ -105,7 +105,7 @@ private: sp<ALooper> mCodecLooper; sp<AHandlerReflector<MediaCodecSource> > mReflector; sp<AMessage> mOutputFormat; sp<MetaData> mMeta; Mutexed<sp<MetaData>> mMeta; sp<Puller> mPuller; sp<MediaCodec> mEncoder; uint32_t mFlags; Loading
include/media/stagefright/foundation/Mutexed.h +5 −0 Original line number Diff line number Diff line Loading @@ -110,6 +110,11 @@ public: inline T* operator->() const { return mLocked ? &mTreasure : nullptr; } inline T& operator*() const { return mLocked ? mTreasure : *(T*)nullptr; } // same as * inline T& get() const { return mLocked ? mTreasure : *(T*)nullptr; } // sets structure. this will abort if mLocked is false. inline void set(T& o) const { get() = o; } // Wait on the condition variable using lock. Must be locked. inline status_t waitForCondition(Condition &cond) { return cond.wait(mLock); } Loading
media/libstagefright/MediaCodecSource.cpp +11 −2 Original line number Diff line number Diff line Loading @@ -358,6 +358,11 @@ status_t MediaCodecSource::pause() { return OK; } sp<MetaData> MediaCodecSource::getFormat() { Mutexed<sp<MetaData>>::Locked meta(mMeta); return *meta; } sp<IGraphicBufferProducer> MediaCodecSource::getGraphicBufferProducer() { CHECK(mFlags & FLAG_USE_SURFACE_INPUT); return mGraphicBufferProducer; Loading Loading @@ -493,7 +498,9 @@ status_t MediaCodecSource::initEncoder() { } mEncoder->getOutputFormat(&mOutputFormat); convertMessageToMetaData(mOutputFormat, mMeta); sp<MetaData> meta = new MetaData; convertMessageToMetaData(mOutputFormat, meta); mMeta.lock().set(meta); if (mFlags & FLAG_USE_SURFACE_INPUT) { CHECK(mIsVideo); Loading Loading @@ -787,7 +794,9 @@ void MediaCodecSource::onMessageReceived(const sp<AMessage> &msg) { signalEOS(err); break; } convertMessageToMetaData(mOutputFormat, mMeta); sp<MetaData> meta = new MetaData; convertMessageToMetaData(mOutputFormat, meta); mMeta.lock().set(meta); } else if (cbID == MediaCodec::CB_OUTPUT_AVAILABLE) { int32_t index; size_t offset; Loading