提交 88141c91 编写于 作者: M Michael Niedermayer

audio in dvr-ms demuxing support by (John Donaghy <johnfdonaghy gmail com<)

Originally committed as revision 4874 to svn://svn.ffmpeg.org/ffmpeg/trunk
上级 82863d1e
......@@ -60,6 +60,10 @@ static void print_guid(const GUID *g)
else PRINT_IF_GUID(g, head1_guid);
else PRINT_IF_GUID(g, head2_guid);
else PRINT_IF_GUID(g, my_guid);
else PRINT_IF_GUID(g, ext_stream_header);
else PRINT_IF_GUID(g, extended_content_header);
else PRINT_IF_GUID(g, ext_stream_embed_stream_header);
else PRINT_IF_GUID(g, ext_stream_audio_stream);
else
printf("(GUID: unknown) ");
printf("0x%08x, 0x%04x, 0x%04x, {", g->v1, g->v2, g->v3);
......@@ -186,6 +190,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
int type, total_size, type_specific_size, sizeX;
unsigned int tag1;
int64_t pos1, pos2;
int test_for_ext_stream_audio;
pos1 = url_ftell(pb);
......@@ -201,12 +206,17 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
st->duration = asf->hdr.send_time /
(10000000 / 1000) - st->start_time;
get_guid(pb, &g);
test_for_ext_stream_audio = 0;
if (!memcmp(&g, &audio_stream, sizeof(GUID))) {
type = CODEC_TYPE_AUDIO;
} else if (!memcmp(&g, &video_stream, sizeof(GUID))) {
type = CODEC_TYPE_VIDEO;
} else if (!memcmp(&g, &command_stream, sizeof(GUID))) {
type = CODEC_TYPE_UNKNOWN;
} else if (!memcmp(&g, &ext_stream_embed_stream_header, sizeof(GUID))) {
test_for_ext_stream_audio = 1;
type = CODEC_TYPE_UNKNOWN;
} else {
goto fail;
}
......@@ -219,6 +229,20 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
asf->asfid2avid[st->id] = s->nb_streams - 1;
get_le32(pb);
if (test_for_ext_stream_audio) {
get_guid(pb, &g);
if (!memcmp(&g, &ext_stream_audio_stream, sizeof(GUID))) {
type = CODEC_TYPE_AUDIO;
get_guid(pb, &g);
get_le32(pb);
get_le32(pb);
get_le32(pb);
get_guid(pb, &g);
get_le32(pb);
}
}
st->codec->codec_type = type;
if (type == CODEC_TYPE_AUDIO) {
get_wav_header(pb, st->codec, type_specific_size);
......@@ -259,7 +283,7 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
st->codec->frame_size = 1;
break;
}
} else {
} else if (type == CODEC_TYPE_VIDEO) {
get_le32(pb);
get_le32(pb);
get_byte(pb);
......@@ -349,12 +373,49 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
}
av_free(name);
}
#if 0
} else if (!memcmp(&g, &ext_stream_header, sizeof(GUID))) {
int ext_len, payload_ext_ct, stream_ct;
uint32_t ext_d;
int64_t pos_ex_st, pos_curr;
pos_ex_st = url_ftell(pb);
get_le64(pb);
get_le64(pb);
get_le32(pb);
get_le32(pb);
get_le32(pb);
get_le32(pb);
get_le32(pb);
get_le32(pb);
get_le32(pb);
get_le32(pb);
get_le16(pb);
get_le16(pb);
get_le64(pb);
stream_ct = get_le16(pb);
payload_ext_ct = get_le16(pb);
for (i=0; i<stream_ct; i++){
get_le16(pb);
ext_len = get_le16(pb);
url_fseek(pb, ext_len, SEEK_CUR);
}
for (i=0; i<payload_ext_ct; i++){
get_guid(pb, &g);
ext_d=get_le16(pb);
ext_len=get_le32(pb);
url_fseek(pb, ext_len, SEEK_CUR);
}
// there could be a optional stream properties object to follow
// if so the next iteration will pick it up
} else if (!memcmp(&g, &head1_guid, sizeof(GUID))) {
int v1, v2;
get_guid(pb, &g);
v1 = get_le32(pb);
v2 = get_le16(pb);
#if 0
} else if (!memcmp(&g, &codec_comment_header, sizeof(GUID))) {
int len, v1, n, num;
char str[256], *q;
......
......@@ -143,6 +143,10 @@ static const GUID stream_header = {
0xB7DC0791, 0xA9B7, 0x11CF, { 0x8E, 0xE6, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65 },
};
static const GUID ext_stream_header = {
0x14E6A5CB, 0xC672, 0x4332, { 0x83, 0x99, 0xA9, 0x69, 0x52, 0x06, 0x5B, 0x5A },
};
static const GUID audio_stream = {
0xF8699E40, 0x5B4D, 0x11CF, { 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B },
};
......@@ -200,6 +204,14 @@ static const GUID simple_index_header = {
0x33000890, 0xE5B1, 0x11CF, { 0x89, 0xF4, 0x00, 0xA0, 0xC9, 0x03, 0x49, 0xCB },
};
static const GUID ext_stream_embed_stream_header = {
0x3afb65e2, 0x47ef, 0x40f2, { 0xac, 0x2c, 0x70, 0xa9, 0x0d, 0x71, 0xd3, 0x43}
};
static const GUID ext_stream_audio_stream = {
0x31178c9d, 0x03e1, 0x4528, { 0xb5, 0x82, 0x3d, 0xf9, 0xdb, 0x22, 0xf5, 0x03}
};
/* I am not a number !!! This GUID is the one found on the PC used to
generate the stream */
static const GUID my_guid = {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册