| Line | Branch | Exec | Source |
|---|---|---|---|
| 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 | typedef enum ASFDataType { | ||
| 30 | ASF_UNICODE = 0, | ||
| 31 | ASF_BYTE_ARRAY = 1, | ||
| 32 | ASF_BOOL = 2, | ||
| 33 | ASF_DWORD = 3, | ||
| 34 | ASF_QWORD = 4, | ||
| 35 | ASF_WORD = 5, | ||
| 36 | ASF_GUID = 6, | ||
| 37 | }ASFDataType; | ||
| 38 | |||
| 39 | typedef struct ASFMainHeader { | ||
| 40 | ff_asf_guid guid; ///< generated by client computer | ||
| 41 | uint64_t file_size; /**< in bytes | ||
| 42 | * invalid if broadcasting */ | ||
| 43 | uint64_t create_time; /**< time of creation, in 100-nanosecond units since 1.1.1601 | ||
| 44 | * invalid if broadcasting */ | ||
| 45 | uint64_t play_time; /**< play time, in 100-nanosecond units | ||
| 46 | * invalid if broadcasting */ | ||
| 47 | uint64_t send_time; /**< time to send file, in 100-nanosecond units | ||
| 48 | * invalid if broadcasting (could be ignored) */ | ||
| 49 | uint32_t preroll; /**< timestamp of the first packet, in milliseconds | ||
| 50 | * if nonzero - subtract from time */ | ||
| 51 | uint32_t ignore; ///< preroll is 64 bits - but let's just ignore it | ||
| 52 | uint32_t flags; /**< 0x01 - broadcast | ||
| 53 | * 0x02 - seekable | ||
| 54 | * rest is reserved should be 0 */ | ||
| 55 | uint32_t min_pktsize; /**< size of a data packet | ||
| 56 | * invalid if broadcasting */ | ||
| 57 | uint32_t max_pktsize; /**< shall be the same as for min_pktsize | ||
| 58 | * invalid if broadcasting */ | ||
| 59 | uint32_t max_bitrate; /**< bandwidth of stream in bps | ||
| 60 | * should be the sum of bitrates of the | ||
| 61 | * individual media streams */ | ||
| 62 | } ASFMainHeader; | ||
| 63 | |||
| 64 | |||
| 65 | typedef struct ASFIndex { | ||
| 66 | uint32_t packet_number; | ||
| 67 | uint16_t packet_count; | ||
| 68 | uint64_t send_time; | ||
| 69 | uint64_t offset; | ||
| 70 | } ASFIndex; | ||
| 71 | |||
| 72 | extern const ff_asf_guid ff_asf_header; | ||
| 73 | extern const ff_asf_guid ff_asf_file_header; | ||
| 74 | extern const ff_asf_guid ff_asf_stream_header; | ||
| 75 | extern const ff_asf_guid ff_asf_ext_stream_header; | ||
| 76 | extern const ff_asf_guid ff_asf_audio_stream; | ||
| 77 | extern const ff_asf_guid ff_asf_audio_conceal_spread; | ||
| 78 | extern const ff_asf_guid ff_asf_video_stream; | ||
| 79 | extern const ff_asf_guid ff_asf_jfif_media; | ||
| 80 | extern const ff_asf_guid ff_asf_video_conceal_none; | ||
| 81 | extern const ff_asf_guid ff_asf_command_stream; | ||
| 82 | extern const ff_asf_guid ff_asf_comment_header; | ||
| 83 | extern const ff_asf_guid ff_asf_codec_comment_header; | ||
| 84 | extern const ff_asf_guid ff_asf_codec_comment1_header; | ||
| 85 | extern const ff_asf_guid ff_asf_data_header; | ||
| 86 | extern const ff_asf_guid ff_asf_head1_guid; | ||
| 87 | extern const ff_asf_guid ff_asf_head2_guid; | ||
| 88 | extern const ff_asf_guid ff_asf_extended_content_header; | ||
| 89 | extern const ff_asf_guid ff_asf_simple_index_header; | ||
| 90 | extern const ff_asf_guid ff_asf_ext_stream_embed_stream_header; | ||
| 91 | extern const ff_asf_guid ff_asf_ext_stream_audio_stream; | ||
| 92 | extern const ff_asf_guid ff_asf_metadata_header; | ||
| 93 | extern const ff_asf_guid ff_asf_metadata_library_header; | ||
| 94 | extern const ff_asf_guid ff_asf_marker_header; | ||
| 95 | extern const ff_asf_guid ff_asf_reserved_4; | ||
| 96 | extern const ff_asf_guid ff_asf_my_guid; | ||
| 97 | extern const ff_asf_guid ff_asf_language_guid; | ||
| 98 | extern const ff_asf_guid ff_asf_content_encryption; | ||
| 99 | extern const ff_asf_guid ff_asf_ext_content_encryption; | ||
| 100 | extern const ff_asf_guid ff_asf_digital_signature; | ||
| 101 | #define ff_asf_extended_stream_properties_object ff_asf_ext_stream_header | ||
| 102 | extern const ff_asf_guid ff_asf_group_mutual_exclusion_object; | ||
| 103 | extern const ff_asf_guid ff_asf_mutex_language; | ||
| 104 | |||
| 105 | extern const AVMetadataConv ff_asf_metadata_conv[]; | ||
| 106 | |||
| 107 | /** | ||
| 108 | * Handles both attached pictures as well as id3 tags. | ||
| 109 | * | ||
| 110 | * @return Returns < 0 on error, 1 if the type of the byte array | ||
| 111 | * is unsupported by this function and 0 otherwise. | ||
| 112 | */ | ||
| 113 | int ff_asf_handle_byte_array(AVFormatContext *s, const char *name, | ||
| 114 | int val_len); | ||
| 115 | |||
| 116 | /* convert from av time to windows filetime */ | ||
| 117 | 8 | static inline int64_t ff_asf_avtime_to_filetime(int64_t avtime) | |
| 118 | { | ||
| 119 | 8 | return avtime * 10 + 116444736000000000; | |
| 120 | } | ||
| 121 | |||
| 122 | /* convert from windows filetime to av time */ | ||
| 123 | 38 | static inline int64_t ff_asf_filetime_to_avtime(int64_t filetime) | |
| 124 | { | ||
| 125 | 38 | return filetime / 10 - 11644473600000000; | |
| 126 | } | ||
| 127 | |||
| 128 | #define ASF_PACKET_FLAG_ERROR_CORRECTION_PRESENT 0x80 //1000 0000 | ||
| 129 | |||
| 130 | |||
| 131 | // ASF data packet structure | ||
| 132 | // ========================= | ||
| 133 | // | ||
| 134 | // | ||
| 135 | // ----------------------------------- | ||
| 136 | // | Error Correction Data | Optional | ||
| 137 | // ----------------------------------- | ||
| 138 | // | Payload Parsing Information (PPI) | | ||
| 139 | // ----------------------------------- | ||
| 140 | // | Payload Data | | ||
| 141 | // ----------------------------------- | ||
| 142 | // | Padding Data | | ||
| 143 | // ----------------------------------- | ||
| 144 | |||
| 145 | |||
| 146 | // PPI_FLAG - Payload parsing information flags | ||
| 147 | #define ASF_PPI_FLAG_MULTIPLE_PAYLOADS_PRESENT 1 | ||
| 148 | |||
| 149 | #define ASF_PPI_FLAG_SEQUENCE_FIELD_IS_BYTE 0x02 //0000 0010 | ||
| 150 | #define ASF_PPI_FLAG_SEQUENCE_FIELD_IS_WORD 0x04 //0000 0100 | ||
| 151 | #define ASF_PPI_FLAG_SEQUENCE_FIELD_IS_DWORD 0x06 //0000 0110 | ||
| 152 | #define ASF_PPI_MASK_SEQUENCE_FIELD_SIZE 0x06 //0000 0110 | ||
| 153 | |||
| 154 | #define ASF_PPI_FLAG_PADDING_LENGTH_FIELD_IS_BYTE 0x08 //0000 1000 | ||
| 155 | #define ASF_PPI_FLAG_PADDING_LENGTH_FIELD_IS_WORD 0x10 //0001 0000 | ||
| 156 | #define ASF_PPI_FLAG_PADDING_LENGTH_FIELD_IS_DWORD 0x18 //0001 1000 | ||
| 157 | #define ASF_PPI_MASK_PADDING_LENGTH_FIELD_SIZE 0x18 //0001 1000 | ||
| 158 | |||
| 159 | #define ASF_PPI_FLAG_PACKET_LENGTH_FIELD_IS_BYTE 0x20 //0010 0000 | ||
| 160 | #define ASF_PPI_FLAG_PACKET_LENGTH_FIELD_IS_WORD 0x40 //0100 0000 | ||
| 161 | #define ASF_PPI_FLAG_PACKET_LENGTH_FIELD_IS_DWORD 0x60 //0110 0000 | ||
| 162 | #define ASF_PPI_MASK_PACKET_LENGTH_FIELD_SIZE 0x60 //0110 0000 | ||
| 163 | |||
| 164 | // PL_FLAG - Payload flags | ||
| 165 | #define ASF_PL_FLAG_REPLICATED_DATA_LENGTH_FIELD_IS_BYTE 0x01 //0000 0001 | ||
| 166 | #define ASF_PL_FLAG_REPLICATED_DATA_LENGTH_FIELD_IS_WORD 0x02 //0000 0010 | ||
| 167 | #define ASF_PL_FLAG_REPLICATED_DATA_LENGTH_FIELD_IS_DWORD 0x03 //0000 0011 | ||
| 168 | #define ASF_PL_MASK_REPLICATED_DATA_LENGTH_FIELD_SIZE 0x03 //0000 0011 | ||
| 169 | |||
| 170 | #define ASF_PL_FLAG_OFFSET_INTO_MEDIA_OBJECT_LENGTH_FIELD_IS_BYTE 0x04 //0000 0100 | ||
| 171 | #define ASF_PL_FLAG_OFFSET_INTO_MEDIA_OBJECT_LENGTH_FIELD_IS_WORD 0x08 //0000 1000 | ||
| 172 | #define ASF_PL_FLAG_OFFSET_INTO_MEDIA_OBJECT_LENGTH_FIELD_IS_DWORD 0x0c //0000 1100 | ||
| 173 | #define ASF_PL_MASK_OFFSET_INTO_MEDIA_OBJECT_LENGTH_FIELD_SIZE 0x0c //0000 1100 | ||
| 174 | |||
| 175 | #define ASF_PL_FLAG_MEDIA_OBJECT_NUMBER_LENGTH_FIELD_IS_BYTE 0x10 //0001 0000 | ||
| 176 | #define ASF_PL_FLAG_MEDIA_OBJECT_NUMBER_LENGTH_FIELD_IS_WORD 0x20 //0010 0000 | ||
| 177 | #define ASF_PL_FLAG_MEDIA_OBJECT_NUMBER_LENGTH_FIELD_IS_DWORD 0x30 //0011 0000 | ||
| 178 | #define ASF_PL_MASK_MEDIA_OBJECT_NUMBER_LENGTH_FIELD_SIZE 0x30 //0011 0000 | ||
| 179 | |||
| 180 | #define ASF_PL_FLAG_STREAM_NUMBER_LENGTH_FIELD_IS_BYTE 0x40 //0100 0000 | ||
| 181 | #define ASF_PL_MASK_STREAM_NUMBER_LENGTH_FIELD_SIZE 0xc0 //1100 0000 | ||
| 182 | |||
| 183 | #define ASF_PL_FLAG_PAYLOAD_LENGTH_FIELD_IS_BYTE 0x40 //0100 0000 | ||
| 184 | #define ASF_PL_FLAG_PAYLOAD_LENGTH_FIELD_IS_WORD 0x80 //1000 0000 | ||
| 185 | #define ASF_PL_MASK_PAYLOAD_LENGTH_FIELD_SIZE 0xc0 //1100 0000 | ||
| 186 | |||
| 187 | #define ASF_PL_FLAG_KEY_FRAME 0x80 //1000 0000 | ||
| 188 | |||
| 189 | #endif /* AVFORMAT_ASF_H */ | ||
| 190 |