changeset 4982:dc217282e78b libavformat

factorize
author bcoudurier
date Sun, 31 May 2009 03:40:36 +0000
parents 5b710f5c8a53
children 4b6537814493
files mpegts.c
diffstat 1 files changed, 12 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/mpegts.c	Sun May 31 03:35:29 2009 +0000
+++ b/mpegts.c	Sun May 31 03:40:36 2009 +0000
@@ -521,6 +521,14 @@
     { 0 },
 };
 
+/* descriptor present */
+static const StreamType DESC_types[] = {
+    { 0x6a, CODEC_TYPE_AUDIO,             CODEC_ID_AC3 }, /* AC-3 descriptor */
+    { 0x7a, CODEC_TYPE_AUDIO,             CODEC_ID_AC3 },
+    { 0x7b, CODEC_TYPE_AUDIO,             CODEC_ID_DTS },
+    { 0x59, CODEC_TYPE_SUBTITLE, CODEC_ID_DVB_SUBTITLE }, /* subtitling descriptor */
+};
+
 static void mpegts_find_stream_type(AVStream *st,
                                     uint32_t stream_type, const StreamType *types)
 {
@@ -665,21 +673,12 @@
             dprintf(ts->stream, "tag: 0x%02x len=%d\n",
                    desc_tag, desc_len);
 
+            if (st->codec->codec_id == CODEC_ID_PROBE &&
+                stream_type == STREAM_TYPE_PRIVATE_DATA)
+                mpegts_find_stream_type(st, desc_tag, DESC_types);
+
             switch(desc_tag) {
-            case 0x6a: /* AC-3 descriptor */
-            case 0x7a: /* AC-3 descriptor */
-                st->codec->codec_type = CODEC_TYPE_AUDIO;
-                st->codec->codec_id   = CODEC_ID_AC3;
-                break;
-            case 0x7b:
-                st->codec->codec_type = CODEC_TYPE_AUDIO;
-                st->codec->codec_id   = CODEC_ID_DTS;
-                break;
             case 0x59: /* subtitling descriptor */
-                if (stream_type == STREAM_TYPE_PRIVATE_DATA) {
-                    st->codec->codec_type = CODEC_TYPE_SUBTITLE;
-                    st->codec->codec_id   = CODEC_ID_DVB_SUBTITLE;
-                }
                 language[0] = get8(&p, desc_end);
                 language[1] = get8(&p, desc_end);
                 language[2] = get8(&p, desc_end);