Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-11-03 08:35:35 +0400
committerMichael Niedermayer <michaelni@gmx.at>2012-11-03 08:35:35 +0400
commit2d8c76eb1f1c198e81c36a95c0d56e55cc1f4c5a (patch)
tree7064a00d1c9edffe01fb615c33b4f474598b1dff
parentac2a3a7a05197844f01ddeea972cfbbc511e1efb (diff)
asfdec: parse payload extension list
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavformat/asf.h8
-rw-r--r--libavformat/asfdec.c14
2 files changed, 20 insertions, 2 deletions
diff --git a/libavformat/asf.h b/libavformat/asf.h
index 822cd6bbea..528d4c1773 100644
--- a/libavformat/asf.h
+++ b/libavformat/asf.h
@@ -28,6 +28,11 @@
#define PACKET_SIZE 3200
+typedef struct ASFPayload {
+ uint8_t type;
+ uint16_t size;
+} ASFPayload;
+
typedef struct ASFStream {
int num;
unsigned char seq;
@@ -47,6 +52,9 @@ typedef struct ASFStream {
int palette_changed;
uint32_t palette[256];
+
+ int payload_ext_ct;
+ ASFPayload payload[8];
} ASFStream;
typedef struct ASFMainHeader {
diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c
index 9f56818312..4ad5c2dfd7 100644
--- a/libavformat/asfdec.c
+++ b/libavformat/asfdec.c
@@ -512,8 +512,10 @@ static int asf_read_ext_stream_properties(AVFormatContext *s, int64_t size)
stream_ct = avio_rl16(pb); //stream-name-count
payload_ext_ct = avio_rl16(pb); //payload-extension-system-count
- if (stream_num < 128)
+ if (stream_num < 128) {
asf->stream_bitrates[stream_num] = leak_rate;
+ asf->streams[stream_num].payload_ext_ct = 0;
+ }
for (i=0; i<stream_ct; i++){
avio_rl16(pb);
@@ -522,10 +524,18 @@ static int asf_read_ext_stream_properties(AVFormatContext *s, int64_t size)
}
for (i=0; i<payload_ext_ct; i++){
+ int size;
ff_get_guid(pb, &g);
- avio_skip(pb, 2);
+ size = avio_rl16(pb);
ext_len=avio_rl32(pb);
avio_skip(pb, ext_len);
+ if (stream_num < 128 && i < FF_ARRAY_ELEMS(asf->streams[stream_num].payload)) {
+ ASFPayload *p = &asf->streams[stream_num].payload[i];
+ p->type = g[0];
+ p->size = size;
+ av_log(s, AV_LOG_DEBUG, "Payload extension %x %d\n", g[0], p->size );
+ asf->streams[stream_num].payload_ext_ct ++;
+ }
}
return 0;