blob: 73b6e31d63b25b197ec34f8c54825d9ad11680ea [file] [log] [blame]
/*
* 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_