NuPlayerRenderer.h revision 3831a066bcf1019864a94d2bc7b4c9241efc5c22
1f933441648ef6a71dee783d733aac17b9508b452Andreas Huber/* 2f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Copyright (C) 2010 The Android Open Source Project 3f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 4f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * you may not use this file except in compliance with the License. 6f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * You may obtain a copy of the License at 7f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 8f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 10f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Unless required by applicable law or agreed to in writing, software 11f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * See the License for the specific language governing permissions and 14f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * limitations under the License. 15f933441648ef6a71dee783d733aac17b9508b452Andreas Huber */ 16f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 17f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#ifndef NUPLAYER_RENDERER_H_ 18f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 19f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#define NUPLAYER_RENDERER_H_ 20f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 21f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include "NuPlayer.h" 22f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 23f933441648ef6a71dee783d733aac17b9508b452Andreas Hubernamespace android { 24f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 25f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct NuPlayer::Renderer : public AHandler { 26f933441648ef6a71dee783d733aac17b9508b452Andreas Huber Renderer(const sp<MediaPlayerBase::AudioSink> &sink, 27f933441648ef6a71dee783d733aac17b9508b452Andreas Huber const sp<AMessage> ¬ify); 28f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 29f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void queueBuffer( 30f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool audio, 31f933441648ef6a71dee783d733aac17b9508b452Andreas Huber const sp<ABuffer> &buffer, 32f933441648ef6a71dee783d733aac17b9508b452Andreas Huber const sp<AMessage> ¬ifyConsumed); 33f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 34f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void queueEOS(bool audio, status_t finalResult); 35f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 36f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void flush(bool audio); 37f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 38f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void signalTimeDiscontinuity(); 39f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 403831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber void signalAudioSinkChanged(); 413831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber 42f933441648ef6a71dee783d733aac17b9508b452Andreas Huber enum { 43f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatEOS, 44f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatFlushComplete, 45f933441648ef6a71dee783d733aac17b9508b452Andreas Huber }; 46f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 47f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprotected: 48f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual ~Renderer(); 49f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 50f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual void onMessageReceived(const sp<AMessage> &msg); 51f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 52f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprivate: 53f933441648ef6a71dee783d733aac17b9508b452Andreas Huber enum { 54f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatDrainAudioQueue, 55f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatDrainVideoQueue, 56f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatQueueBuffer, 57f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatQueueEOS, 58f933441648ef6a71dee783d733aac17b9508b452Andreas Huber kWhatFlush, 593831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber kWhatAudioSinkChanged, 60f933441648ef6a71dee783d733aac17b9508b452Andreas Huber }; 61f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 62f933441648ef6a71dee783d733aac17b9508b452Andreas Huber struct QueueEntry { 63f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<ABuffer> mBuffer; 64f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<AMessage> mNotifyConsumed; 65f933441648ef6a71dee783d733aac17b9508b452Andreas Huber size_t mOffset; 66f933441648ef6a71dee783d733aac17b9508b452Andreas Huber status_t mFinalResult; 67f933441648ef6a71dee783d733aac17b9508b452Andreas Huber }; 68f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 69f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<MediaPlayerBase::AudioSink> mAudioSink; 70f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<AMessage> mNotify; 71f933441648ef6a71dee783d733aac17b9508b452Andreas Huber List<QueueEntry> mAudioQueue; 72f933441648ef6a71dee783d733aac17b9508b452Andreas Huber List<QueueEntry> mVideoQueue; 73f933441648ef6a71dee783d733aac17b9508b452Andreas Huber uint32_t mNumFramesWritten; 74f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 75f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mDrainAudioQueuePending; 76f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mDrainVideoQueuePending; 77f933441648ef6a71dee783d733aac17b9508b452Andreas Huber int32_t mAudioQueueGeneration; 78f933441648ef6a71dee783d733aac17b9508b452Andreas Huber int32_t mVideoQueueGeneration; 79f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 80f933441648ef6a71dee783d733aac17b9508b452Andreas Huber int64_t mAnchorTimeMediaUs; 81f933441648ef6a71dee783d733aac17b9508b452Andreas Huber int64_t mAnchorTimeRealUs; 82f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 83f933441648ef6a71dee783d733aac17b9508b452Andreas Huber Mutex mFlushLock; // protects the following 2 member vars. 84f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mFlushingAudio; 85f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mFlushingVideo; 86f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 873831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber bool mHasAudio; 883831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber bool mHasVideo; 89f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool mSyncQueues; 90f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 91f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void onDrainAudioQueue(); 92f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void postDrainAudioQueue(); 93f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 94f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void onDrainVideoQueue(); 95f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void postDrainVideoQueue(); 96f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 97f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void onQueueBuffer(const sp<AMessage> &msg); 98f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void onQueueEOS(const sp<AMessage> &msg); 99f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void onFlush(const sp<AMessage> &msg); 1003831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber void onAudioSinkChanged(); 101f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 102f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void notifyEOS(bool audio); 103f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void notifyFlushComplete(bool audio); 104f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 105f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void flushQueue(List<QueueEntry> *queue); 106f933441648ef6a71dee783d733aac17b9508b452Andreas Huber bool dropBufferWhileFlushing(bool audio, const sp<AMessage> &msg); 107f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void syncQueuesDone(); 108f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 109f933441648ef6a71dee783d733aac17b9508b452Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(Renderer); 110f933441648ef6a71dee783d733aac17b9508b452Andreas Huber}; 111f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 112f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} // namespace android 113f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 114f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#endif // NUPLAYER_RENDERER_H_ 115