/* *Copyright (c) 2013, The Linux Foundation. All rights reserved. *Not a Contribution, Apache license notifications and license are retained *for attribution purposes only. *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 DASH_PACKET_SOURCE_H_ #define DASH_PACKET_SOURCE_H_ #include #include #include #include #include "ATSParser.h" namespace android { struct ABuffer; struct DashPacketSource : public MediaSource { DashPacketSource(const sp &meta); void setFormat(const sp &meta); virtual status_t start(MetaData *params = NULL); virtual status_t stop(); virtual sp getFormat(); virtual status_t read( MediaBuffer **buffer, const ReadOptions *options = NULL); bool hasBufferAvailable(status_t *finalResult); // Returns the difference between the last and the first queued // presentation timestamps since the last discontinuity (if any). int64_t getBufferedDurationUs(status_t *finalResult); status_t nextBufferTime(int64_t *timeUs); void queueAccessUnit(const sp &buffer); void queueDiscontinuity( ATSParser::DiscontinuityType type, const sp &extra); void signalEOS(status_t result); status_t dequeueAccessUnit(sp *buffer); void updateFormat(const sp &meta); int getQueueSize(); status_t getStreamInfo(unsigned& streamPID, unsigned& programPID, uint64_t& firstPTS); void setStreamInfo(unsigned streamPID, unsigned programPID, uint64_t firstPTS); status_t nextBufferIsSync(bool* isSyncFrame); protected: virtual ~DashPacketSource(); private: Mutex mLock; Condition mCondition; bool mIsAudio; sp mFormat; List > mBuffers; status_t mEOSResult; unsigned mStreamPID; unsigned mProgramPID; uint64_t mFirstPTS; bool wasFormatChange(int32_t discontinuityType) const; DISALLOW_EVIL_CONSTRUCTORS(DashPacketSource); }; } // namespace android #endif // DASH_PACKET_SOURCE_H_