|
|
@@ -39,28 +39,28 @@ typedef struct { |
|
|
typedef uint8_t GUID[16]; |
|
|
typedef uint8_t GUID[16]; |
|
|
|
|
|
|
|
|
typedef struct { |
|
|
typedef struct { |
|
|
GUID guid; // generated by client computer |
|
|
|
|
|
uint64_t file_size; // in bytes |
|
|
|
|
|
// invalid if broadcasting |
|
|
|
|
|
uint64_t create_time; // time of creation, in 100-nanosecond units since 1.1.1601 |
|
|
|
|
|
// invalid if broadcasting |
|
|
|
|
|
uint64_t play_time; // play time, in 100-nanosecond units |
|
|
|
|
|
// invalid if broadcasting |
|
|
|
|
|
uint64_t send_time; // time to send file, in 100-nanosecond units |
|
|
|
|
|
// invalid if broadcasting (could be ignored) |
|
|
|
|
|
uint32_t preroll; // timestamp of the first packet, in milliseconds |
|
|
|
|
|
// if nonzero - substract from time |
|
|
|
|
|
uint32_t ignore; // preroll is 64bit - but let's just ignore it |
|
|
|
|
|
uint32_t flags; // 0x01 - broadcast |
|
|
|
|
|
// 0x02 - seekable |
|
|
|
|
|
// rest is reserved should be 0 |
|
|
|
|
|
uint32_t min_pktsize; // size of a data packet |
|
|
|
|
|
// invalid if broadcasting |
|
|
|
|
|
uint32_t max_pktsize; // shall be the same as for min_pktsize |
|
|
|
|
|
// invalid if broadcasting |
|
|
|
|
|
uint32_t max_bitrate; // bandwith of stream in bps |
|
|
|
|
|
// should be the sum of bitrates of the |
|
|
|
|
|
// individual media streams |
|
|
|
|
|
|
|
|
GUID guid; ///< generated by client computer |
|
|
|
|
|
uint64_t file_size; /**< in bytes |
|
|
|
|
|
* invalid if broadcasting */ |
|
|
|
|
|
uint64_t create_time; /**< time of creation, in 100-nanosecond units since 1.1.1601 |
|
|
|
|
|
* invalid if broadcasting */ |
|
|
|
|
|
uint64_t play_time; /**< play time, in 100-nanosecond units |
|
|
|
|
|
* invalid if broadcasting */ |
|
|
|
|
|
uint64_t send_time; /**< time to send file, in 100-nanosecond units |
|
|
|
|
|
* invalid if broadcasting (could be ignored) */ |
|
|
|
|
|
uint32_t preroll; /**< timestamp of the first packet, in milliseconds |
|
|
|
|
|
* if nonzero - substract from time */ |
|
|
|
|
|
uint32_t ignore; ///< preroll is 64bit - but let's just ignore it |
|
|
|
|
|
uint32_t flags; /**< 0x01 - broadcast |
|
|
|
|
|
* 0x02 - seekable |
|
|
|
|
|
* rest is reserved should be 0 */ |
|
|
|
|
|
uint32_t min_pktsize; /**< size of a data packet |
|
|
|
|
|
* invalid if broadcasting */ |
|
|
|
|
|
uint32_t max_pktsize; /**< shall be the same as for min_pktsize |
|
|
|
|
|
* invalid if broadcasting */ |
|
|
|
|
|
uint32_t max_bitrate; /**< bandwith of stream in bps |
|
|
|
|
|
* should be the sum of bitrates of the |
|
|
|
|
|
* individual media streams */ |
|
|
} ASFMainHeader; |
|
|
} ASFMainHeader; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -74,11 +74,11 @@ typedef struct { |
|
|
uint32_t seqno; |
|
|
uint32_t seqno; |
|
|
unsigned int packet_size; |
|
|
unsigned int packet_size; |
|
|
int is_streamed; |
|
|
int is_streamed; |
|
|
int asfid2avid[128]; /* conversion table from asf ID 2 AVStream ID */ |
|
|
|
|
|
ASFStream streams[128]; /* it's max number and it's not that big */ |
|
|
|
|
|
|
|
|
int asfid2avid[128]; ///< conversion table from asf ID 2 AVStream ID |
|
|
|
|
|
ASFStream streams[128]; ///< it's max number and it's not that big |
|
|
/* non streamed additonnal info */ |
|
|
/* non streamed additonnal info */ |
|
|
uint64_t nb_packets; ///< how many packets are there in the file, invalid if broadcasting |
|
|
uint64_t nb_packets; ///< how many packets are there in the file, invalid if broadcasting |
|
|
int64_t duration; /* in 100ns units */ |
|
|
|
|
|
|
|
|
int64_t duration; ///< in 100ns units |
|
|
/* packet filling */ |
|
|
/* packet filling */ |
|
|
unsigned char multi_payloads_present; |
|
|
unsigned char multi_payloads_present; |
|
|
int packet_size_left; |
|
|
int packet_size_left; |
|
|
@@ -90,9 +90,9 @@ typedef struct { |
|
|
uint8_t packet_buf[PACKET_SIZE]; |
|
|
uint8_t packet_buf[PACKET_SIZE]; |
|
|
ByteIOContext pb; |
|
|
ByteIOContext pb; |
|
|
/* only for reading */ |
|
|
/* only for reading */ |
|
|
uint64_t data_offset; /* begining of the first data packet */ |
|
|
|
|
|
uint64_t data_object_offset; /* data object offset (excl. GUID & size)*/ |
|
|
|
|
|
uint64_t data_object_size; /* size of the data object */ |
|
|
|
|
|
|
|
|
uint64_t data_offset; ///< begining of the first data packet |
|
|
|
|
|
uint64_t data_object_offset; ///< data object offset (excl. GUID & size) |
|
|
|
|
|
uint64_t data_object_size; ///< size of the data object |
|
|
int index_read; |
|
|
int index_read; |
|
|
|
|
|
|
|
|
ASFMainHeader hdr; |
|
|
ASFMainHeader hdr; |
|
|
@@ -124,7 +124,7 @@ typedef struct { |
|
|
uint32_t nb_index_memory_alloc; |
|
|
uint32_t nb_index_memory_alloc; |
|
|
uint16_t maximum_packet; |
|
|
uint16_t maximum_packet; |
|
|
|
|
|
|
|
|
ASFStream* asf_st; /* currently decoded stream */ |
|
|
|
|
|
|
|
|
ASFStream* asf_st; ///< currently decoded stream |
|
|
} ASFContext; |
|
|
} ASFContext; |
|
|
|
|
|
|
|
|
static const GUID asf_header = { |
|
|
static const GUID asf_header = { |
|
|
|