mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
asfdec: parse payload extension list
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
ac2a3a7a05
commit
2d8c76eb1f
@ -28,6 +28,11 @@
|
|||||||
|
|
||||||
#define PACKET_SIZE 3200
|
#define PACKET_SIZE 3200
|
||||||
|
|
||||||
|
typedef struct ASFPayload {
|
||||||
|
uint8_t type;
|
||||||
|
uint16_t size;
|
||||||
|
} ASFPayload;
|
||||||
|
|
||||||
typedef struct ASFStream {
|
typedef struct ASFStream {
|
||||||
int num;
|
int num;
|
||||||
unsigned char seq;
|
unsigned char seq;
|
||||||
@ -47,6 +52,9 @@ typedef struct ASFStream {
|
|||||||
|
|
||||||
int palette_changed;
|
int palette_changed;
|
||||||
uint32_t palette[256];
|
uint32_t palette[256];
|
||||||
|
|
||||||
|
int payload_ext_ct;
|
||||||
|
ASFPayload payload[8];
|
||||||
} ASFStream;
|
} ASFStream;
|
||||||
|
|
||||||
typedef struct ASFMainHeader {
|
typedef struct ASFMainHeader {
|
||||||
|
@ -512,8 +512,10 @@ static int asf_read_ext_stream_properties(AVFormatContext *s, int64_t size)
|
|||||||
stream_ct = avio_rl16(pb); //stream-name-count
|
stream_ct = avio_rl16(pb); //stream-name-count
|
||||||
payload_ext_ct = avio_rl16(pb); //payload-extension-system-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->stream_bitrates[stream_num] = leak_rate;
|
||||||
|
asf->streams[stream_num].payload_ext_ct = 0;
|
||||||
|
}
|
||||||
|
|
||||||
for (i=0; i<stream_ct; i++){
|
for (i=0; i<stream_ct; i++){
|
||||||
avio_rl16(pb);
|
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++){
|
for (i=0; i<payload_ext_ct; i++){
|
||||||
|
int size;
|
||||||
ff_get_guid(pb, &g);
|
ff_get_guid(pb, &g);
|
||||||
avio_skip(pb, 2);
|
size = avio_rl16(pb);
|
||||||
ext_len=avio_rl32(pb);
|
ext_len=avio_rl32(pb);
|
||||||
avio_skip(pb, ext_len);
|
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;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user