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