RepeaterSource.h revision d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480c
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 9d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Hubernamespace android { 10d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 11d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber// This MediaSource delivers frames at a constant rate by repeating buffers 12d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber// if necessary. 13d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huberstruct RepeaterSource : public MediaSource { 14d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber RepeaterSource(const sp<MediaSource> &source, double rateHz); 15d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 16d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual status_t start(MetaData *params); 17d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual status_t stop(); 18d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual sp<MetaData> getFormat(); 19d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 20d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual status_t read( 21d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber MediaBuffer **buffer, const ReadOptions *options); 22d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 23d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber void onMessageReceived(const sp<AMessage> &msg); 24d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 25d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huberprotected: 26d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual ~RepeaterSource(); 27d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 28d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huberprivate: 29d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber enum { 30d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber kWhatRead, 31d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber }; 32d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 33d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber Mutex mLock; 34d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber Condition mCondition; 35d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 36d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber sp<MediaSource> mSource; 37d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber double mRateHz; 38d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 39d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber sp<ALooper> mLooper; 40d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber sp<AHandlerReflector<RepeaterSource> > mReflector; 41d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 42d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber MediaBuffer *mBuffer; 43d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber status_t mResult; 44d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 45d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber int64_t mStartTimeUs; 46d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber int32_t mFrameCount; 47d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 48d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber void postRead(); 49d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 50d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(RepeaterSource); 51d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber}; 52d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 53d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber} // namespace android 54d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 55d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#endif // REPEATER_SOURCE_H_ 56