Merge "Take advantage of the hardware encoder's ability to prepend SPS/PPS" into jb-mr1-dev
diff --git a/media/libstagefright/wifi-display/source/Converter.cpp b/media/libstagefright/wifi-display/source/Converter.cpp
index 60cca69..f04010b 100644
--- a/media/libstagefright/wifi-display/source/Converter.cpp
+++ b/media/libstagefright/wifi-display/source/Converter.cpp
@@ -134,7 +134,7 @@
         mOutputFormat->setInt32("bitrate", videoBitrate);
         mOutputFormat->setInt32("frame-rate", 60);
         mOutputFormat->setInt32("i-frame-interval", 1);  // Iframes every 1 secs
-        // mOutputFormat->setInt32("prepend-sps-pps-to-idr-frames", 1);
+        mOutputFormat->setInt32("prepend-sps-pps-to-idr-frames", 1);
     }
 
     ALOGV("output format is '%s'", mOutputFormat->debugString(0).c_str());
diff --git a/media/libstagefright/wifi-display/source/PlaybackSession.cpp b/media/libstagefright/wifi-display/source/PlaybackSession.cpp
index 7de607c..fc5945b 100644
--- a/media/libstagefright/wifi-display/source/PlaybackSession.cpp
+++ b/media/libstagefright/wifi-display/source/PlaybackSession.cpp
@@ -1321,7 +1321,7 @@
 }
 
 status_t WifiDisplaySource::PlaybackSession::packetizeAccessUnit(
-        size_t trackIndex, sp<ABuffer> accessUnit) {
+        size_t trackIndex, const sp<ABuffer> &accessUnit) {
     const sp<Track> &track = mTracks.valueFor(trackIndex);
 
     uint32_t flags = 0;
@@ -1332,12 +1332,6 @@
     if (mHDCP != NULL && !track->isAudio()) {
         isHDCPEncrypted = true;
 
-        if (IsIDR(accessUnit)) {
-            // XXX remove this once the encoder takes care of this.
-            accessUnit = mPacketizer->prependCSD(
-                    track->packetizerTrackIndex(), accessUnit);
-        }
-
         status_t err = mHDCP->encrypt(
                 accessUnit->data(), accessUnit->size(),
                 trackIndex  /* streamCTR */,
diff --git a/media/libstagefright/wifi-display/source/PlaybackSession.h b/media/libstagefright/wifi-display/source/PlaybackSession.h
index 8d88648..7da8440 100644
--- a/media/libstagefright/wifi-display/source/PlaybackSession.h
+++ b/media/libstagefright/wifi-display/source/PlaybackSession.h
@@ -206,7 +206,7 @@
     bool allTracksHavePacketizerIndex();
 
     status_t packetizeAccessUnit(
-            size_t trackIndex, sp<ABuffer> accessUnit);
+            size_t trackIndex, const sp<ABuffer> &accessUnit);
 
     status_t packetizeQueuedAccessUnits();
 
diff --git a/media/libstagefright/wifi-display/source/TSPacketizer.cpp b/media/libstagefright/wifi-display/source/TSPacketizer.cpp
index dd18998..e5abd57 100644
--- a/media/libstagefright/wifi-display/source/TSPacketizer.cpp
+++ b/media/libstagefright/wifi-display/source/TSPacketizer.cpp
@@ -294,12 +294,11 @@
 
     const sp<Track> &track = mTracks.itemAt(trackIndex);
 
-    if (track->isH264() && !(flags & IS_ENCRYPTED)) {
-        if (IsIDR(accessUnit)) {
-            // prepend codec specific data, i.e. SPS and PPS.
-            accessUnit = track->prependCSD(accessUnit);
-        }
-    } else if (track->lacksADTSHeader()) {
+    if (track->isH264() && (flags & PREPEND_SPS_PPS_TO_IDR_FRAMES)
+            && IsIDR(accessUnit)) {
+        // prepend codec specific data, i.e. SPS and PPS.
+        accessUnit = track->prependCSD(accessUnit);
+    } else if (track->isAudio() && track->lacksADTSHeader()) {
         CHECK(!(flags & IS_ENCRYPTED));
         accessUnit = track->prependADTSHeader(accessUnit);
     }
diff --git a/media/libstagefright/wifi-display/source/TSPacketizer.h b/media/libstagefright/wifi-display/source/TSPacketizer.h
index 01f174a..0733c06 100644
--- a/media/libstagefright/wifi-display/source/TSPacketizer.h
+++ b/media/libstagefright/wifi-display/source/TSPacketizer.h
@@ -38,9 +38,10 @@
     ssize_t addTrack(const sp<AMessage> &format);
 
     enum {
-        EMIT_PAT_AND_PMT = 1,
-        EMIT_PCR         = 2,
-        IS_ENCRYPTED     = 4,
+        EMIT_PAT_AND_PMT                = 1,
+        EMIT_PCR                        = 2,
+        IS_ENCRYPTED                    = 4,
+        PREPEND_SPS_PPS_TO_IDR_FRAMES   = 8,
     };
     status_t packetize(
             size_t trackIndex, const sp<ABuffer> &accessUnit,