amltsdmx: CF1 complete hdcp feature [1/1]

PD#SWPL-180069

Problem:
miss some hdcp code

Solution:
sync patch 0033-tsdemu for hdcp

Verify:
ap222

Change-Id: I00b10097678c671bf48886dc89d3498f9bacc450
Signed-off-by: bo.xiao <bo.xiao@amlogic.com>
diff --git a/aml-tsdemux/amltsdemux.c b/aml-tsdemux/amltsdemux.c
index ecec618..b8fbb94 100644
--- a/aml-tsdemux/amltsdemux.c
+++ b/aml-tsdemux/amltsdemux.c
@@ -1173,6 +1173,8 @@
       }
     }
 
+    /* Create a new section to travel through the pipeline, with splice
+     * times translated from local time to running time */
     if (forward) {
       GstEvent *event;
       GstStructure *s;
@@ -1832,7 +1834,7 @@
           "mpegversion", G_TYPE_INT, 2,
           "stream-format", G_TYPE_STRING, "adts", NULL);
       }
-
+      /* we will set caps later once parsing adts header is done */
       stream->atdsInfos.mpegversion = 4;
       break;
     case GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_ADTS_AES_128_CBC:
@@ -2131,7 +2133,14 @@
       break;
     case ST_PS_AUDIO_LPCM:
       is_audio = TRUE;
-      caps = gst_caps_new_empty_simple ("audio/x-lpcm");
+      if (program->registration_id == DRF_ID_HDCP) {
+        stream->hdcp_content_flag = TRUE;
+        stream->is_video = FALSE;
+        caps = gst_caps_new_simple("application/x-hdcp-audio",
+          "original-media-type", G_TYPE_STRING, "audio/x-lpcm",  NULL);
+      } else {
+        caps = gst_caps_new_empty_simple ("audio/x-lpcm");
+      }
       break;
     case ST_PS_DVD_SUBPICTURE:
       is_subpicture = TRUE;
@@ -3719,6 +3728,22 @@
       buffer = gst_buffer_new_wrapped (stream->data, stream->current_size);
     }
 
+    if (TRUE == stream->hdcp_content_flag) {
+      guchar* iv = g_malloc(16);
+      memcpy(iv, stream->hdcp_contents, 16);
+      iv_buffer = gst_buffer_new_wrapped(iv, 16);
+      GstStructure * drm_info_struct = gst_structure_new("drm_info",
+          "secure", G_TYPE_BOOLEAN, stream->hdcp_have_iv,
+          "isvideo", G_TYPE_BOOLEAN, stream->is_video,
+          "iv", GST_TYPE_BUFFER, iv_buffer,
+          NULL);
+      if (drm_info_struct) {
+        GST_DEBUG("attaching secure IV to output buffer");
+        gst_buffer_add_protection_meta(buffer, drm_info_struct);
+      }
+      gst_buffer_unref(iv_buffer);
+    }
+
     if (G_UNLIKELY (stream->pending_ts && !aml_check_pending_buffers (demux))) {
       if (buffer) {
         AmlPendingBuffer *pend;
@@ -3823,21 +3848,6 @@
       base->out_segment.position = stream->pts;
   }
 
-  if (TRUE == stream->hdcp_content_flag) {
-    guchar* iv = g_malloc(16);
-    memcpy(iv, stream->hdcp_contents, 16);
-    iv_buffer = gst_buffer_new_wrapped(iv, 16);
-    GstStructure * drm_info_struct = gst_structure_new ("drm_info",
-      "secure", G_TYPE_BOOLEAN, stream->hdcp_have_iv,
-      "iv", GST_TYPE_BUFFER, iv_buffer,
-      NULL);
-    if (drm_info_struct) {
-    /*GST_DEBUG("attaching secure IV to output buffer");*/
-      gst_buffer_add_protection_meta(buffer, drm_info_struct);
-    }
-    gst_buffer_unref(iv_buffer);
-  }
-
   if (buffer) {
     if (stream->protection_info) {
       if (bs->stream_type == GST_MPEGTS_STREAM_TYPE_VIDEO_H264_AES_128_CBC