/* * Copyright (C) 2018 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 AC4_PARSER_H_ #define AC4_PARSER_H_ #include #include #include #include namespace android { class AC4Parser { public: AC4Parser(); virtual ~AC4Parser() { } virtual bool parse() = 0; struct AC4Presentation { int32_t mChannelMode = -1; int32_t mProgramID = -1; int32_t mGroupIndex = -1; // TS 103 190-1 v1.2.1 4.3.3.8.1 enum ContentClassifiers { kCompleteMain, kMusicAndEffects, kVisuallyImpaired, kHearingImpaired, kDialog, kCommentary, kEmergency, kVoiceOver }; uint32_t mContentClassifier = kCompleteMain; // ETSI TS 103 190-2 V1.1.1 (2015-09) Table 79: channel_mode enum InputChannelMode { kChannelMode_Mono, kChannelMode_Stereo, kChannelMode_3_0, kChannelMode_5_0, kChannelMode_5_1, kChannelMode_7_0_34, kChannelMode_7_1_34, kChannelMode_7_0_52, kChannelMode_7_1_52, kChannelMode_7_0_322, kChannelMode_7_1_322, kChannelMode_7_0_4, kChannelMode_7_1_4, kChannelMode_9_0_4, kChannelMode_9_1_4, kChannelMode_22_2, kChannelMode_Reserved, }; bool mHasDialogEnhancements = false; bool mPreVirtualized = false; bool mEnabled = true; std::string mLanguage; std::string mDescription; }; typedef std::map AC4Presentations; const AC4Presentations& getPresentations() const { return mPresentations; } protected: AC4Presentations mPresentations; }; class AC4DSIParser: public AC4Parser { public: explicit AC4DSIParser(ABitReader &br); virtual ~AC4DSIParser() { } bool parse(); private: bool parseSubstreamDSI(uint32_t presentationID, uint32_t substreamID); bool parseSubstreamGroupDSI(uint32_t presentationID, uint32_t groupID); bool parseLanguageTag(uint32_t presentationID, uint32_t substreamID); bool parseBitrateDsi(); uint64_t mDSISize; ABitReader& mBitReader; }; }; #endif // AC4_PARSER_H_