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 31typedef struct ASFPayload { 32 uint8_t type; 33 uint16_t size; 34} ASFPayload; 35 36typedef 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 63typedef 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 89typedef struct ASFIndex { 90 uint32_t packet_number; 91 uint16_t packet_count; 92 uint64_t send_time; 93 uint64_t offset; 94} ASFIndex; 95 96extern const ff_asf_guid ff_asf_header; 97extern const ff_asf_guid ff_asf_file_header; 98extern const ff_asf_guid ff_asf_stream_header; 99extern const ff_asf_guid ff_asf_ext_stream_header; 100extern const ff_asf_guid ff_asf_audio_stream; 101extern const ff_asf_guid ff_asf_audio_conceal_none; 102extern const ff_asf_guid ff_asf_audio_conceal_spread; 103extern const ff_asf_guid ff_asf_video_stream; 104extern const ff_asf_guid ff_asf_jfif_media; 105extern const ff_asf_guid ff_asf_video_conceal_none; 106extern const ff_asf_guid ff_asf_command_stream; 107extern const ff_asf_guid ff_asf_comment_header; 108extern const ff_asf_guid ff_asf_codec_comment_header; 109extern const ff_asf_guid ff_asf_codec_comment1_header; 110extern const ff_asf_guid ff_asf_data_header; 111extern const ff_asf_guid ff_asf_head1_guid; 112extern const ff_asf_guid ff_asf_head2_guid; 113extern const ff_asf_guid ff_asf_extended_content_header; 114extern const ff_asf_guid ff_asf_simple_index_header; 115extern const ff_asf_guid ff_asf_ext_stream_embed_stream_header; 116extern const ff_asf_guid ff_asf_ext_stream_audio_stream; 117extern const ff_asf_guid ff_asf_metadata_header; 118extern const ff_asf_guid ff_asf_metadata_library_header; 119extern const ff_asf_guid ff_asf_marker_header; 120extern const ff_asf_guid ff_asf_reserved_4; 121extern const ff_asf_guid ff_asf_my_guid; 122extern const ff_asf_guid ff_asf_language_guid; 123extern const ff_asf_guid ff_asf_content_encryption; 124extern const ff_asf_guid ff_asf_ext_content_encryption; 125extern const ff_asf_guid ff_asf_digital_signature; 126 127extern 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 190extern AVInputFormat ff_asf_demuxer; 191 192#endif /* AVFORMAT_ASF_H */ 193