M3UParser.h revision 404fced9bfa8fa423ee210a271ca051ffd1bec13
16f56ab789cb470620554d624c37f488285b3b04eDan Albert/* 26f56ab789cb470620554d624c37f488285b3b04eDan Albert * Copyright (C) 2010 The Android Open Source Project 36f56ab789cb470620554d624c37f488285b3b04eDan Albert * 46f56ab789cb470620554d624c37f488285b3b04eDan Albert * Licensed under the Apache License, Version 2.0 (the "License"); 56f56ab789cb470620554d624c37f488285b3b04eDan Albert * you may not use this file except in compliance with the License. 66f56ab789cb470620554d624c37f488285b3b04eDan Albert * You may obtain a copy of the License at 76f56ab789cb470620554d624c37f488285b3b04eDan Albert * 86f56ab789cb470620554d624c37f488285b3b04eDan Albert * http://www.apache.org/licenses/LICENSE-2.0 96f56ab789cb470620554d624c37f488285b3b04eDan Albert * 106f56ab789cb470620554d624c37f488285b3b04eDan Albert * Unless required by applicable law or agreed to in writing, software 116f56ab789cb470620554d624c37f488285b3b04eDan Albert * distributed under the License is distributed on an "AS IS" BASIS, 126f56ab789cb470620554d624c37f488285b3b04eDan Albert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136f56ab789cb470620554d624c37f488285b3b04eDan Albert * See the License for the specific language governing permissions and 146f56ab789cb470620554d624c37f488285b3b04eDan Albert * limitations under the License. 156f56ab789cb470620554d624c37f488285b3b04eDan Albert */ 166f56ab789cb470620554d624c37f488285b3b04eDan Albert 176f56ab789cb470620554d624c37f488285b3b04eDan Albert#ifndef M3U_PARSER_H_ 186f56ab789cb470620554d624c37f488285b3b04eDan Albert 196f56ab789cb470620554d624c37f488285b3b04eDan Albert#define M3U_PARSER_H_ 206f56ab789cb470620554d624c37f488285b3b04eDan Albert 216f56ab789cb470620554d624c37f488285b3b04eDan Albert#include <media/stagefright/foundation/ABase.h> 226f56ab789cb470620554d624c37f488285b3b04eDan Albert#include <media/stagefright/foundation/AMessage.h> 236f56ab789cb470620554d624c37f488285b3b04eDan Albert#include <media/stagefright/foundation/AString.h> 246f56ab789cb470620554d624c37f488285b3b04eDan Albert#include <utils/Vector.h> 256f56ab789cb470620554d624c37f488285b3b04eDan Albert 266f56ab789cb470620554d624c37f488285b3b04eDan Albertnamespace android { 276f56ab789cb470620554d624c37f488285b3b04eDan Albert 286f56ab789cb470620554d624c37f488285b3b04eDan Albertstruct M3UParser : public RefBase { 296f56ab789cb470620554d624c37f488285b3b04eDan Albert M3UParser(const char *baseURI, const void *data, size_t size); 306f56ab789cb470620554d624c37f488285b3b04eDan Albert 316f56ab789cb470620554d624c37f488285b3b04eDan Albert status_t initCheck() const; 326f56ab789cb470620554d624c37f488285b3b04eDan Albert 336f56ab789cb470620554d624c37f488285b3b04eDan Albert bool isExtM3U() const; 346f56ab789cb470620554d624c37f488285b3b04eDan Albert bool isVariantPlaylist() const; 356f56ab789cb470620554d624c37f488285b3b04eDan Albert bool isComplete() const; 366f56ab789cb470620554d624c37f488285b3b04eDan Albert bool isEvent() const; 376f56ab789cb470620554d624c37f488285b3b04eDan Albert 386f56ab789cb470620554d624c37f488285b3b04eDan Albert sp<AMessage> meta(); 396f56ab789cb470620554d624c37f488285b3b04eDan Albert 406f56ab789cb470620554d624c37f488285b3b04eDan Albert size_t size(); 416f56ab789cb470620554d624c37f488285b3b04eDan Albert bool itemAt(size_t index, AString *uri, sp<AMessage> *meta = NULL); 426f56ab789cb470620554d624c37f488285b3b04eDan Albert 436f56ab789cb470620554d624c37f488285b3b04eDan Albert void pickRandomMediaItems(); 446f56ab789cb470620554d624c37f488285b3b04eDan Albert status_t selectTrack(size_t index, bool select); 456f56ab789cb470620554d624c37f488285b3b04eDan Albert size_t getTrackCount() const; 466f56ab789cb470620554d624c37f488285b3b04eDan Albert sp<AMessage> getTrackInfo(size_t index) const; 476f56ab789cb470620554d624c37f488285b3b04eDan Albert ssize_t getSelectedIndex() const; 486f56ab789cb470620554d624c37f488285b3b04eDan Albert 496f56ab789cb470620554d624c37f488285b3b04eDan Albert bool getTypeURI(size_t index, const char *key, AString *uri) const; 506f56ab789cb470620554d624c37f488285b3b04eDan Albert 516f56ab789cb470620554d624c37f488285b3b04eDan Albertprotected: 526f56ab789cb470620554d624c37f488285b3b04eDan Albert virtual ~M3UParser(); 536f56ab789cb470620554d624c37f488285b3b04eDan Albert 546f56ab789cb470620554d624c37f488285b3b04eDan Albertprivate: 556f56ab789cb470620554d624c37f488285b3b04eDan Albert struct MediaGroup; 566f56ab789cb470620554d624c37f488285b3b04eDan Albert 576f56ab789cb470620554d624c37f488285b3b04eDan Albert struct Item { 586f56ab789cb470620554d624c37f488285b3b04eDan Albert AString mURI; 596f56ab789cb470620554d624c37f488285b3b04eDan Albert sp<AMessage> mMeta; 606f56ab789cb470620554d624c37f488285b3b04eDan Albert }; 616f56ab789cb470620554d624c37f488285b3b04eDan Albert 626f56ab789cb470620554d624c37f488285b3b04eDan Albert status_t mInitCheck; 636f56ab789cb470620554d624c37f488285b3b04eDan Albert 646f56ab789cb470620554d624c37f488285b3b04eDan Albert AString mBaseURI; 656f56ab789cb470620554d624c37f488285b3b04eDan Albert bool mIsExtM3U; 666f56ab789cb470620554d624c37f488285b3b04eDan Albert bool mIsVariantPlaylist; 676f56ab789cb470620554d624c37f488285b3b04eDan Albert bool mIsComplete; 686f56ab789cb470620554d624c37f488285b3b04eDan Albert bool mIsEvent; 696f56ab789cb470620554d624c37f488285b3b04eDan Albert 706f56ab789cb470620554d624c37f488285b3b04eDan Albert sp<AMessage> mMeta; 716f56ab789cb470620554d624c37f488285b3b04eDan Albert Vector<Item> mItems; 726f56ab789cb470620554d624c37f488285b3b04eDan Albert ssize_t mSelectedIndex; 736f56ab789cb470620554d624c37f488285b3b04eDan Albert 746f56ab789cb470620554d624c37f488285b3b04eDan Albert // Media groups keyed by group ID. 756f56ab789cb470620554d624c37f488285b3b04eDan Albert KeyedVector<AString, sp<MediaGroup> > mMediaGroups; 766f56ab789cb470620554d624c37f488285b3b04eDan Albert 776f56ab789cb470620554d624c37f488285b3b04eDan Albert status_t parse(const void *data, size_t size); 786f56ab789cb470620554d624c37f488285b3b04eDan Albert 796f56ab789cb470620554d624c37f488285b3b04eDan Albert static status_t parseMetaData( 806f56ab789cb470620554d624c37f488285b3b04eDan Albert const AString &line, sp<AMessage> *meta, const char *key); 816f56ab789cb470620554d624c37f488285b3b04eDan Albert 826f56ab789cb470620554d624c37f488285b3b04eDan Albert static status_t parseMetaDataDuration( 836f56ab789cb470620554d624c37f488285b3b04eDan Albert const AString &line, sp<AMessage> *meta, const char *key); 846f56ab789cb470620554d624c37f488285b3b04eDan Albert 856f56ab789cb470620554d624c37f488285b3b04eDan Albert status_t parseStreamInf( 866f56ab789cb470620554d624c37f488285b3b04eDan Albert const AString &line, sp<AMessage> *meta) const; 876f56ab789cb470620554d624c37f488285b3b04eDan Albert 886f56ab789cb470620554d624c37f488285b3b04eDan Albert static status_t parseCipherInfo( 896f56ab789cb470620554d624c37f488285b3b04eDan Albert const AString &line, sp<AMessage> *meta, const AString &baseURI); 906f56ab789cb470620554d624c37f488285b3b04eDan Albert 916f56ab789cb470620554d624c37f488285b3b04eDan Albert static status_t parseByteRange( 926f56ab789cb470620554d624c37f488285b3b04eDan Albert const AString &line, uint64_t curOffset, 936f56ab789cb470620554d624c37f488285b3b04eDan Albert uint64_t *length, uint64_t *offset); 946f56ab789cb470620554d624c37f488285b3b04eDan Albert 956f56ab789cb470620554d624c37f488285b3b04eDan Albert status_t parseMedia(const AString &line); 966f56ab789cb470620554d624c37f488285b3b04eDan Albert 976f56ab789cb470620554d624c37f488285b3b04eDan Albert static status_t ParseInt32(const char *s, int32_t *x); 986f56ab789cb470620554d624c37f488285b3b04eDan Albert static status_t ParseDouble(const char *s, double *x); 996f56ab789cb470620554d624c37f488285b3b04eDan Albert 1006f56ab789cb470620554d624c37f488285b3b04eDan Albert static bool isQuotedString(const AString &str); 1016f56ab789cb470620554d624c37f488285b3b04eDan Albert static AString unquoteString(const AString &str); 1026f56ab789cb470620554d624c37f488285b3b04eDan Albert static bool codecIsType(const AString &codec, const char *type); 1036f56ab789cb470620554d624c37f488285b3b04eDan Albert 1046f56ab789cb470620554d624c37f488285b3b04eDan Albert DISALLOW_EVIL_CONSTRUCTORS(M3UParser); 1056f56ab789cb470620554d624c37f488285b3b04eDan Albert}; 1066f56ab789cb470620554d624c37f488285b3b04eDan Albert 1076f56ab789cb470620554d624c37f488285b3b04eDan Albert} // namespace android 1086f56ab789cb470620554d624c37f488285b3b04eDan Albert 1096f56ab789cb470620554d624c37f488285b3b04eDan Albert#endif // M3U_PARSER_H_ 1106f56ab789cb470620554d624c37f488285b3b04eDan Albert