Commit | Line | Data |
---|---|---|
2ba45a60 DM |
1 | /* |
2 | * Copyright (c) 2000, 2001 Fabrice Bellard | |
3 | * | |
4 | * This file is part of FFmpeg. | |
5 | * | |
6 | * FFmpeg is free software; you can redistribute it and/or | |
7 | * modify it under the terms of the GNU Lesser General Public | |
8 | * License as published by the Free Software Foundation; either | |
9 | * version 2.1 of the License, or (at your option) any later version. | |
10 | * | |
11 | * FFmpeg is distributed in the hope that it will be useful, | |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 | * Lesser General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU Lesser General Public | |
17 | * License along with FFmpeg; if not, write to the Free Software | |
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
19 | */ | |
20 | ||
21 | #ifndef AVFORMAT_ASF_H | |
22 | #define AVFORMAT_ASF_H | |
23 | ||
24 | #include <stdint.h> | |
25 | #include "avformat.h" | |
26 | #include "metadata.h" | |
27 | #include "riff.h" | |
28 | ||
29 | #define PACKET_SIZE 3200 | |
30 | ||
31 | typedef struct ASFPayload { | |
32 | uint8_t type; | |
33 | uint16_t size; | |
34 | } ASFPayload; | |
35 | ||
36 | typedef struct ASFStream { | |
37 | int num; | |
38 | unsigned char seq; | |
39 | /* use for reading */ | |
40 | AVPacket pkt; | |
41 | int frag_offset; | |
42 | int packet_obj_size; | |
43 | int timestamp; | |
44 | int64_t duration; | |
45 | int skip_to_key; | |
46 | int pkt_clean; | |
47 | ||
48 | int ds_span; /* descrambling */ | |
49 | int ds_packet_size; | |
50 | int ds_chunk_size; | |
51 | ||
52 | int64_t packet_pos; | |
53 | ||
54 | uint16_t stream_language_index; | |
55 | ||
56 | int palette_changed; | |
57 | uint32_t palette[256]; | |
58 | ||
59 | int payload_ext_ct; | |
60 | ASFPayload payload[8]; | |
61 | } ASFStream; | |
62 | ||
63 | typedef struct ASFMainHeader { | |
64 | ff_asf_guid guid; ///< generated by client computer | |
65 | uint64_t file_size; /**< in bytes | |
66 | * invalid if broadcasting */ | |
67 | uint64_t create_time; /**< time of creation, in 100-nanosecond units since 1.1.1601 | |
68 | * invalid if broadcasting */ | |
69 | uint64_t play_time; /**< play time, in 100-nanosecond units | |
70 | * invalid if broadcasting */ | |
71 | uint64_t send_time; /**< time to send file, in 100-nanosecond units | |
72 | * invalid if broadcasting (could be ignored) */ | |
73 | uint32_t preroll; /**< timestamp of the first packet, in milliseconds | |
74 | * if nonzero - subtract from time */ | |
75 | uint32_t ignore; ///< preroll is 64bit - but let's just ignore it | |
76 | uint32_t flags; /**< 0x01 - broadcast | |
77 | * 0x02 - seekable | |
78 | * rest is reserved should be 0 */ | |
79 | uint32_t min_pktsize; /**< size of a data packet | |
80 | * invalid if broadcasting */ | |
81 | uint32_t max_pktsize; /**< shall be the same as for min_pktsize | |
82 | * invalid if broadcasting */ | |
83 | uint32_t max_bitrate; /**< bandwidth of stream in bps | |
84 | * should be the sum of bitrates of the | |
85 | * individual media streams */ | |
86 | } ASFMainHeader; | |
87 | ||
88 | ||
89 | typedef struct ASFIndex { | |
90 | uint32_t packet_number; | |
91 | uint16_t packet_count; | |
92 | uint64_t send_time; | |
93 | uint64_t offset; | |
94 | } ASFIndex; | |
95 | ||
96 | extern const ff_asf_guid ff_asf_header; | |
97 | extern const ff_asf_guid ff_asf_file_header; | |
98 | extern const ff_asf_guid ff_asf_stream_header; | |
99 | extern const ff_asf_guid ff_asf_ext_stream_header; | |
100 | extern const ff_asf_guid ff_asf_audio_stream; | |
101 | extern const ff_asf_guid ff_asf_audio_conceal_none; | |
102 | extern const ff_asf_guid ff_asf_audio_conceal_spread; | |
103 | extern const ff_asf_guid ff_asf_video_stream; | |
104 | extern const ff_asf_guid ff_asf_jfif_media; | |
105 | extern const ff_asf_guid ff_asf_video_conceal_none; | |
106 | extern const ff_asf_guid ff_asf_command_stream; | |
107 | extern const ff_asf_guid ff_asf_comment_header; | |
108 | extern const ff_asf_guid ff_asf_codec_comment_header; | |
109 | extern const ff_asf_guid ff_asf_codec_comment1_header; | |
110 | extern const ff_asf_guid ff_asf_data_header; | |
111 | extern const ff_asf_guid ff_asf_head1_guid; | |
112 | extern const ff_asf_guid ff_asf_head2_guid; | |
113 | extern const ff_asf_guid ff_asf_extended_content_header; | |
114 | extern const ff_asf_guid ff_asf_simple_index_header; | |
115 | extern const ff_asf_guid ff_asf_ext_stream_embed_stream_header; | |
116 | extern const ff_asf_guid ff_asf_ext_stream_audio_stream; | |
117 | extern const ff_asf_guid ff_asf_metadata_header; | |
118 | extern const ff_asf_guid ff_asf_metadata_library_header; | |
119 | extern const ff_asf_guid ff_asf_marker_header; | |
120 | extern const ff_asf_guid ff_asf_reserved_4; | |
121 | extern const ff_asf_guid ff_asf_my_guid; | |
122 | extern const ff_asf_guid ff_asf_language_guid; | |
123 | extern const ff_asf_guid ff_asf_content_encryption; | |
124 | extern const ff_asf_guid ff_asf_ext_content_encryption; | |
125 | extern const ff_asf_guid ff_asf_digital_signature; | |
126 | ||
127 | extern const AVMetadataConv ff_asf_metadata_conv[]; | |
128 | ||
129 | #define ASF_PACKET_FLAG_ERROR_CORRECTION_PRESENT 0x80 //1000 0000 | |
130 | ||
131 | ||
132 | // ASF data packet structure | |
133 | // ========================= | |
134 | // | |
135 | // | |
136 | // ----------------------------------- | |
137 | // | Error Correction Data | Optional | |
138 | // ----------------------------------- | |
139 | // | Payload Parsing Information (PPI) | | |
140 | // ----------------------------------- | |
141 | // | Payload Data | | |
142 | // ----------------------------------- | |
143 | // | Padding Data | | |
144 | // ----------------------------------- | |
145 | ||
146 | ||
147 | // PPI_FLAG - Payload parsing information flags | |
148 | #define ASF_PPI_FLAG_MULTIPLE_PAYLOADS_PRESENT 1 | |
149 | ||
150 | #define ASF_PPI_FLAG_SEQUENCE_FIELD_IS_BYTE 0x02 //0000 0010 | |
151 | #define ASF_PPI_FLAG_SEQUENCE_FIELD_IS_WORD 0x04 //0000 0100 | |
152 | #define ASF_PPI_FLAG_SEQUENCE_FIELD_IS_DWORD 0x06 //0000 0110 | |
153 | #define ASF_PPI_MASK_SEQUENCE_FIELD_SIZE 0x06 //0000 0110 | |
154 | ||
155 | #define ASF_PPI_FLAG_PADDING_LENGTH_FIELD_IS_BYTE 0x08 //0000 1000 | |
156 | #define ASF_PPI_FLAG_PADDING_LENGTH_FIELD_IS_WORD 0x10 //0001 0000 | |
157 | #define ASF_PPI_FLAG_PADDING_LENGTH_FIELD_IS_DWORD 0x18 //0001 1000 | |
158 | #define ASF_PPI_MASK_PADDING_LENGTH_FIELD_SIZE 0x18 //0001 1000 | |
159 | ||
160 | #define ASF_PPI_FLAG_PACKET_LENGTH_FIELD_IS_BYTE 0x20 //0010 0000 | |
161 | #define ASF_PPI_FLAG_PACKET_LENGTH_FIELD_IS_WORD 0x40 //0100 0000 | |
162 | #define ASF_PPI_FLAG_PACKET_LENGTH_FIELD_IS_DWORD 0x60 //0110 0000 | |
163 | #define ASF_PPI_MASK_PACKET_LENGTH_FIELD_SIZE 0x60 //0110 0000 | |
164 | ||
165 | // PL_FLAG - Payload flags | |
166 | #define ASF_PL_FLAG_REPLICATED_DATA_LENGTH_FIELD_IS_BYTE 0x01 //0000 0001 | |
167 | #define ASF_PL_FLAG_REPLICATED_DATA_LENGTH_FIELD_IS_WORD 0x02 //0000 0010 | |
168 | #define ASF_PL_FLAG_REPLICATED_DATA_LENGTH_FIELD_IS_DWORD 0x03 //0000 0011 | |
169 | #define ASF_PL_MASK_REPLICATED_DATA_LENGTH_FIELD_SIZE 0x03 //0000 0011 | |
170 | ||
171 | #define ASF_PL_FLAG_OFFSET_INTO_MEDIA_OBJECT_LENGTH_FIELD_IS_BYTE 0x04 //0000 0100 | |
172 | #define ASF_PL_FLAG_OFFSET_INTO_MEDIA_OBJECT_LENGTH_FIELD_IS_WORD 0x08 //0000 1000 | |
173 | #define ASF_PL_FLAG_OFFSET_INTO_MEDIA_OBJECT_LENGTH_FIELD_IS_DWORD 0x0c //0000 1100 | |
174 | #define ASF_PL_MASK_OFFSET_INTO_MEDIA_OBJECT_LENGTH_FIELD_SIZE 0x0c //0000 1100 | |
175 | ||
176 | #define ASF_PL_FLAG_MEDIA_OBJECT_NUMBER_LENGTH_FIELD_IS_BYTE 0x10 //0001 0000 | |
177 | #define ASF_PL_FLAG_MEDIA_OBJECT_NUMBER_LENGTH_FIELD_IS_WORD 0x20 //0010 0000 | |
178 | #define ASF_PL_FLAG_MEDIA_OBJECT_NUMBER_LENGTH_FIELD_IS_DWORD 0x30 //0011 0000 | |
179 | #define ASF_PL_MASK_MEDIA_OBJECT_NUMBER_LENGTH_FIELD_SIZE 0x30 //0011 0000 | |
180 | ||
181 | #define ASF_PL_FLAG_STREAM_NUMBER_LENGTH_FIELD_IS_BYTE 0x40 //0100 0000 | |
182 | #define ASF_PL_MASK_STREAM_NUMBER_LENGTH_FIELD_SIZE 0xc0 //1100 0000 | |
183 | ||
184 | #define ASF_PL_FLAG_PAYLOAD_LENGTH_FIELD_IS_BYTE 0x40 //0100 0000 | |
185 | #define ASF_PL_FLAG_PAYLOAD_LENGTH_FIELD_IS_WORD 0x80 //1000 0000 | |
186 | #define ASF_PL_MASK_PAYLOAD_LENGTH_FIELD_SIZE 0xc0 //1100 0000 | |
187 | ||
188 | #define ASF_PL_FLAG_KEY_FRAME 0x80 //1000 0000 | |
189 | ||
190 | extern AVInputFormat ff_asf_demuxer; | |
191 | ||
192 | #endif /* AVFORMAT_ASF_H */ |