Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Peter Ross authored on 2011/04/05 19:36:55... | ... |
@@ -320,6 +320,13 @@ const AVCodecTag ff_codec_wav_tags[] = { |
320 | 320 |
{ CODEC_ID_NONE, 0 }, |
321 | 321 |
}; |
322 | 322 |
|
323 |
+const AVCodecGuid ff_codec_wav_guids[] = { |
|
324 |
+ {CODEC_ID_AC3, {0x2C,0x80,0x6D,0xE0,0x46,0xDB,0xCF,0x11,0xB4,0xD1,0x00,0x80,0x5F,0x6C,0xBB,0xEA}}, |
|
325 |
+ {CODEC_ID_EAC3, {0xAF,0x87,0xFB,0xA7,0x02,0x2D,0xFB,0x42,0xA4,0xD4,0x05,0xCD,0x93,0x84,0x3B,0xDD}}, |
|
326 |
+ {CODEC_ID_MP2, {0x2B,0x80,0x6D,0xE0,0x46,0xDB,0xCF,0x11,0xB4,0xD1,0x00,0x80,0x5F,0x6C,0xBB,0xEA}}, |
|
327 |
+ {CODEC_ID_NONE} |
|
328 |
+}; |
|
329 |
+ |
|
323 | 330 |
#if CONFIG_MUXERS |
324 | 331 |
int64_t ff_start_tag(AVIOContext *pb, const char *tag) |
325 | 332 |
{ |
... | ... |
@@ -590,3 +597,13 @@ void ff_get_guid(AVIOContext *s, ff_asf_guid *g) |
590 | 590 |
assert(sizeof(*g) == 16); |
591 | 591 |
avio_read(s, *g, sizeof(*g)); |
592 | 592 |
} |
593 |
+ |
|
594 |
+enum CodecID ff_codec_guid_get_id(const AVCodecGuid *guids, ff_asf_guid guid) |
|
595 |
+{ |
|
596 |
+ int i; |
|
597 |
+ for (i = 0; guids[i].id != CODEC_ID_NONE; i++) { |
|
598 |
+ if (!ff_guidcmp(guids[i].guid, guid)) |
|
599 |
+ return guids[i].id; |
|
600 |
+ } |
|
601 |
+ return CODEC_ID_NONE; |
|
602 |
+} |
... | ... |
@@ -56,6 +56,11 @@ void ff_parse_specific_params(AVCodecContext *stream, int *au_rate, int *au_ssiz |
56 | 56 |
|
57 | 57 |
typedef uint8_t ff_asf_guid[16]; |
58 | 58 |
|
59 |
+#define FF_PRI_GUID \ |
|
60 |
+ "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x" |
|
61 |
+#define FF_ARG_GUID(g) \ |
|
62 |
+ g[0],g[1],g[2],g[3],g[4],g[5],g[6],g[7],g[8],g[9],g[10],g[11],g[12],g[13],g[14],g[15] |
|
63 |
+ |
|
59 | 64 |
static av_always_inline int ff_guidcmp(const void *g1, const void *g2) |
60 | 65 |
{ |
61 | 66 |
return memcmp(g1, g2, sizeof(ff_asf_guid)); |
... | ... |
@@ -63,4 +68,16 @@ static av_always_inline int ff_guidcmp(const void *g1, const void *g2) |
63 | 63 |
|
64 | 64 |
void ff_get_guid(AVIOContext *s, ff_asf_guid *g); |
65 | 65 |
|
66 |
+typedef struct { |
|
67 |
+ enum CodecID id; |
|
68 |
+ ff_asf_guid guid; |
|
69 |
+} AVCodecGuid; |
|
70 |
+ |
|
71 |
+enum CodecID ff_codec_guid_get_id(const AVCodecGuid *guids, ff_asf_guid guid); |
|
72 |
+ |
|
73 |
+extern const AVCodecGuid ff_codec_wav_guids[]; |
|
74 |
+ |
|
75 |
+#define FF_MEDIASUBTYPE_BASE_GUID \ |
|
76 |
+ 0x00,0x00,0x10,0x00,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71 |
|
77 |
+ |
|
66 | 78 |
#endif /* AVFORMAT_RIFF_H */ |
... | ... |
@@ -35,11 +35,6 @@ |
35 | 35 |
#include <strings.h> |
36 | 36 |
|
37 | 37 |
/* Macros for formating GUIDs */ |
38 |
-#define PRI_GUID \ |
|
39 |
- "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x" |
|
40 |
-#define ARG_GUID(g) \ |
|
41 |
- g[0],g[1],g[2],g[3],g[4],g[5],g[6],g[7],g[8],g[9],g[10],g[11],g[12],g[13],g[14],g[15] |
|
42 |
- |
|
43 | 38 |
#define PRI_PRETTY_GUID \ |
44 | 39 |
"%08x-%04x-%04x-%02x%02x%02x%02x%02x%02x%02x%02x" |
45 | 40 |
#define ARG_PRETTY_GUID(g) \ |
... | ... |
@@ -266,8 +261,8 @@ static AVIOContext * wtvfile_open2(AVFormatContext *s, const uint8_t *buf, int b |
266 | 266 |
uint64_t file_length; |
267 | 267 |
const uint8_t *name; |
268 | 268 |
if (ff_guidcmp(buf, dir_entry_guid)) { |
269 |
- av_log(s, AV_LOG_ERROR, "unknown guid "PRI_GUID", expected dir_entry_guid; " |
|
270 |
- "remaining directory entries ignored\n", ARG_GUID(buf)); |
|
269 |
+ av_log(s, AV_LOG_ERROR, "unknown guid "FF_PRI_GUID", expected dir_entry_guid; " |
|
270 |
+ "remaining directory entries ignored\n", FF_ARG_GUID(buf)); |
|
271 | 271 |
break; |
272 | 272 |
} |
273 | 273 |
dir_length = AV_RL16(buf + 16); |
... | ... |
@@ -328,21 +323,6 @@ typedef struct { |
328 | 328 |
unsigned int index_entries_allocated_size; |
329 | 329 |
} WtvContext; |
330 | 330 |
|
331 |
-typedef struct { |
|
332 |
- enum CodecID id; |
|
333 |
- ff_asf_guid guid; |
|
334 |
-} AVCodecGuid; |
|
335 |
- |
|
336 |
-static enum CodecID ff_codec_guid_get_id(const AVCodecGuid *guids, ff_asf_guid guid) |
|
337 |
-{ |
|
338 |
- int i; |
|
339 |
- for (i = 0; guids[i].id != CODEC_ID_NONE; i++) { |
|
340 |
- if (!ff_guidcmp(guids[i].guid, guid)) |
|
341 |
- return guids[i].id; |
|
342 |
- } |
|
343 |
- return CODEC_ID_NONE; |
|
344 |
-} |
|
345 |
- |
|
346 | 331 |
/* WTV GUIDs */ |
347 | 332 |
static const ff_asf_guid wtv_guid = |
348 | 333 |
{0xB7,0xD8,0x00,0x20,0x37,0x49,0xDA,0x11,0xA6,0x4E,0x00,0x07,0xE9,0x5E,0xAD,0x8D}; |
... | ... |
@@ -377,14 +357,11 @@ static const ff_asf_guid EVENTID_AudioTypeSpanningEvent = |
377 | 377 |
|
378 | 378 |
/* Windows media GUIDs */ |
379 | 379 |
|
380 |
-#define MEDIASUBTYPE_BASE_GUID \ |
|
381 |
- 0x00,0x00,0x10,0x00,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71 |
|
382 |
- |
|
383 | 380 |
/* Media types */ |
384 | 381 |
static const ff_asf_guid mediatype_audio = |
385 |
- {'a','u','d','s',MEDIASUBTYPE_BASE_GUID}; |
|
382 |
+ {'a','u','d','s',FF_MEDIASUBTYPE_BASE_GUID}; |
|
386 | 383 |
static const ff_asf_guid mediatype_video = |
387 |
- {'v','i','d','s',MEDIASUBTYPE_BASE_GUID}; |
|
384 |
+ {'v','i','d','s',FF_MEDIASUBTYPE_BASE_GUID}; |
|
388 | 385 |
static const ff_asf_guid mediasubtype_mpeg1payload = |
389 | 386 |
{0x81,0xEB,0x36,0xE4,0x4F,0x52,0xCE,0x11,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70}; |
390 | 387 |
static const ff_asf_guid mediatype_mpeg2_sections = |
... | ... |
@@ -423,13 +400,6 @@ static const AVCodecGuid video_guids[] = { |
423 | 423 |
{CODEC_ID_NONE} |
424 | 424 |
}; |
425 | 425 |
|
426 |
-static const AVCodecGuid audio_guids[] = { |
|
427 |
- {CODEC_ID_AC3, {0x2C,0x80,0x6D,0xE0,0x46,0xDB,0xCF,0x11,0xB4,0xD1,0x00,0x80,0x5F,0x6C,0xBB,0xEA}}, |
|
428 |
- {CODEC_ID_EAC3, {0xAF,0x87,0xFB,0xA7,0x02,0x2D,0xFB,0x42,0xA4,0xD4,0x05,0xCD,0x93,0x84,0x3B,0xDD}}, |
|
429 |
- {CODEC_ID_MP2, {0x2B,0x80,0x6D,0xE0,0x46,0xDB,0xCF,0x11,0xB4,0xD1,0x00,0x80,0x5F,0x6C,0xBB,0xEA}}, |
|
430 |
- {CODEC_ID_NONE} |
|
431 |
-}; |
|
432 |
- |
|
433 | 426 |
static int read_probe(AVProbeData *p) |
434 | 427 |
{ |
435 | 428 |
return ff_guidcmp(p->buf, wtv_guid) ? 0 : AVPROBE_SCORE_MAX; |
... | ... |
@@ -562,8 +532,8 @@ static void parse_legacy_attrib(AVFormatContext *s, AVIOContext *pb) |
562 | 562 |
if (!length) |
563 | 563 |
break; |
564 | 564 |
if (ff_guidcmp(&guid, metadata_guid)) { |
565 |
- av_log(s, AV_LOG_WARNING, "unknown guid "PRI_GUID", expected metadata_guid; " |
|
566 |
- "remaining metadata entries ignored\n", ARG_GUID(guid)); |
|
565 |
+ av_log(s, AV_LOG_WARNING, "unknown guid "FF_PRI_GUID", expected metadata_guid; " |
|
566 |
+ "remaining metadata entries ignored\n", FF_ARG_GUID(guid)); |
|
567 | 567 |
break; |
568 | 568 |
} |
569 | 569 |
avio_get_str16le(pb, INT_MAX, key, sizeof(key)); |
... | ... |
@@ -678,11 +648,11 @@ static AVStream * parse_media_type(AVFormatContext *s, AVStream *st, int sid, |
678 | 678 |
ff_get_wav_header(pb, st->codec, size); |
679 | 679 |
} else { |
680 | 680 |
if (ff_guidcmp(formattype, format_none)) |
681 |
- av_log(s, AV_LOG_WARNING, "unknown formattype:"PRI_GUID"\n", ARG_GUID(formattype)); |
|
681 |
+ av_log(s, AV_LOG_WARNING, "unknown formattype:"FF_PRI_GUID"\n", FF_ARG_GUID(formattype)); |
|
682 | 682 |
avio_skip(pb, size); |
683 | 683 |
} |
684 | 684 |
|
685 |
- if (!memcmp(subtype + 4, (const uint8_t[]){MEDIASUBTYPE_BASE_GUID}, 12)) { |
|
685 |
+ if (!memcmp(subtype + 4, (const uint8_t[]){FF_MEDIASUBTYPE_BASE_GUID}, 12)) { |
|
686 | 686 |
st->codec->codec_id = ff_wav_codec_get_id(AV_RL32(subtype), st->codec->bits_per_coded_sample); |
687 | 687 |
} else if (!ff_guidcmp(subtype, mediasubtype_mpeg1payload)) { |
688 | 688 |
if (st->codec->extradata && st->codec->extradata_size >= 22) |
... | ... |
@@ -690,9 +660,9 @@ static AVStream * parse_media_type(AVFormatContext *s, AVStream *st, int sid, |
690 | 690 |
else |
691 | 691 |
av_log(s, AV_LOG_WARNING, "MPEG1WAVEFORMATEX underflow\n"); |
692 | 692 |
} else { |
693 |
- st->codec->codec_id = ff_codec_guid_get_id(audio_guids, subtype); |
|
693 |
+ st->codec->codec_id = ff_codec_guid_get_id(ff_codec_wav_guids, subtype); |
|
694 | 694 |
if (st->codec->codec_id == CODEC_ID_NONE) |
695 |
- av_log(s, AV_LOG_WARNING, "unknown subtype:"PRI_GUID"\n", ARG_GUID(subtype)); |
|
695 |
+ av_log(s, AV_LOG_WARNING, "unknown subtype:"FF_PRI_GUID"\n", FF_ARG_GUID(subtype)); |
|
696 | 696 |
} |
697 | 697 |
return st; |
698 | 698 |
} else if (!ff_guidcmp(mediatype, mediatype_video)) { |
... | ... |
@@ -707,17 +677,17 @@ static AVStream * parse_media_type(AVFormatContext *s, AVStream *st, int sid, |
707 | 707 |
avio_skip(pb, FFMAX(size - consumed, 0)); |
708 | 708 |
} else { |
709 | 709 |
if (ff_guidcmp(formattype, format_none)) |
710 |
- av_log(s, AV_LOG_WARNING, "unknown formattype:"PRI_GUID"\n", ARG_GUID(formattype)); |
|
710 |
+ av_log(s, AV_LOG_WARNING, "unknown formattype:"FF_PRI_GUID"\n", FF_ARG_GUID(formattype)); |
|
711 | 711 |
avio_skip(pb, size); |
712 | 712 |
} |
713 | 713 |
|
714 |
- if (!memcmp(subtype + 4, (const uint8_t[]){MEDIASUBTYPE_BASE_GUID}, 12)) { |
|
714 |
+ if (!memcmp(subtype + 4, (const uint8_t[]){FF_MEDIASUBTYPE_BASE_GUID}, 12)) { |
|
715 | 715 |
st->codec->codec_id = ff_codec_get_id(ff_codec_bmp_tags, AV_RL32(subtype)); |
716 | 716 |
} else { |
717 | 717 |
st->codec->codec_id = ff_codec_guid_get_id(video_guids, subtype); |
718 | 718 |
} |
719 | 719 |
if (st->codec->codec_id == CODEC_ID_NONE) |
720 |
- av_log(s, AV_LOG_WARNING, "unknown subtype:"PRI_GUID"\n", ARG_GUID(subtype)); |
|
720 |
+ av_log(s, AV_LOG_WARNING, "unknown subtype:"FF_PRI_GUID"\n", FF_ARG_GUID(subtype)); |
|
721 | 721 |
return st; |
722 | 722 |
} else if (!ff_guidcmp(mediatype, mediatype_mpeg2_pes) && |
723 | 723 |
!ff_guidcmp(subtype, mediasubtype_dvb_subtitle)) { |
... | ... |
@@ -725,7 +695,7 @@ static AVStream * parse_media_type(AVFormatContext *s, AVStream *st, int sid, |
725 | 725 |
if (!st) |
726 | 726 |
return NULL; |
727 | 727 |
if (ff_guidcmp(formattype, format_none)) |
728 |
- av_log(s, AV_LOG_WARNING, "unknown formattype:"PRI_GUID"\n", ARG_GUID(formattype)); |
|
728 |
+ av_log(s, AV_LOG_WARNING, "unknown formattype:"FF_PRI_GUID"\n", FF_ARG_GUID(formattype)); |
|
729 | 729 |
avio_skip(pb, size); |
730 | 730 |
st->codec->codec_id = CODEC_ID_DVB_SUBTITLE; |
731 | 731 |
return st; |
... | ... |
@@ -735,21 +705,21 @@ static AVStream * parse_media_type(AVFormatContext *s, AVStream *st, int sid, |
735 | 735 |
if (!st) |
736 | 736 |
return NULL; |
737 | 737 |
if (ff_guidcmp(formattype, format_none)) |
738 |
- av_log(s, AV_LOG_WARNING, "unknown formattype:"PRI_GUID"\n", ARG_GUID(formattype)); |
|
738 |
+ av_log(s, AV_LOG_WARNING, "unknown formattype:"FF_PRI_GUID"\n", FF_ARG_GUID(formattype)); |
|
739 | 739 |
avio_skip(pb, size); |
740 | 740 |
st->codec->codec_id = CODEC_ID_DVB_TELETEXT; |
741 | 741 |
return st; |
742 | 742 |
} else if (!ff_guidcmp(mediatype, mediatype_mpeg2_sections) && |
743 | 743 |
!ff_guidcmp(subtype, mediasubtype_mpeg2_sections)) { |
744 | 744 |
if (ff_guidcmp(formattype, format_none)) |
745 |
- av_log(s, AV_LOG_WARNING, "unknown formattype:"PRI_GUID"\n", ARG_GUID(formattype)); |
|
745 |
+ av_log(s, AV_LOG_WARNING, "unknown formattype:"FF_PRI_GUID"\n", FF_ARG_GUID(formattype)); |
|
746 | 746 |
avio_skip(pb, size); |
747 | 747 |
return NULL; |
748 | 748 |
} |
749 | 749 |
|
750 |
- av_log(s, AV_LOG_WARNING, "unknown media type, mediatype:"PRI_GUID |
|
751 |
- ", subtype:"PRI_GUID", formattype:"PRI_GUID"\n", |
|
752 |
- ARG_GUID(mediatype), ARG_GUID(subtype), ARG_GUID(formattype)); |
|
750 |
+ av_log(s, AV_LOG_WARNING, "unknown media type, mediatype:"FF_PRI_GUID |
|
751 |
+ ", subtype:"FF_PRI_GUID", formattype:"FF_PRI_GUID"\n", |
|
752 |
+ FF_ARG_GUID(mediatype), FF_ARG_GUID(subtype), FF_ARG_GUID(formattype)); |
|
753 | 753 |
avio_skip(pb, size); |
754 | 754 |
return NULL; |
755 | 755 |
} |
... | ... |
@@ -921,7 +891,7 @@ static int parse_chunks(AVFormatContext *s, int mode, int64_t seekts, int *len_p |
921 | 921 |
!ff_guidcmp(g, (const ff_asf_guid){0xA1,0xC3,0xD2,0xC2,0x7E,0x9A,0xDA,0x11,0x8B,0xF7,0x00,0x07,0xE9,0x5E,0xAD,0x8D})) { |
922 | 922 |
//ignore known guids |
923 | 923 |
} else |
924 |
- av_log(s, AV_LOG_WARNING, "unsupported chunk:"PRI_GUID"\n", ARG_GUID(g)); |
|
924 |
+ av_log(s, AV_LOG_WARNING, "unsupported chunk:"FF_PRI_GUID"\n", FF_ARG_GUID(g)); |
|
925 | 925 |
|
926 | 926 |
avio_skip(pb, WTV_PAD8(len) - consumed); |
927 | 927 |
} |