Loading media/libmediaextractor/include/media/stagefright/MetaDataBase.h +1 −0 Original line number Diff line number Diff line Loading @@ -179,6 +179,7 @@ enum { kKeyPssh = 'pssh', // raw data kKeyCASystemID = 'caid', // int32_t kKeyCASessionID = 'seid', // raw data kKeyCAPrivateData = 'cadc', // raw data kKeyEncryptedByteBlock = 'cblk', // uint8_t kKeySkipByteBlock = 'sblk', // uint8_t Loading media/libstagefright/Utils.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -724,6 +724,16 @@ status_t convertMetaDataToMessage( memcpy(buffer->data(), data, size); } if (meta->findData(kKeyCAPrivateData, &type, &data, &size)) { sp<ABuffer> buffer = new (std::nothrow) ABuffer(size); if (buffer.get() == NULL || buffer->base() == NULL) { return NO_MEMORY; } msg->setBuffer("ca-private-data", buffer); memcpy(buffer->data(), data, size); } int32_t systemId; if (meta->findInt32(kKeyCASystemID, &systemId)) { msg->setInt32("ca-system-id", systemId); Loading Loading @@ -1478,6 +1488,19 @@ void convertMessageToMetaData(const sp<AMessage> &msg, sp<MetaData> &meta) { convertMessageToMetaDataFromMappings(msg, meta); int32_t systemId; if (msg->findInt32("ca-system-id", &systemId)) { meta->setInt32(kKeyCASystemID, systemId); sp<ABuffer> caSessionId, caPvtData; if (msg->findBuffer("ca-session-id", &caSessionId)) { meta->setData(kKeyCASessionID, 0, caSessionId->data(), caSessionId->size()); } if (msg->findBuffer("ca-private-data", &caPvtData)) { meta->setData(kKeyCAPrivateData, 0, caPvtData->data(), caPvtData->size()); } } int64_t durationUs; if (msg->findInt64("durationUs", &durationUs)) { meta->setInt64(kKeyDuration, durationUs); Loading media/libstagefright/include/media/stagefright/MediaCodecConstants.h +1 −0 Original line number Diff line number Diff line Loading @@ -327,6 +327,7 @@ constexpr char KEY_BIT_RATE[] = "bitrate"; constexpr char KEY_BITRATE_MODE[] = "bitrate-mode"; constexpr char KEY_CA_SESSION_ID[] = "ca-session-id"; constexpr char KEY_CA_SYSTEM_ID[] = "ca-system-id"; constexpr char KEY_CA_PRIVATE_DATA[] = "ca-private-data"; constexpr char KEY_CAPTURE_RATE[] = "capture-rate"; constexpr char KEY_CHANNEL_COUNT[] = "channel-count"; constexpr char KEY_CHANNEL_MASK[] = "channel-mask"; Loading media/libstagefright/mpeg2ts/ATSParser.cpp +23 −31 Original line number Diff line number Diff line Loading @@ -117,12 +117,6 @@ struct ATSParser::Program : public RefBase { void signalNewSampleAesKey(const sp<AMessage> &keyItem); private: struct StreamInfo { unsigned mType; unsigned mTypeExt; unsigned mPID; int32_t mCASystemId; }; ATSParser *mParser; unsigned mProgramNumber; Loading @@ -143,12 +137,7 @@ private: }; struct ATSParser::Stream : public RefBase { Stream(Program *program, unsigned elementaryPID, unsigned streamType, unsigned streamTypeExt, unsigned PCR_PID, int32_t CA_system_ID); Stream(Program *program, unsigned PCR_PID, const StreamInfo &info); unsigned type() const { return mStreamType; } unsigned typeExt() const { return mStreamTypeExt; } Loading Loading @@ -575,8 +564,12 @@ status_t ATSParser::Program::parseProgramMap(ABitReader *br) { mProgramNumber, info.mPID, streamCA)) { return ERROR_MALFORMED; } info.mCASystemId = hasProgramCA ? programCA.mSystemID : hasStreamCA ? streamCA.mSystemID : -1; if (hasProgramCA) { info.mCADescriptor = programCA; } else if (hasStreamCA) { info.mCADescriptor = streamCA; } infos.push(info); } Loading Loading @@ -635,14 +628,13 @@ status_t ATSParser::Program::parseProgramMap(ABitReader *br) { ssize_t index = mStreams.indexOfKey(info.mPID); if (index < 0) { sp<Stream> stream = new Stream( this, info.mPID, info.mType, info.mTypeExt, PCR_PID, info.mCASystemId); sp<Stream> stream = new Stream(this, PCR_PID, info); if (mSampleAesKeyItem != NULL) { stream->signalNewSampleAesKey(mSampleAesKeyItem); } isAddingScrambledStream |= info.mCASystemId >= 0; isAddingScrambledStream |= info.mCADescriptor.mSystemID >= 0; mStreams.add(info.mPID, stream); } } Loading Loading @@ -751,31 +743,25 @@ void ATSParser::Program::updateCasSessions() { static const size_t kInitialStreamBufferSize = 192 * 1024; ATSParser::Stream::Stream( Program *program, unsigned elementaryPID, unsigned streamType, unsigned streamTypeExt, unsigned PCR_PID, int32_t CA_system_ID) Program *program, unsigned PCR_PID, const StreamInfo &info) : mProgram(program), mElementaryPID(elementaryPID), mStreamType(streamType), mStreamTypeExt(streamTypeExt), mElementaryPID(info.mPID), mStreamType(info.mType), mStreamTypeExt(info.mTypeExt), mPCR_PID(PCR_PID), mExpectedContinuityCounter(-1), mPayloadStarted(false), mEOSReached(false), mPrevPTS(0), mQueue(NULL), mScrambled(CA_system_ID >= 0) { mScrambled(info.mCADescriptor.mSystemID >= 0) { mSampleEncrypted = mStreamType == STREAMTYPE_H264_ENCRYPTED || mStreamType == STREAMTYPE_AAC_ENCRYPTED || mStreamType == STREAMTYPE_AC3_ENCRYPTED; ALOGV("new stream PID 0x%02x, type 0x%02x, scrambled %d, SampleEncrypted: %d", elementaryPID, streamType, mScrambled, mSampleEncrypted); info.mPID, info.mType, mScrambled, mSampleEncrypted); uint32_t flags = 0; if (((isVideo() || isAudio()) && mScrambled)) { Loading Loading @@ -835,7 +821,7 @@ ATSParser::Stream::Stream( default: ALOGE("stream PID 0x%02x has invalid stream type 0x%02x", elementaryPID, streamType); info.mPID, info.mType); return; } Loading @@ -855,7 +841,13 @@ ATSParser::Stream::Stream( isAudio() ? MEDIA_MIMETYPE_AUDIO_SCRAMBLED : MEDIA_MIMETYPE_VIDEO_SCRAMBLED); // for MediaExtractor.CasInfo meta->setInt32(kKeyCASystemID, CA_system_ID); const CADescriptor &descriptor = info.mCADescriptor; meta->setInt32(kKeyCASystemID, descriptor.mSystemID); meta->setData(kKeyCAPrivateData, 0, descriptor.mPrivateData.data(), descriptor.mPrivateData.size()); mSource = new AnotherPacketSource(meta); } } Loading media/libstagefright/mpeg2ts/ATSParser.h +9 −1 Original line number Diff line number Diff line Loading @@ -185,11 +185,19 @@ private: struct PSISection; struct CasManager; struct CADescriptor { int32_t mSystemID; CADescriptor() : mPID(0), mSystemID(-1) {} unsigned mPID; int32_t mSystemID; std::vector<uint8_t> mPrivateData; }; struct StreamInfo { unsigned mType; unsigned mTypeExt; unsigned mPID; CADescriptor mCADescriptor; }; sp<CasManager> mCasManager; uint32_t mFlags; Loading Loading
media/libmediaextractor/include/media/stagefright/MetaDataBase.h +1 −0 Original line number Diff line number Diff line Loading @@ -179,6 +179,7 @@ enum { kKeyPssh = 'pssh', // raw data kKeyCASystemID = 'caid', // int32_t kKeyCASessionID = 'seid', // raw data kKeyCAPrivateData = 'cadc', // raw data kKeyEncryptedByteBlock = 'cblk', // uint8_t kKeySkipByteBlock = 'sblk', // uint8_t Loading
media/libstagefright/Utils.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -724,6 +724,16 @@ status_t convertMetaDataToMessage( memcpy(buffer->data(), data, size); } if (meta->findData(kKeyCAPrivateData, &type, &data, &size)) { sp<ABuffer> buffer = new (std::nothrow) ABuffer(size); if (buffer.get() == NULL || buffer->base() == NULL) { return NO_MEMORY; } msg->setBuffer("ca-private-data", buffer); memcpy(buffer->data(), data, size); } int32_t systemId; if (meta->findInt32(kKeyCASystemID, &systemId)) { msg->setInt32("ca-system-id", systemId); Loading Loading @@ -1478,6 +1488,19 @@ void convertMessageToMetaData(const sp<AMessage> &msg, sp<MetaData> &meta) { convertMessageToMetaDataFromMappings(msg, meta); int32_t systemId; if (msg->findInt32("ca-system-id", &systemId)) { meta->setInt32(kKeyCASystemID, systemId); sp<ABuffer> caSessionId, caPvtData; if (msg->findBuffer("ca-session-id", &caSessionId)) { meta->setData(kKeyCASessionID, 0, caSessionId->data(), caSessionId->size()); } if (msg->findBuffer("ca-private-data", &caPvtData)) { meta->setData(kKeyCAPrivateData, 0, caPvtData->data(), caPvtData->size()); } } int64_t durationUs; if (msg->findInt64("durationUs", &durationUs)) { meta->setInt64(kKeyDuration, durationUs); Loading
media/libstagefright/include/media/stagefright/MediaCodecConstants.h +1 −0 Original line number Diff line number Diff line Loading @@ -327,6 +327,7 @@ constexpr char KEY_BIT_RATE[] = "bitrate"; constexpr char KEY_BITRATE_MODE[] = "bitrate-mode"; constexpr char KEY_CA_SESSION_ID[] = "ca-session-id"; constexpr char KEY_CA_SYSTEM_ID[] = "ca-system-id"; constexpr char KEY_CA_PRIVATE_DATA[] = "ca-private-data"; constexpr char KEY_CAPTURE_RATE[] = "capture-rate"; constexpr char KEY_CHANNEL_COUNT[] = "channel-count"; constexpr char KEY_CHANNEL_MASK[] = "channel-mask"; Loading
media/libstagefright/mpeg2ts/ATSParser.cpp +23 −31 Original line number Diff line number Diff line Loading @@ -117,12 +117,6 @@ struct ATSParser::Program : public RefBase { void signalNewSampleAesKey(const sp<AMessage> &keyItem); private: struct StreamInfo { unsigned mType; unsigned mTypeExt; unsigned mPID; int32_t mCASystemId; }; ATSParser *mParser; unsigned mProgramNumber; Loading @@ -143,12 +137,7 @@ private: }; struct ATSParser::Stream : public RefBase { Stream(Program *program, unsigned elementaryPID, unsigned streamType, unsigned streamTypeExt, unsigned PCR_PID, int32_t CA_system_ID); Stream(Program *program, unsigned PCR_PID, const StreamInfo &info); unsigned type() const { return mStreamType; } unsigned typeExt() const { return mStreamTypeExt; } Loading Loading @@ -575,8 +564,12 @@ status_t ATSParser::Program::parseProgramMap(ABitReader *br) { mProgramNumber, info.mPID, streamCA)) { return ERROR_MALFORMED; } info.mCASystemId = hasProgramCA ? programCA.mSystemID : hasStreamCA ? streamCA.mSystemID : -1; if (hasProgramCA) { info.mCADescriptor = programCA; } else if (hasStreamCA) { info.mCADescriptor = streamCA; } infos.push(info); } Loading Loading @@ -635,14 +628,13 @@ status_t ATSParser::Program::parseProgramMap(ABitReader *br) { ssize_t index = mStreams.indexOfKey(info.mPID); if (index < 0) { sp<Stream> stream = new Stream( this, info.mPID, info.mType, info.mTypeExt, PCR_PID, info.mCASystemId); sp<Stream> stream = new Stream(this, PCR_PID, info); if (mSampleAesKeyItem != NULL) { stream->signalNewSampleAesKey(mSampleAesKeyItem); } isAddingScrambledStream |= info.mCASystemId >= 0; isAddingScrambledStream |= info.mCADescriptor.mSystemID >= 0; mStreams.add(info.mPID, stream); } } Loading Loading @@ -751,31 +743,25 @@ void ATSParser::Program::updateCasSessions() { static const size_t kInitialStreamBufferSize = 192 * 1024; ATSParser::Stream::Stream( Program *program, unsigned elementaryPID, unsigned streamType, unsigned streamTypeExt, unsigned PCR_PID, int32_t CA_system_ID) Program *program, unsigned PCR_PID, const StreamInfo &info) : mProgram(program), mElementaryPID(elementaryPID), mStreamType(streamType), mStreamTypeExt(streamTypeExt), mElementaryPID(info.mPID), mStreamType(info.mType), mStreamTypeExt(info.mTypeExt), mPCR_PID(PCR_PID), mExpectedContinuityCounter(-1), mPayloadStarted(false), mEOSReached(false), mPrevPTS(0), mQueue(NULL), mScrambled(CA_system_ID >= 0) { mScrambled(info.mCADescriptor.mSystemID >= 0) { mSampleEncrypted = mStreamType == STREAMTYPE_H264_ENCRYPTED || mStreamType == STREAMTYPE_AAC_ENCRYPTED || mStreamType == STREAMTYPE_AC3_ENCRYPTED; ALOGV("new stream PID 0x%02x, type 0x%02x, scrambled %d, SampleEncrypted: %d", elementaryPID, streamType, mScrambled, mSampleEncrypted); info.mPID, info.mType, mScrambled, mSampleEncrypted); uint32_t flags = 0; if (((isVideo() || isAudio()) && mScrambled)) { Loading Loading @@ -835,7 +821,7 @@ ATSParser::Stream::Stream( default: ALOGE("stream PID 0x%02x has invalid stream type 0x%02x", elementaryPID, streamType); info.mPID, info.mType); return; } Loading @@ -855,7 +841,13 @@ ATSParser::Stream::Stream( isAudio() ? MEDIA_MIMETYPE_AUDIO_SCRAMBLED : MEDIA_MIMETYPE_VIDEO_SCRAMBLED); // for MediaExtractor.CasInfo meta->setInt32(kKeyCASystemID, CA_system_ID); const CADescriptor &descriptor = info.mCADescriptor; meta->setInt32(kKeyCASystemID, descriptor.mSystemID); meta->setData(kKeyCAPrivateData, 0, descriptor.mPrivateData.data(), descriptor.mPrivateData.size()); mSource = new AnotherPacketSource(meta); } } Loading
media/libstagefright/mpeg2ts/ATSParser.h +9 −1 Original line number Diff line number Diff line Loading @@ -185,11 +185,19 @@ private: struct PSISection; struct CasManager; struct CADescriptor { int32_t mSystemID; CADescriptor() : mPID(0), mSystemID(-1) {} unsigned mPID; int32_t mSystemID; std::vector<uint8_t> mPrivateData; }; struct StreamInfo { unsigned mType; unsigned mTypeExt; unsigned mPID; CADescriptor mCADescriptor; }; sp<CasManager> mCasManager; uint32_t mFlags; Loading