Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3beba388 authored by Rahul's avatar Rahul Committed by Dorin Drimus
Browse files

MPEG2-TS: Add DTS, DTS-LBR, and DTS:X Profile2 support

* Add support for extracting DTS, DTS-HD and DTS-UHD descriptor ID
  from PSI PMT
* Dequeue and parse DTS(Digital Surround), DTS-LBR(DTS Express),
  and DTS:X Profile-2(UHD Profile 2) frame.

Bug: 260223911
Test: atest CtsMediaExtractorTestCases
Change-Id: I4496d800b7a4973c64bc3bb6540ed3484304ce2e
parent 9a4e2bf6
Loading
Loading
Loading
Loading
+31 −2
Original line number Diff line number Diff line
@@ -556,7 +556,15 @@ status_t ATSParser::Program::parseProgramMap(ABitReader *br) {
            if (descriptor_length > ES_info_length) {
                return ERROR_MALFORMED;
            }
            if (descriptor_tag == DESCRIPTOR_CA && descriptor_length >= 4) {

            // The DTS descriptor is used in the PSI PMT to identify streams which carry
            // DTS audio(core only). If a DTS descriptor is present, a DTS-HD or DTS-UHD
            // descriptors shall not be present in the same ES_info descriptor loop.
            if (descriptor_tag == DESCRIPTOR_DTS) {
                info.mType = STREAMTYPE_DTS;
                ES_info_length -= descriptor_length;
                br->skipBits(descriptor_length * 8);
            } else if (descriptor_tag == DESCRIPTOR_CA && descriptor_length >= 4) {
                hasStreamCA = true;
                streamCA.mSystemID = br->getBits(16);
                streamCA.mPID = br->getBits(16) & 0x1fff;
@@ -575,6 +583,16 @@ status_t ATSParser::Program::parseProgramMap(ABitReader *br) {
                if (descTagExt == EXT_DESCRIPTOR_DVB_AC4) {
                    info.mTypeExt = EXT_DESCRIPTOR_DVB_AC4;
                    br->skipBits(descriptor_length * 8);
                } else if (descTagExt == EXT_DESCRIPTOR_DVB_DTS_HD) {
                    // DTS HD extended descriptor which can accommodate core only formats
                    // as well as extension only and core + extension combinations.
                    info.mTypeExt = EXT_DESCRIPTOR_DVB_DTS_HD;
                    br->skipBits(descriptor_length * 8);
                } else if (descTagExt == EXT_DESCRIPTOR_DVB_DTS_UHD) {
                    // The DTS-UHD descriptor is used in the PSI PMT to identify streams
                    // which carry DTS-UHD audio
                    info.mTypeExt = EXT_DESCRIPTOR_DVB_DTS_UHD;
                    br->skipBits(descriptor_length * 8);
                } else if (descTagExt == EXT_DESCRIPTOR_DVB_AUDIO_PRESELECTION &&
                           descriptor_length >= 1) {
                    // DVB BlueBook A038 Table 110
@@ -920,9 +938,17 @@ ATSParser::Stream::Stream(
            mode = ElementaryStreamQueue::EAC3;
            break;

        case STREAMTYPE_DTS:
            mode = ElementaryStreamQueue::DTS;
            break;

        case STREAMTYPE_PES_PRIVATE_DATA:
            if (mStreamTypeExt == EXT_DESCRIPTOR_DVB_AC4) {
                mode = ElementaryStreamQueue::AC4;
            } else if (mStreamTypeExt == EXT_DESCRIPTOR_DVB_DTS_HD) {
                mode = ElementaryStreamQueue::DTS_HD;
            } else if (mStreamTypeExt == EXT_DESCRIPTOR_DVB_DTS_UHD) {
                mode = ElementaryStreamQueue::DTS_UHD;
            }
            break;

@@ -1158,9 +1184,12 @@ bool ATSParser::Stream::isAudio() const {
        case STREAMTYPE_EAC3:
        case STREAMTYPE_AAC_ENCRYPTED:
        case STREAMTYPE_AC3_ENCRYPTED:
        case STREAMTYPE_DTS:
            return true;
        case STREAMTYPE_PES_PRIVATE_DATA:
            return mStreamTypeExt == EXT_DESCRIPTOR_DVB_AC4;
            return (mStreamTypeExt == EXT_DESCRIPTOR_DVB_AC4
                    || mStreamTypeExt == EXT_DESCRIPTOR_DVB_DTS_HD
                    || mStreamTypeExt == EXT_DESCRIPTOR_DVB_DTS_UHD);

        default:
            return false;
+606 −0

File changed.

Preview size limit exceeded, changes collapsed.

+6 −0
Original line number Diff line number Diff line
@@ -157,6 +157,9 @@ struct ATSParser : public RefBase {
        STREAMTYPE_LPCM_AC3             = 0x83,
        STREAMTYPE_EAC3                 = 0x87,

        // DTS audio stream type which contains only Core substream
        STREAMTYPE_DTS                  = 0x8A,

        //Sample Encrypted types
        STREAMTYPE_H264_ENCRYPTED       = 0xDB,
        STREAMTYPE_AAC_ENCRYPTED        = 0xCF,
@@ -168,6 +171,7 @@ struct ATSParser : public RefBase {
        DESCRIPTOR_CA                   = 0x09,

        // DVB BlueBook A038 Table 12
        DESCRIPTOR_DTS                  = 0x7B,
        DESCRIPTOR_DVB_EXTENSION        = 0x7F,
    };

@@ -175,6 +179,8 @@ struct ATSParser : public RefBase {
    enum {
        EXT_DESCRIPTOR_DVB_AC4                  = 0x15,
        EXT_DESCRIPTOR_DVB_AUDIO_PRESELECTION   = 0x19,
        EXT_DESCRIPTOR_DVB_DTS_HD               = 0x0E,
        EXT_DESCRIPTOR_DVB_DTS_UHD              = 0x21,
        EXT_DESCRIPTOR_DVB_RESERVED_MAX         = 0x7F,
    };

+5 −0

File changed.

Preview size limit exceeded, changes collapsed.