Loading media/libstagefright/Utils.cpp +11 −2 Original line number Diff line number Diff line Loading @@ -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)) { Loading media/libstagefright/include/MetaData.h +2 −1 Original line number Diff line number Diff line Loading @@ -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) Loading media/libstagefright/mpeg2ts/ATSParser.cpp +11 −9 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); } } } Loading Loading @@ -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); } } Loading Loading @@ -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); } } } Loading media/libstagefright/mpeg2ts/CasManager.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -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); } Loading media/libstagefright/mpeg2ts/CasManager.h +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading
media/libstagefright/Utils.cpp +11 −2 Original line number Diff line number Diff line Loading @@ -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)) { Loading
media/libstagefright/include/MetaData.h +2 −1 Original line number Diff line number Diff line Loading @@ -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) Loading
media/libstagefright/mpeg2ts/ATSParser.cpp +11 −9 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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); } } } Loading Loading @@ -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); } } Loading Loading @@ -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); } } } Loading
media/libstagefright/mpeg2ts/CasManager.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -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); } Loading
media/libstagefright/mpeg2ts/CasManager.h +2 −2 Original line number Diff line number Diff line Loading @@ -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