1fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber/* 2fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * Copyright 2012, The Android Open Source Project 3fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * 4fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * you may not use this file except in compliance with the License. 6fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * You may obtain a copy of the License at 7fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * 8fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * 10fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * Unless required by applicable law or agreed to in writing, software 11fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * See the License for the specific language governing permissions and 14fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber * limitations under the License. 15fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber */ 16fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 17fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber#ifndef TUNNEL_RENDERER_H_ 18fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 19fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber#define TUNNEL_RENDERER_H_ 20fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 21fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber#include <gui/Surface.h> 22fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber#include <media/stagefright/foundation/AHandler.h> 23fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 24fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Hubernamespace android { 25fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 26fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huberstruct ABuffer; 27fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huberstruct SurfaceComposerClient; 28fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huberstruct SurfaceControl; 29fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huberstruct Surface; 30fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huberstruct IMediaPlayer; 31fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huberstruct IStreamListener; 32fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 33fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber// This class reassembles incoming RTP packets into the correct order 34fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber// and sends the resulting transport stream to a mediaplayer instance 35fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber// for playback. 36fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huberstruct TunnelRenderer : public AHandler { 37fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber TunnelRenderer( 38fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber const sp<AMessage> ¬ifyLost, 39fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber const sp<ISurfaceTexture> &surfaceTex); 40fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 41fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber sp<ABuffer> dequeueBuffer(); 42fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 43fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber enum { 44fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber kWhatQueueBuffer, 45fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber }; 46fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 47fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huberprotected: 48fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber virtual void onMessageReceived(const sp<AMessage> &msg); 49fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber virtual ~TunnelRenderer(); 50fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 51fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huberprivate: 52fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber struct PlayerClient; 53fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber struct StreamSource; 54fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 55fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber mutable Mutex mLock; 56fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 57fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber sp<AMessage> mNotifyLost; 58fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber sp<ISurfaceTexture> mSurfaceTex; 59fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 60fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber List<sp<ABuffer> > mPackets; 61fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber int64_t mTotalBytesQueued; 62fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 63fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber sp<SurfaceComposerClient> mComposerClient; 64fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber sp<SurfaceControl> mSurfaceControl; 65fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber sp<Surface> mSurface; 66fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber sp<PlayerClient> mPlayerClient; 67fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber sp<IMediaPlayer> mPlayer; 68fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber sp<StreamSource> mStreamSource; 69fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 70fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber int32_t mLastDequeuedExtSeqNo; 71fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber int64_t mFirstFailedAttemptUs; 72fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber bool mRequestedRetransmission; 73fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 74fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber void initPlayer(); 75fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber void destroyPlayer(); 76fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 77fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber void queueBuffer(const sp<ABuffer> &buffer); 78fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 79fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(TunnelRenderer); 80fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber}; 81fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 82fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber} // namespace android 83fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber 84fbe9d81ff5fbdc5aecdcdd13e4a5d7f019824f96Andreas Huber#endif // TUNNEL_RENDERER_H_ 85