RepeaterSource.h revision a556c4822fc205db0d27834ba5b637c351d73ffa
1d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#ifndef REPEATER_SOURCE_H_ 2d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 3d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#define REPEATER_SOURCE_H_ 4d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 5d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#include <media/stagefright/foundation/ABase.h> 6d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#include <media/stagefright/foundation/AHandlerReflector.h> 7d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#include <media/stagefright/MediaSource.h> 8d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 9a556c4822fc205db0d27834ba5b637c351d73ffaAndreas Huber#define SUSPEND_VIDEO_IF_IDLE 0 100224bf170a3904576bba81593eaab113c5d3a4e7Andreas Huber 11d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Hubernamespace android { 12d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 13d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber// This MediaSource delivers frames at a constant rate by repeating buffers 14d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber// if necessary. 15d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huberstruct RepeaterSource : public MediaSource { 16d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber RepeaterSource(const sp<MediaSource> &source, double rateHz); 17d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 18d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual status_t start(MetaData *params); 19d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual status_t stop(); 20d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual sp<MetaData> getFormat(); 21d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 22d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual status_t read( 23d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber MediaBuffer **buffer, const ReadOptions *options); 24d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 25d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber void onMessageReceived(const sp<AMessage> &msg); 26d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 274a8b9a2363b7b7b4f98022e6d9aae8b8aa8e35e5Andreas Huber // If RepeaterSource is currently dormant, because SurfaceFlinger didn't 284a8b9a2363b7b7b4f98022e6d9aae8b8aa8e35e5Andreas Huber // send updates in a while, this is its wakeup call. 294a8b9a2363b7b7b4f98022e6d9aae8b8aa8e35e5Andreas Huber void wakeUp(); 304a8b9a2363b7b7b4f98022e6d9aae8b8aa8e35e5Andreas Huber 31d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huberprotected: 32d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual ~RepeaterSource(); 33d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 34d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huberprivate: 35d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber enum { 36d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber kWhatRead, 37d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber }; 38d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 39d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber Mutex mLock; 40d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber Condition mCondition; 41d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 4277245813007cf903b4b73f5d0cd20313fbf0e510Andreas Huber bool mStarted; 4377245813007cf903b4b73f5d0cd20313fbf0e510Andreas Huber 44d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber sp<MediaSource> mSource; 45d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber double mRateHz; 46d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 47d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber sp<ALooper> mLooper; 48d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber sp<AHandlerReflector<RepeaterSource> > mReflector; 49d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 50d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber MediaBuffer *mBuffer; 51d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber status_t mResult; 524a8b9a2363b7b7b4f98022e6d9aae8b8aa8e35e5Andreas Huber int64_t mLastBufferUpdateUs; 53d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 54d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber int64_t mStartTimeUs; 55d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber int32_t mFrameCount; 56d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 57d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber void postRead(); 58d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 59d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(RepeaterSource); 60d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber}; 61d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 62d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber} // namespace android 63d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 64d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#endif // REPEATER_SOURCE_H_ 65