Loading media/libstagefright/wifi-display/source/PlaybackSession.cpp +34 −7 Original line number Diff line number Diff line Loading @@ -24,11 +24,13 @@ #include "MediaPuller.h" #include "RepeaterSource.h" #include "TSPacketizer.h" #include "include/avc_utils.h" #include <binder/IServiceManager.h> #include <gui/ISurfaceComposer.h> #include <gui/SurfaceComposerClient.h> #include <media/IHDCP.h> #include <media/stagefright/foundation/ABitReader.h> #include <media/stagefright/foundation/ABuffer.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/AMessage.h> Loading Loading @@ -1302,7 +1304,7 @@ static inline size_t MIN(size_t a, size_t b) { } status_t WifiDisplaySource::PlaybackSession::packetizeAccessUnit( size_t trackIndex, const sp<ABuffer> &accessUnit) { size_t trackIndex, sp<ABuffer> accessUnit) { const sp<Track> &track = mTracks.valueFor(trackIndex); uint32_t flags = 0; Loading @@ -1318,15 +1320,14 @@ status_t WifiDisplaySource::PlaybackSession::packetizeAccessUnit( hexdump(accessUnit->data(), MIN(64, accessUnit->size())); #endif if (mTempAccessUnit == NULL || mTempAccessUnit->capacity() < accessUnit->size()) { mTempAccessUnit = new ABuffer(accessUnit->size()); if (IsIDR(accessUnit)) { // XXX remove this once the encoder takes care of this. accessUnit = mPacketizer->prependCSD( track->packetizerTrackIndex(), accessUnit); } memcpy(mTempAccessUnit->data(), accessUnit->data(), accessUnit->size()); status_t err = mHDCP->encrypt( mTempAccessUnit->data(), mTempAccessUnit->size(), accessUnit->data(), accessUnit->size(), trackIndex /* streamCTR */, &inputCTR, accessUnit->data()); Loading @@ -1341,6 +1342,7 @@ status_t WifiDisplaySource::PlaybackSession::packetizeAccessUnit( ALOGI("out:"); hexdump(accessUnit->data(), MIN(64, accessUnit->size())); ALOGI("inputCTR: 0x%016llx", inputCTR); ALOGI("streamCTR: 0x%08x", trackIndex); #endif } Loading Loading @@ -1384,6 +1386,31 @@ status_t WifiDisplaySource::PlaybackSession::packetizeAccessUnit( HDCP_private_data[15] = ((inputCTR & 0x7f) << 1) | 1; #if 0 ALOGI("HDCP_private_data:"); hexdump(HDCP_private_data, sizeof(HDCP_private_data)); ABitReader br(HDCP_private_data, sizeof(HDCP_private_data)); CHECK_EQ(br.getBits(13), 0); CHECK_EQ(br.getBits(2), (trackIndex >> 30) & 3); CHECK_EQ(br.getBits(1), 1u); CHECK_EQ(br.getBits(15), (trackIndex >> 15) & 0x7fff); CHECK_EQ(br.getBits(1), 1u); CHECK_EQ(br.getBits(15), trackIndex & 0x7fff); CHECK_EQ(br.getBits(1), 1u); CHECK_EQ(br.getBits(11), 0); CHECK_EQ(br.getBits(4), (inputCTR >> 60) & 0xf); CHECK_EQ(br.getBits(1), 1u); CHECK_EQ(br.getBits(15), (inputCTR >> 45) & 0x7fff); CHECK_EQ(br.getBits(1), 1u); CHECK_EQ(br.getBits(15), (inputCTR >> 30) & 0x7fff); CHECK_EQ(br.getBits(1), 1u); CHECK_EQ(br.getBits(15), (inputCTR >> 15) & 0x7fff); CHECK_EQ(br.getBits(1), 1u); CHECK_EQ(br.getBits(15), inputCTR & 0x7fff); CHECK_EQ(br.getBits(1), 1u); #endif flags |= TSPacketizer::IS_ENCRYPTED; } Loading media/libstagefright/wifi-display/source/PlaybackSession.h +1 −3 Original line number Diff line number Diff line Loading @@ -164,8 +164,6 @@ private: uint64_t mTotalBytesSent; sp<ABuffer> mTempAccessUnit; #if LOG_TRANSPORT_STREAM FILE *mLogFile; #endif Loading Loading @@ -203,7 +201,7 @@ private: bool allTracksHavePacketizerIndex(); status_t packetizeAccessUnit( size_t trackIndex, const sp<ABuffer> &accessUnit); size_t trackIndex, sp<ABuffer> accessUnit); status_t packetizeQueuedAccessUnits(); Loading media/libstagefright/wifi-display/source/TSPacketizer.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -702,5 +702,22 @@ uint32_t TSPacketizer::crc32(const uint8_t *start, size_t size) const { return crc; } sp<ABuffer> TSPacketizer::prependCSD( size_t trackIndex, const sp<ABuffer> &accessUnit) const { CHECK_LT(trackIndex, mTracks.size()); const sp<Track> &track = mTracks.itemAt(trackIndex); CHECK(track->isH264() && IsIDR(accessUnit)); int64_t timeUs; CHECK(accessUnit->meta()->findInt64("timeUs", &timeUs)); sp<ABuffer> accessUnit2 = track->prependCSD(accessUnit); accessUnit2->meta()->setInt64("timeUs", timeUs); return accessUnit2; } } // namespace android media/libstagefright/wifi-display/source/TSPacketizer.h +5 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,11 @@ struct TSPacketizer : public RefBase { uint32_t flags, const uint8_t *PES_private_data, size_t PES_private_data_len); // XXX to be removed once encoder config option takes care of this for // encrypted mode. sp<ABuffer> prependCSD( size_t trackIndex, const sp<ABuffer> &accessUnit) const; protected: virtual ~TSPacketizer(); Loading Loading
media/libstagefright/wifi-display/source/PlaybackSession.cpp +34 −7 Original line number Diff line number Diff line Loading @@ -24,11 +24,13 @@ #include "MediaPuller.h" #include "RepeaterSource.h" #include "TSPacketizer.h" #include "include/avc_utils.h" #include <binder/IServiceManager.h> #include <gui/ISurfaceComposer.h> #include <gui/SurfaceComposerClient.h> #include <media/IHDCP.h> #include <media/stagefright/foundation/ABitReader.h> #include <media/stagefright/foundation/ABuffer.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/AMessage.h> Loading Loading @@ -1302,7 +1304,7 @@ static inline size_t MIN(size_t a, size_t b) { } status_t WifiDisplaySource::PlaybackSession::packetizeAccessUnit( size_t trackIndex, const sp<ABuffer> &accessUnit) { size_t trackIndex, sp<ABuffer> accessUnit) { const sp<Track> &track = mTracks.valueFor(trackIndex); uint32_t flags = 0; Loading @@ -1318,15 +1320,14 @@ status_t WifiDisplaySource::PlaybackSession::packetizeAccessUnit( hexdump(accessUnit->data(), MIN(64, accessUnit->size())); #endif if (mTempAccessUnit == NULL || mTempAccessUnit->capacity() < accessUnit->size()) { mTempAccessUnit = new ABuffer(accessUnit->size()); if (IsIDR(accessUnit)) { // XXX remove this once the encoder takes care of this. accessUnit = mPacketizer->prependCSD( track->packetizerTrackIndex(), accessUnit); } memcpy(mTempAccessUnit->data(), accessUnit->data(), accessUnit->size()); status_t err = mHDCP->encrypt( mTempAccessUnit->data(), mTempAccessUnit->size(), accessUnit->data(), accessUnit->size(), trackIndex /* streamCTR */, &inputCTR, accessUnit->data()); Loading @@ -1341,6 +1342,7 @@ status_t WifiDisplaySource::PlaybackSession::packetizeAccessUnit( ALOGI("out:"); hexdump(accessUnit->data(), MIN(64, accessUnit->size())); ALOGI("inputCTR: 0x%016llx", inputCTR); ALOGI("streamCTR: 0x%08x", trackIndex); #endif } Loading Loading @@ -1384,6 +1386,31 @@ status_t WifiDisplaySource::PlaybackSession::packetizeAccessUnit( HDCP_private_data[15] = ((inputCTR & 0x7f) << 1) | 1; #if 0 ALOGI("HDCP_private_data:"); hexdump(HDCP_private_data, sizeof(HDCP_private_data)); ABitReader br(HDCP_private_data, sizeof(HDCP_private_data)); CHECK_EQ(br.getBits(13), 0); CHECK_EQ(br.getBits(2), (trackIndex >> 30) & 3); CHECK_EQ(br.getBits(1), 1u); CHECK_EQ(br.getBits(15), (trackIndex >> 15) & 0x7fff); CHECK_EQ(br.getBits(1), 1u); CHECK_EQ(br.getBits(15), trackIndex & 0x7fff); CHECK_EQ(br.getBits(1), 1u); CHECK_EQ(br.getBits(11), 0); CHECK_EQ(br.getBits(4), (inputCTR >> 60) & 0xf); CHECK_EQ(br.getBits(1), 1u); CHECK_EQ(br.getBits(15), (inputCTR >> 45) & 0x7fff); CHECK_EQ(br.getBits(1), 1u); CHECK_EQ(br.getBits(15), (inputCTR >> 30) & 0x7fff); CHECK_EQ(br.getBits(1), 1u); CHECK_EQ(br.getBits(15), (inputCTR >> 15) & 0x7fff); CHECK_EQ(br.getBits(1), 1u); CHECK_EQ(br.getBits(15), inputCTR & 0x7fff); CHECK_EQ(br.getBits(1), 1u); #endif flags |= TSPacketizer::IS_ENCRYPTED; } Loading
media/libstagefright/wifi-display/source/PlaybackSession.h +1 −3 Original line number Diff line number Diff line Loading @@ -164,8 +164,6 @@ private: uint64_t mTotalBytesSent; sp<ABuffer> mTempAccessUnit; #if LOG_TRANSPORT_STREAM FILE *mLogFile; #endif Loading Loading @@ -203,7 +201,7 @@ private: bool allTracksHavePacketizerIndex(); status_t packetizeAccessUnit( size_t trackIndex, const sp<ABuffer> &accessUnit); size_t trackIndex, sp<ABuffer> accessUnit); status_t packetizeQueuedAccessUnits(); Loading
media/libstagefright/wifi-display/source/TSPacketizer.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -702,5 +702,22 @@ uint32_t TSPacketizer::crc32(const uint8_t *start, size_t size) const { return crc; } sp<ABuffer> TSPacketizer::prependCSD( size_t trackIndex, const sp<ABuffer> &accessUnit) const { CHECK_LT(trackIndex, mTracks.size()); const sp<Track> &track = mTracks.itemAt(trackIndex); CHECK(track->isH264() && IsIDR(accessUnit)); int64_t timeUs; CHECK(accessUnit->meta()->findInt64("timeUs", &timeUs)); sp<ABuffer> accessUnit2 = track->prependCSD(accessUnit); accessUnit2->meta()->setInt64("timeUs", timeUs); return accessUnit2; } } // namespace android
media/libstagefright/wifi-display/source/TSPacketizer.h +5 −0 Original line number Diff line number Diff line Loading @@ -48,6 +48,11 @@ struct TSPacketizer : public RefBase { uint32_t flags, const uint8_t *PES_private_data, size_t PES_private_data_len); // XXX to be removed once encoder config option takes care of this for // encrypted mode. sp<ABuffer> prependCSD( size_t trackIndex, const sp<ABuffer> &accessUnit) const; protected: virtual ~TSPacketizer(); Loading