tsdemux: Add more AC3 detection cases

ATSC ac3 streams are always guaranteed to be AC3 if EAC3 descriptor
is not present
If stream registration id is 'AC-3' then it's also guaranteed to be AC3.
Finally if AC3 descriptor is present it's guaranteed to be AC3.

Only silences a warning, but still.
This commit is contained in:
Edward Hervey 2013-07-29 08:23:30 +02:00
parent a76c658e8d
commit edd69b2989
2 changed files with 19 additions and 6 deletions

View file

@ -226,5 +226,8 @@
#define DRF_ID_DTS3 0x44545333
#define DRF_ID_S302M 0x42535344
#define DRF_ID_TSHV 0x54534856
#define DRF_ID_AC3 0x41432d33
#define DRF_ID_GA94 0x47413934
#define DRF_ID_CUEI 0x43554549
#endif /* __GST_MPEG_DESC_H__ */

View file

@ -946,12 +946,22 @@ create_pad_for_stream (MpegTSBase * base, MpegTSBaseStream * bstream,
break;
}
/* DVB_AC3 */
desc = mpegts_get_descriptor_from_stream (bstream, GST_MTS_DESC_DVB_AC3);
if (!desc)
GST_WARNING ("AC3 stream type found but no corresponding "
"descriptor to differentiate between AC3 and EAC3. "
"Assuming plain AC3.");
/* If stream has ac3 descriptor
* OR program is ATSC (GA94)
* OR stream registration is AC-3
* then it's regular AC3 */
if (bstream->registration_id == DRF_ID_AC3 ||
program->registration_id == DRF_ID_GA94 ||
mpegts_get_descriptor_from_stream (bstream, GST_MTS_DESC_DVB_AC3)) {
template = gst_static_pad_template_get (&audio_template);
name = g_strdup_printf ("audio_%04x", bstream->pid);
caps = gst_caps_new_empty_simple ("audio/x-ac3");
break;
}
GST_WARNING ("AC3 stream type found but no guaranteed "
"way found to differentiate between AC3 and EAC3. "
"Assuming plain AC3.");
template = gst_static_pad_template_get (&audio_template);
name = g_strdup_printf ("audio_%04x", bstream->pid);
caps = gst_caps_new_empty_simple ("audio/x-ac3");