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

Commit e64477e5 authored by Chong Zhang's avatar Chong Zhang Committed by android-build-merger
Browse files

MediaCas: changes to address API review comments am: bc7aae4f

am: e7744dc6

Change-Id: Ie9ea42858660f70a5f023bfd9e4eaf926c9bb65f
parents 3855688c e7744dc6
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -613,12 +613,21 @@ status_t convertMetaDataToMessage(
    uint32_t type;
    const void *data;
    size_t size;
    if (meta->findData(kKeyCas, &type, &data, &size)) {
    if (meta->findData(kKeyCASessionID, &type, &data, &size)) {
        sp<ABuffer> buffer = new (std::nothrow) ABuffer(size);
        msg->setBuffer("cas", buffer);
        if (buffer.get() == NULL || buffer->base() == NULL) {
            return NO_MEMORY;
        }

        msg->setBuffer("ca-session-id", buffer);
        memcpy(buffer->data(), data, size);
    }

    int32_t systemId;
    if (meta->findInt32(kKeyCASystemID, &systemId)) {
        msg->setInt32("ca-system-id", systemId);
    }

    if (!strncasecmp("video/scrambled", mime, 15)
            || !strncasecmp("audio/scrambled", mime, 15)) {

+2 −1
Original line number Diff line number Diff line
@@ -176,7 +176,8 @@ enum {
    kKeyCryptoDefaultIVSize = 'cryS',  // int32_t

    kKeyPssh              = 'pssh',  // raw data
    kKeyCas               = ' cas',
    kKeyCASystemID        = 'caid',  // int32_t
    kKeyCASessionID       = 'seid',  // raw data

    // Please see MediaFormat.KEY_IS_AUTOSELECT.
    kKeyTrackIsAutoselect = 'auto', // bool (int32_t)
+11 −9
Original line number Diff line number Diff line
@@ -140,7 +140,8 @@ struct ATSParser::Stream : public RefBase {
    unsigned pid() const { return mElementaryPID; }
    void setPID(unsigned pid) { mElementaryPID = pid; }

    void setCasSession(
    void setCasInfo(
            int32_t systemId,
            const sp<IDescrambler> &descrambler,
            const std::vector<uint8_t> &sessionId);

@@ -682,9 +683,10 @@ void ATSParser::Program::updateCasSessions() {
        sp<Stream> &stream = mStreams.editValueAt(i);
        sp<IDescrambler> descrambler;
        std::vector<uint8_t> sessionId;
        if (mParser->mCasManager->getCasSession(
                mProgramNumber, stream->pid(), &descrambler, &sessionId)) {
            stream->setCasSession(descrambler, sessionId);
        int32_t systemId;
        if (mParser->mCasManager->getCasInfo(mProgramNumber, stream->pid(),
                &systemId, &descrambler, &sessionId)) {
            stream->setCasInfo(systemId, descrambler, sessionId);
        }
    }
}
@@ -767,8 +769,8 @@ ATSParser::Stream::Stream(
            meta->setCString(kKeyMIMEType,
                    isAudio() ? MEDIA_MIMETYPE_AUDIO_SCRAMBLED
                              : MEDIA_MIMETYPE_VIDEO_SCRAMBLED);
            // for DrmInitData
            meta->setData(kKeyCas, 0, &CA_system_ID, sizeof(CA_system_ID));
            // for MediaExtractor.CasInfo
            meta->setInt32(kKeyCASystemID, CA_system_ID);
            mSource = new AnotherPacketSource(meta);
        }
    }
@@ -1566,14 +1568,14 @@ sp<MediaSource> ATSParser::Stream::getSource(SourceType type) {
    return NULL;
}

void ATSParser::Stream::setCasSession(
        const sp<IDescrambler> &descrambler,
void ATSParser::Stream::setCasInfo(
        int32_t systemId, const sp<IDescrambler> &descrambler,
        const std::vector<uint8_t> &sessionId) {
    if (mSource != NULL && mDescrambler == NULL && descrambler != NULL) {
        signalDiscontinuity(DISCONTINUITY_FORMAT_ONLY, NULL);
        mDescrambler = descrambler;
        if (mQueue->isScrambled()) {
            mQueue->setCasSession(sessionId);
            mQueue->setCasInfo(systemId, sessionId);
        }
    }
}
+4 −2
Original line number Diff line number Diff line
@@ -298,13 +298,15 @@ bool ATSParser::CasManager::addStream(
    return true;
}

bool ATSParser::CasManager::getCasSession(
bool ATSParser::CasManager::getCasInfo(
        unsigned programNumber, unsigned elementaryPID,
        sp<IDescrambler> *descrambler, std::vector<uint8_t> *sessionId) const {
        int32_t *systemId, sp<IDescrambler> *descrambler,
        std::vector<uint8_t> *sessionId) const {
    ssize_t index = mProgramCasMap.indexOfKey(programNumber);
    if (index < 0) {
        return false;
    }
    *systemId = mSystemId;
    return mProgramCasMap[index]->getCasSession(
            elementaryPID, descrambler, sessionId);
}
+2 −2
Original line number Diff line number Diff line
@@ -39,9 +39,9 @@ struct ATSParser::CasManager : public RefBase {
            unsigned programNumber, unsigned elementaryPID,
            const CADescriptor &descriptor);

    bool getCasSession(
    bool getCasInfo(
            unsigned programNumber, unsigned elementaryPID,
            sp<IDescrambler> *descrambler,
            int32_t *systemId, sp<IDescrambler> *descrambler,
            std::vector<uint8_t> *sessionId) const;

    bool isCAPid(unsigned pid);
Loading