35 #define ASF_INDEXED_INTERVAL    10000000 
   36 #define ASF_INDEX_BLOCK         (1<<9) 
   38 #define ASF_PACKET_ERROR_CORRECTION_DATA_SIZE 0x2 
   39 #define ASF_PACKET_ERROR_CORRECTION_FLAGS          \ 
   40     (ASF_PACKET_FLAG_ERROR_CORRECTION_PRESENT |    \ 
   41      ASF_PACKET_ERROR_CORRECTION_DATA_SIZE) 
   43 #if (ASF_PACKET_ERROR_CORRECTION_FLAGS != 0) 
   44 #   define ASF_PACKET_ERROR_CORRECTION_FLAGS_FIELD_SIZE 1 
   46 #   define ASF_PACKET_ERROR_CORRECTION_FLAGS_FIELD_SIZE 0 
   49 #define ASF_PPI_PROPERTY_FLAGS                                       \ 
   50     (ASF_PL_FLAG_REPLICATED_DATA_LENGTH_FIELD_IS_BYTE           |    \ 
   51      ASF_PL_FLAG_OFFSET_INTO_MEDIA_OBJECT_LENGTH_FIELD_IS_DWORD |    \ 
   52      ASF_PL_FLAG_MEDIA_OBJECT_NUMBER_LENGTH_FIELD_IS_BYTE       |    \ 
   53      ASF_PL_FLAG_STREAM_NUMBER_LENGTH_FIELD_IS_BYTE) 
   55 #define ASF_PPI_LENGTH_TYPE_FLAGS 0 
   57 #define ASF_PAYLOAD_FLAGS ASF_PL_FLAG_PAYLOAD_LENGTH_FIELD_IS_WORD 
   59 #if (ASF_PPI_FLAG_SEQUENCE_FIELD_IS_BYTE == (ASF_PPI_LENGTH_TYPE_FLAGS & ASF_PPI_MASK_SEQUENCE_FIELD_SIZE)) 
   60 #   define ASF_PPI_SEQUENCE_FIELD_SIZE 1 
   62 #if (ASF_PPI_FLAG_SEQUENCE_FIELD_IS_WORD == (ASF_PPI_LENGTH_TYPE_FLAGS & ASF_PPI_MASK_SEQUENCE_FIELD_SIZE)) 
   63 #   define ASF_PPI_SEQUENCE_FIELD_SIZE 2 
   65 #if (ASF_PPI_FLAG_SEQUENCE_FIELD_IS_DWORD == (ASF_PPI_LENGTH_TYPE_FLAGS & ASF_PPI_MASK_SEQUENCE_FIELD_SIZE)) 
   66 #   define ASF_PPI_SEQUENCE_FIELD_SIZE 4 
   68 #ifndef ASF_PPI_SEQUENCE_FIELD_SIZE 
   69 #   define ASF_PPI_SEQUENCE_FIELD_SIZE 0 
   72 #if (ASF_PPI_FLAG_PACKET_LENGTH_FIELD_IS_BYTE == (ASF_PPI_LENGTH_TYPE_FLAGS & ASF_PPI_MASK_PACKET_LENGTH_FIELD_SIZE)) 
   73 #   define ASF_PPI_PACKET_LENGTH_FIELD_SIZE 1 
   75 #if (ASF_PPI_FLAG_PACKET_LENGTH_FIELD_IS_WORD == (ASF_PPI_LENGTH_TYPE_FLAGS & ASF_PPI_MASK_PACKET_LENGTH_FIELD_SIZE)) 
   76 #   define ASF_PPI_PACKET_LENGTH_FIELD_SIZE 2 
   78 #if (ASF_PPI_FLAG_PACKET_LENGTH_FIELD_IS_DWORD == (ASF_PPI_LENGTH_TYPE_FLAGS & ASF_PPI_MASK_PACKET_LENGTH_FIELD_SIZE)) 
   79 #   define ASF_PPI_PACKET_LENGTH_FIELD_SIZE 4 
   81 #ifndef ASF_PPI_PACKET_LENGTH_FIELD_SIZE 
   82 #   define ASF_PPI_PACKET_LENGTH_FIELD_SIZE 0 
   85 #if (ASF_PPI_FLAG_PADDING_LENGTH_FIELD_IS_BYTE == (ASF_PPI_LENGTH_TYPE_FLAGS & ASF_PPI_MASK_PADDING_LENGTH_FIELD_SIZE)) 
   86 #   define ASF_PPI_PADDING_LENGTH_FIELD_SIZE 1 
   88 #if (ASF_PPI_FLAG_PADDING_LENGTH_FIELD_IS_WORD == (ASF_PPI_LENGTH_TYPE_FLAGS & ASF_PPI_MASK_PADDING_LENGTH_FIELD_SIZE)) 
   89 #   define ASF_PPI_PADDING_LENGTH_FIELD_SIZE 2 
   91 #if (ASF_PPI_FLAG_PADDING_LENGTH_FIELD_IS_DWORD == (ASF_PPI_LENGTH_TYPE_FLAGS & ASF_PPI_MASK_PADDING_LENGTH_FIELD_SIZE)) 
   92 #   define ASF_PPI_PADDING_LENGTH_FIELD_SIZE 4 
   94 #ifndef ASF_PPI_PADDING_LENGTH_FIELD_SIZE 
   95 #   define ASF_PPI_PADDING_LENGTH_FIELD_SIZE 0 
   98 #if (ASF_PL_FLAG_REPLICATED_DATA_LENGTH_FIELD_IS_BYTE == (ASF_PPI_PROPERTY_FLAGS & ASF_PL_MASK_REPLICATED_DATA_LENGTH_FIELD_SIZE)) 
   99 #   define ASF_PAYLOAD_REPLICATED_DATA_LENGTH_FIELD_SIZE 1 
  101 #if (ASF_PL_FLAG_REPLICATED_DATA_LENGTH_FIELD_IS_WORD == (ASF_PPI_PROPERTY_FLAGS & ASF_PL_MASK_REPLICATED_DATA_LENGTH_FIELD_SIZE)) 
  102 #   define ASF_PAYLOAD_REPLICATED_DATA_LENGTH_FIELD_SIZE 2 
  104 #if (ASF_PL_FLAG_REPLICATED_DATA_LENGTH_FIELD_IS_DWORD == (ASF_PPI_PROPERTY_FLAGS & ASF_PL_MASK_REPLICATED_DATA_LENGTH_FIELD_SIZE)) 
  105 #   define ASF_PAYLOAD_REPLICATED_DATA_LENGTH_FIELD_SIZE 4 
  107 #ifndef ASF_PAYLOAD_REPLICATED_DATA_LENGTH_FIELD_SIZE 
  108 #   define ASF_PAYLOAD_REPLICATED_DATA_LENGTH_FIELD_SIZE 0 
  111 #if (ASF_PL_FLAG_OFFSET_INTO_MEDIA_OBJECT_LENGTH_FIELD_IS_BYTE == (ASF_PPI_PROPERTY_FLAGS & ASF_PL_MASK_OFFSET_INTO_MEDIA_OBJECT_LENGTH_FIELD_SIZE)) 
  112 #   define ASF_PAYLOAD_OFFSET_INTO_MEDIA_OBJECT_FIELD_SIZE 1 
  114 #if (ASF_PL_FLAG_OFFSET_INTO_MEDIA_OBJECT_LENGTH_FIELD_IS_WORD == (ASF_PPI_PROPERTY_FLAGS & ASF_PL_MASK_OFFSET_INTO_MEDIA_OBJECT_LENGTH_FIELD_SIZE)) 
  115 #   define ASF_PAYLOAD_OFFSET_INTO_MEDIA_OBJECT_FIELD_SIZE 2 
  117 #if (ASF_PL_FLAG_OFFSET_INTO_MEDIA_OBJECT_LENGTH_FIELD_IS_DWORD == (ASF_PPI_PROPERTY_FLAGS & ASF_PL_MASK_OFFSET_INTO_MEDIA_OBJECT_LENGTH_FIELD_SIZE)) 
  118 #   define ASF_PAYLOAD_OFFSET_INTO_MEDIA_OBJECT_FIELD_SIZE 4 
  120 #ifndef ASF_PAYLOAD_OFFSET_INTO_MEDIA_OBJECT_FIELD_SIZE 
  121 #   define ASF_PAYLOAD_OFFSET_INTO_MEDIA_OBJECT_FIELD_SIZE 0 
  124 #if (ASF_PL_FLAG_MEDIA_OBJECT_NUMBER_LENGTH_FIELD_IS_BYTE == (ASF_PPI_PROPERTY_FLAGS & ASF_PL_MASK_MEDIA_OBJECT_NUMBER_LENGTH_FIELD_SIZE)) 
  125 #   define ASF_PAYLOAD_MEDIA_OBJECT_NUMBER_FIELD_SIZE 1 
  127 #if (ASF_PL_FLAG_MEDIA_OBJECT_NUMBER_LENGTH_FIELD_IS_WORD == (ASF_PPI_PROPERTY_FLAGS & ASF_PL_MASK_MEDIA_OBJECT_NUMBER_LENGTH_FIELD_SIZE)) 
  128 #   define ASF_PAYLOAD_MEDIA_OBJECT_NUMBER_FIELD_SIZE 2 
  130 #if (ASF_PL_FLAG_MEDIA_OBJECT_NUMBER_LENGTH_FIELD_IS_DWORD == (ASF_PPI_PROPERTY_FLAGS & ASF_PL_MASK_MEDIA_OBJECT_NUMBER_LENGTH_FIELD_SIZE)) 
  131 #   define ASF_PAYLOAD_MEDIA_OBJECT_NUMBER_FIELD_SIZE 4 
  133 #ifndef ASF_PAYLOAD_MEDIA_OBJECT_NUMBER_FIELD_SIZE 
  134 #   define ASF_PAYLOAD_MEDIA_OBJECT_NUMBER_FIELD_SIZE 0 
  137 #if (ASF_PL_FLAG_PAYLOAD_LENGTH_FIELD_IS_BYTE == (ASF_PAYLOAD_FLAGS & ASF_PL_MASK_PAYLOAD_LENGTH_FIELD_SIZE)) 
  138 #   define ASF_PAYLOAD_LENGTH_FIELD_SIZE 1 
  140 #if (ASF_PL_FLAG_PAYLOAD_LENGTH_FIELD_IS_WORD == (ASF_PAYLOAD_FLAGS & ASF_PL_MASK_PAYLOAD_LENGTH_FIELD_SIZE)) 
  141 #   define ASF_PAYLOAD_LENGTH_FIELD_SIZE 2 
  143 #ifndef ASF_PAYLOAD_LENGTH_FIELD_SIZE 
  144 #   define ASF_PAYLOAD_LENGTH_FIELD_SIZE 0 
  147 #define PACKET_HEADER_MIN_SIZE \ 
  148     (ASF_PACKET_ERROR_CORRECTION_FLAGS_FIELD_SIZE +       \ 
  149      ASF_PACKET_ERROR_CORRECTION_DATA_SIZE +              \ 
  152      ASF_PPI_PACKET_LENGTH_FIELD_SIZE +                   \ 
  153      ASF_PPI_SEQUENCE_FIELD_SIZE +                        \ 
  154      ASF_PPI_PADDING_LENGTH_FIELD_SIZE +                  \ 
  159 #define ASF_PAYLOAD_REPLICATED_DATA_LENGTH 0x08 
  161 #define PAYLOAD_HEADER_SIZE_SINGLE_PAYLOAD                \ 
  163      ASF_PAYLOAD_MEDIA_OBJECT_NUMBER_FIELD_SIZE +         \ 
  164      ASF_PAYLOAD_OFFSET_INTO_MEDIA_OBJECT_FIELD_SIZE +    \ 
  165      ASF_PAYLOAD_REPLICATED_DATA_LENGTH_FIELD_SIZE +      \ 
  166      ASF_PAYLOAD_REPLICATED_DATA_LENGTH) 
  168 #define PAYLOAD_HEADER_SIZE_MULTIPLE_PAYLOADS             \ 
  170      ASF_PAYLOAD_MEDIA_OBJECT_NUMBER_FIELD_SIZE +         \ 
  171      ASF_PAYLOAD_OFFSET_INTO_MEDIA_OBJECT_FIELD_SIZE +    \ 
  172      ASF_PAYLOAD_REPLICATED_DATA_LENGTH_FIELD_SIZE +      \ 
  173      ASF_PAYLOAD_REPLICATED_DATA_LENGTH +                 \ 
  174      ASF_PAYLOAD_LENGTH_FIELD_SIZE) 
  176 #define SINGLE_PAYLOAD_DATA_LENGTH                        \ 
  178      PACKET_HEADER_MIN_SIZE -                             \ 
  179      PAYLOAD_HEADER_SIZE_SINGLE_PAYLOAD) 
  181 #define MULTI_PAYLOAD_CONSTANT                            \ 
  183      PACKET_HEADER_MIN_SIZE -                             \ 
  185      2 * PAYLOAD_HEADER_SIZE_MULTIPLE_PAYLOADS) 
  187 #define DATA_HEADER_SIZE 50 
  198     int packet_size_left;
 
  205     uint64_t data_offset;                
 
  224 #define PREROLL_TIME 3100 
  264                       int payload_length, 
int flags)
 
  270     length = payload_length + 8;
 
  284     t  = ti * INT64_C(10000000);
 
  285     t += INT64_C(116444736000000000);
 
  295         if (pres_time <= asf->index_ptr[i].send_time)
 
  301     return send_time / 10000;
 
  349                              int64_t data_chunk_size)
 
  354     int header_size, 
n, 
extra_size, extra_size2, wav_extra_size, file_time;
 
  358     int64_t header_offset, cur_pos, hpos;
 
  371     has_title      = tags[0] || tags[1] || tags[2] || tags[3] || tags[4];
 
  437     if (metadata_count) {
 
  466             extra_size     = 18 + wav_extra_size;
 
  472             extra_size     = 0x33 + wav_extra_size;
 
  498             if (wavsize != extra_size) {
 
  550             desc = 
"Windows Media Audio V8";
 
  582     header_size = cur_pos - header_offset;
 
  586         avio_seek(pb, header_offset - 10 - 30, SEEK_SET);
 
  588         avio_seek(pb, header_offset - 2 - 30, SEEK_SET);
 
  593     header_size += 24 + 6;
 
  594     avio_seek(pb, header_offset - 14, SEEK_SET);
 
  634                       NULL, NULL, NULL, NULL);
 
  652                                     unsigned sendtime, 
unsigned duration,
 
  653                                     int nb_payloads, 
int padsize)
 
  702     int packet_hdr_size, packet_filled_size;
 
  716     av_assert0(packet_hdr_size <= asf->packet_size_left);
 
  727                       NULL, NULL, NULL, NULL);
 
  731                                int64_t presentation_time, 
int m_obj_size,
 
  732                                int m_obj_offset, 
int payload_len, 
int flags)
 
  754     avio_wl32(pb, (uint32_t) presentation_time); 
 
  763                       int m_obj_size, 
int flags)
 
  766     int m_obj_offset, payload_len, frag_len1;
 
  769     while (m_obj_offset < m_obj_size) {
 
  770         payload_len = m_obj_size - m_obj_offset;
 
  787             if (frag_len1 < payload_len &&
 
  794             if (payload_len > frag_len1)
 
  795                 payload_len = frag_len1;
 
  796             else if (payload_len == (frag_len1 - 1))
 
  797                 payload_len = frag_len1 - 2;  
 
  800                                m_obj_size, m_obj_offset, payload_len, flags);
 
  813         m_obj_offset += payload_len;
 
  825                          uint32_t packet_number, uint16_t packet_count,
 
  826                          uint64_t packet_offset)
 
  872     uint32_t packet_number;
 
  899         uint16_t packet_count = asf->
nb_packets - packet_number;
 
  900         ret = 
update_index(s, start_sec, packet_number, packet_count, offset);
 
  910                            uint16_t max, uint32_t 
count)
 
  916     avio_wl64(pb, 24 + 16 + 8 + 4 + 4 + (4 + 2) * count);
 
  921     for (i = 0; i < 
count; i++) {
 
  965     .mime_type      = 
"video/x-ms-asf",
 
  966     .extensions     = 
"asf,wmv,wma",
 
  980 #if CONFIG_ASF_STREAM_MUXER 
  982     .
name           = 
"asf_stream",
 
  984     .mime_type      = 
"video/x-ms-asf",
 
  985     .extensions     = 
"asf,wmv,wma",