You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
2.8 KiB
110 lines
2.8 KiB
4 months ago
|
/*
|
||
|
* 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 <cstdint>
|
||
|
#include <map>
|
||
|
#include <string>
|
||
|
|
||
|
#include <media/stagefright/foundation/ABitReader.h>
|
||
|
|
||
|
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<uint32_t, AC4Presentation> 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_
|