• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (C) 2018 The Android Open Source Project
3   *
4   * Licensed under the Apache License, Version 2.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7   *
8   *      http://www.apache.org/licenses/LICENSE-2.0
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  
17  #ifndef AC4_PARSER_H_
18  #define AC4_PARSER_H_
19  
20  #include <cstdint>
21  #include <map>
22  #include <string>
23  
24  #include <media/stagefright/foundation/ABitReader.h>
25  
26  namespace android {
27  
28  class AC4Parser {
29  public:
30      AC4Parser();
~AC4Parser()31      virtual ~AC4Parser() { }
32  
33      virtual bool parse() = 0;
34  
35      struct AC4Presentation {
36          int32_t mChannelMode = -1;
37          int32_t mProgramID = -1;
38          int32_t mGroupIndex = -1;
39  
40          // TS 103 190-1 v1.2.1 4.3.3.8.1
41          enum ContentClassifiers {
42              kCompleteMain,
43              kMusicAndEffects,
44              kVisuallyImpaired,
45              kHearingImpaired,
46              kDialog,
47              kCommentary,
48              kEmergency,
49              kVoiceOver
50          };
51  
52          uint32_t mContentClassifier = kCompleteMain;
53  
54          // ETSI TS 103 190-2 V1.1.1 (2015-09) Table 79: channel_mode
55          enum InputChannelMode {
56              kChannelMode_Mono,
57              kChannelMode_Stereo,
58              kChannelMode_3_0,
59              kChannelMode_5_0,
60              kChannelMode_5_1,
61              kChannelMode_7_0_34,
62              kChannelMode_7_1_34,
63              kChannelMode_7_0_52,
64              kChannelMode_7_1_52,
65              kChannelMode_7_0_322,
66              kChannelMode_7_1_322,
67              kChannelMode_7_0_4,
68              kChannelMode_7_1_4,
69              kChannelMode_9_0_4,
70              kChannelMode_9_1_4,
71              kChannelMode_22_2,
72              kChannelMode_Reserved,
73          };
74  
75          bool mHasDialogEnhancements = false;
76          bool mPreVirtualized = false;
77          bool mEnabled = true;
78  
79          std::string mLanguage;
80          std::string mDescription;
81      };
82      typedef std::map<uint32_t, AC4Presentation> AC4Presentations;
83  
getPresentations()84      const AC4Presentations& getPresentations() const { return mPresentations; }
85  
86  protected:
87      AC4Presentations mPresentations;
88  };
89  
90  class AC4DSIParser: public AC4Parser {
91  public:
92      explicit AC4DSIParser(ABitReader &br);
~AC4DSIParser()93      virtual ~AC4DSIParser() { }
94  
95      bool parse();
96  
97  private:
98      bool parseSubstreamDSI(uint32_t presentationID, uint32_t substreamID);
99      bool parseSubstreamGroupDSI(uint32_t presentationID, uint32_t groupID);
100      bool parseLanguageTag(uint32_t presentationID, uint32_t substreamID);
101      bool parseBitrateDsi();
102  
103      uint64_t mDSISize;
104      ABitReader& mBitReader;
105  };
106  
107  };
108  
109  #endif  // AC4_PARSER_H_
110