/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef A_RTSP_CONTROLLER_H_ #define A_RTSP_CONTROLLER_H_ #include #include #include namespace android { struct ALooper; struct MyHandler; struct ARTSPController : public MediaExtractor { ARTSPController(const sp &looper); status_t connect(const char *url); void disconnect(); void seek(int64_t timeUs); virtual size_t countTracks(); virtual sp getTrack(size_t index); virtual sp getTrackMetaData( size_t index, uint32_t flags); int64_t getNormalPlayTimeUs(); int64_t getQueueDurationUs(bool *eos); void onMessageReceived(const sp &msg); virtual uint32_t flags() const { // Seeking 10secs forward or backward is a very expensive operation // for rtsp, so let's not enable that. // The user can always use the seek bar. return CAN_PAUSE | CAN_SEEK; } protected: virtual ~ARTSPController(); private: enum { kWhatConnectDone = 'cdon', kWhatDisconnectDone = 'ddon', }; enum State { DISCONNECTED, CONNECTED, CONNECTING, }; Mutex mLock; Condition mCondition; State mState; status_t mConnectionResult; sp mLooper; sp mHandler; sp > mReflector; DISALLOW_EVIL_CONSTRUCTORS(ARTSPController); }; } // namespace android #endif // A_RTSP_CONTROLLER_H_