mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-07 07:58:51 +00:00
tsdemux: Support more DTS/AC3 descriptors
This commit is contained in:
parent
6ef0ae4ffe
commit
67fd590e9a
2 changed files with 58 additions and 15 deletions
|
@ -140,6 +140,7 @@
|
||||||
#define DESC_DVB_EXTENSION 0x7F
|
#define DESC_DVB_EXTENSION 0x7F
|
||||||
/* 0x80 - 0xFE are user defined */
|
/* 0x80 - 0xFE are user defined */
|
||||||
#define DESC_DTG_LOGICAL_CHANNEL 0x83 /* from DTG D-Book */
|
#define DESC_DTG_LOGICAL_CHANNEL 0x83 /* from DTG D-Book */
|
||||||
|
#define DESC_AC3_AUDIO_STREAM 0x81
|
||||||
/* 0xFF is forbidden */
|
/* 0xFF is forbidden */
|
||||||
|
|
||||||
/* common for all descriptors */
|
/* common for all descriptors */
|
||||||
|
@ -315,14 +316,21 @@
|
||||||
/* DVB Carousel Identifier Descriptor */
|
/* DVB Carousel Identifier Descriptor */
|
||||||
#define DESC_DVB_CAROUSEL_IDENTIFIER_carousel_id(desc) (GST_READ_UINT32_BE((desc) + 2))
|
#define DESC_DVB_CAROUSEL_IDENTIFIER_carousel_id(desc) (GST_READ_UINT32_BE((desc) + 2))
|
||||||
|
|
||||||
|
/* AC3_audio_stream_descriptor */
|
||||||
|
#define DESC_AC_AUDIO_STREAM_bsid(desc) ((desc)[2] & 0x1f)
|
||||||
|
|
||||||
/* registration_descriptor format IDs */
|
/* registration_descriptor format IDs */
|
||||||
#define DRF_ID_HDMV 0x48444d56
|
#define DRF_ID_HDMV 0x48444d56
|
||||||
#define DRF_ID_VC1 0x56432D31 /* defined in RP227 */
|
#define DRF_ID_VC1 0x56432D31 /* defined in RP227 */
|
||||||
|
#define DRF_ID_DTS1 0x44545331
|
||||||
|
#define DRF_ID_DTS2 0x44545332
|
||||||
|
#define DRF_ID_DTS3 0x44545333
|
||||||
|
|
||||||
typedef struct {
|
typedef struct
|
||||||
guint n_desc;
|
{
|
||||||
guint8 data_length;
|
guint n_desc;
|
||||||
guint8 *data;
|
guint8 data_length;
|
||||||
|
guint8 *data;
|
||||||
} GstMPEGDescriptor;
|
} GstMPEGDescriptor;
|
||||||
|
|
||||||
void gst_mpegtsdesc_init_debug (void);
|
void gst_mpegtsdesc_init_debug (void);
|
||||||
|
|
|
@ -1020,8 +1020,7 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
|
||||||
break;
|
break;
|
||||||
case ST_PRIVATE_DATA:
|
case ST_PRIVATE_DATA:
|
||||||
GST_LOG ("private data");
|
GST_LOG ("private data");
|
||||||
desc =
|
desc = mpegts_get_descriptor_from_stream ((MpegTSBaseStream *) stream,
|
||||||
mpegts_get_descriptor_from_stream ((MpegTSBaseStream *) stream,
|
|
||||||
DESC_DVB_AC3);
|
DESC_DVB_AC3);
|
||||||
if (desc) {
|
if (desc) {
|
||||||
GST_LOG ("ac3 audio");
|
GST_LOG ("ac3 audio");
|
||||||
|
@ -1031,8 +1030,8 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
|
||||||
g_free (desc);
|
g_free (desc);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
desc =
|
|
||||||
mpegts_get_descriptor_from_stream ((MpegTSBaseStream *) stream,
|
desc = mpegts_get_descriptor_from_stream ((MpegTSBaseStream *) stream,
|
||||||
DESC_DVB_ENHANCED_AC3);
|
DESC_DVB_ENHANCED_AC3);
|
||||||
if (desc) {
|
if (desc) {
|
||||||
GST_LOG ("ac3 audio");
|
GST_LOG ("ac3 audio");
|
||||||
|
@ -1042,8 +1041,7 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
|
||||||
g_free (desc);
|
g_free (desc);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
desc =
|
desc = mpegts_get_descriptor_from_stream ((MpegTSBaseStream *) stream,
|
||||||
mpegts_get_descriptor_from_stream ((MpegTSBaseStream *) stream,
|
|
||||||
DESC_DVB_TELETEXT);
|
DESC_DVB_TELETEXT);
|
||||||
if (desc) {
|
if (desc) {
|
||||||
GST_LOG ("teletext");
|
GST_LOG ("teletext");
|
||||||
|
@ -1064,6 +1062,26 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
|
||||||
g_free (desc);
|
g_free (desc);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
desc = mpegts_get_descriptor_from_stream ((MpegTSBaseStream *) stream,
|
||||||
|
DESC_REGISTRATION);
|
||||||
|
if (desc) {
|
||||||
|
switch (DESC_REGISTRATION_format_identifier (desc)) {
|
||||||
|
case DRF_ID_DTS1:
|
||||||
|
case DRF_ID_DTS2:
|
||||||
|
case DRF_ID_DTS3:
|
||||||
|
/* SMPTE registered DTS */
|
||||||
|
GST_LOG ("subtitling");
|
||||||
|
template = gst_static_pad_template_get (&private_template);
|
||||||
|
name = g_strdup_printf ("private_%04x", bstream->pid);
|
||||||
|
caps = gst_caps_new_simple ("audio/x-dts", NULL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
g_free (desc);
|
||||||
|
}
|
||||||
|
if (template)
|
||||||
|
break;
|
||||||
|
|
||||||
/* hack for itv hd (sid 10510, video pid 3401 */
|
/* hack for itv hd (sid 10510, video pid 3401 */
|
||||||
if (program->program_number == 10510 && bstream->pid == 3401) {
|
if (program->program_number == 10510 && bstream->pid == 3401) {
|
||||||
template = gst_static_pad_template_get (&video_template);
|
template = gst_static_pad_template_get (&video_template);
|
||||||
|
@ -1167,18 +1185,35 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
|
||||||
desc = mpegts_get_descriptor_from_program (program, DESC_REGISTRATION);
|
desc = mpegts_get_descriptor_from_program (program, DESC_REGISTRATION);
|
||||||
if (desc) {
|
if (desc) {
|
||||||
if (DESC_REGISTRATION_format_identifier (desc) == DRF_ID_HDMV) {
|
if (DESC_REGISTRATION_format_identifier (desc) == DRF_ID_HDMV) {
|
||||||
template = gst_static_pad_template_get (&audio_template);
|
guint8 *ac3_desc;
|
||||||
name = g_strdup_printf ("audio_%04x", bstream->pid);
|
|
||||||
caps = gst_caps_new_simple ("audio/x-eac3", NULL);
|
/* ATSC ac3 audio descriptor */
|
||||||
|
ac3_desc =
|
||||||
|
mpegts_get_descriptor_from_stream ((MpegTSBaseStream *) stream,
|
||||||
|
DESC_AC3_AUDIO_STREAM);
|
||||||
|
if (ac3_desc && DESC_AC_AUDIO_STREAM_bsid (ac3_desc) != 16) {
|
||||||
|
GST_LOG ("ac3 audio");
|
||||||
|
template = gst_static_pad_template_get (&audio_template);
|
||||||
|
name = g_strdup_printf ("audio_%04x", bstream->pid);
|
||||||
|
caps = gst_caps_new_simple ("audio/x-ac3", NULL);
|
||||||
|
|
||||||
|
g_free (ac3_desc);
|
||||||
|
} else {
|
||||||
|
template = gst_static_pad_template_get (&audio_template);
|
||||||
|
name = g_strdup_printf ("audio_%04x", bstream->pid);
|
||||||
|
caps = gst_caps_new_simple ("audio/x-eac3", NULL);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free (desc);
|
g_free (desc);
|
||||||
}
|
}
|
||||||
if (template)
|
if (template)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
/* DVB_ENHANCED_AC3 */
|
/* DVB_ENHANCED_AC3 */
|
||||||
desc =
|
desc = mpegts_get_descriptor_from_stream ((MpegTSBaseStream *) stream,
|
||||||
mpegts_get_descriptor_from_stream ((MpegTSBaseStream *) stream,
|
|
||||||
DESC_DVB_ENHANCED_AC3);
|
DESC_DVB_ENHANCED_AC3);
|
||||||
if (desc) {
|
if (desc) {
|
||||||
template = gst_static_pad_template_get (&audio_template);
|
template = gst_static_pad_template_get (&audio_template);
|
||||||
|
|
Loading…
Reference in a new issue