Go to the documentation of this file.
   26 #include "config_components.h" 
   84 static int64_t 
add_ctts_entry(
MOVCtts** ctts_data, 
unsigned int* ctts_count, 
unsigned int* allocated_size,
 
   88                                              unsigned len, 
const char *
key)
 
   92     short current, total = 0;
 
   98         snprintf(buf, 
sizeof(buf), 
"%d", current);
 
  100         snprintf(buf, 
sizeof(buf), 
"%d/%d", current, total);
 
  108                                             unsigned len, 
const char *
key)
 
  122                                         unsigned len, 
const char *
key)
 
  131                              unsigned len, 
const char *
key)
 
  147     0x00C4,0x00C5,0x00C7,0x00C9,0x00D1,0x00D6,0x00DC,0x00E1,
 
  148     0x00E0,0x00E2,0x00E4,0x00E3,0x00E5,0x00E7,0x00E9,0x00E8,
 
  149     0x00EA,0x00EB,0x00ED,0x00EC,0x00EE,0x00EF,0x00F1,0x00F3,
 
  150     0x00F2,0x00F4,0x00F6,0x00F5,0x00FA,0x00F9,0x00FB,0x00FC,
 
  151     0x2020,0x00B0,0x00A2,0x00A3,0x00A7,0x2022,0x00B6,0x00DF,
 
  152     0x00AE,0x00A9,0x2122,0x00B4,0x00A8,0x2260,0x00C6,0x00D8,
 
  153     0x221E,0x00B1,0x2264,0x2265,0x00A5,0x00B5,0x2202,0x2211,
 
  154     0x220F,0x03C0,0x222B,0x00AA,0x00BA,0x03A9,0x00E6,0x00F8,
 
  155     0x00BF,0x00A1,0x00AC,0x221A,0x0192,0x2248,0x2206,0x00AB,
 
  156     0x00BB,0x2026,0x00A0,0x00C0,0x00C3,0x00D5,0x0152,0x0153,
 
  157     0x2013,0x2014,0x201C,0x201D,0x2018,0x2019,0x00F7,0x25CA,
 
  158     0x00FF,0x0178,0x2044,0x20AC,0x2039,0x203A,0xFB01,0xFB02,
 
  159     0x2021,0x00B7,0x201A,0x201E,0x2030,0x00C2,0x00CA,0x00C1,
 
  160     0x00CB,0x00C8,0x00CD,0x00CE,0x00CF,0x00CC,0x00D3,0x00D4,
 
  161     0xF8FF,0x00D2,0x00DA,0x00DB,0x00D9,0x0131,0x02C6,0x02DC,
 
  162     0x00AF,0x02D8,0x02D9,0x02DA,0x00B8,0x02DD,0x02DB,0x02C7,
 
  166                                char *dst, 
int dstlen)
 
  169     char *end = dst+dstlen-1;
 
  172     for (
i = 0; 
i < 
len; 
i++) {
 
  212     st = 
c->fc->streams[
c->fc->nb_streams - 1];
 
  231     char buf[200], place[100];
 
  232     uint16_t langcode = 0;
 
  233     double longitude, latitude, altitude;
 
  234     const char *
key = 
"location";
 
  236     if (
len < 4 + 2 + 1 + 1 + 4 + 4 + 4) {
 
  256                "loci too short (%u bytes left, need at least %d)\n", 
len, 12);
 
  264     snprintf(buf, 
sizeof(buf), 
"%+08.4f%+09.4f",  latitude, longitude);
 
  284     if (
c->ignore_chapters)
 
  288     if (n_hmmt > 
len / 4)
 
  305     uint16_t langcode = 0;
 
  306     uint32_t data_type = 0, str_size, str_size_alloc;
 
  312     case MKTAG( 
'@',
'P',
'R',
'M'): 
key = 
"premiere_version"; raw = 1; 
break;
 
  313     case MKTAG( 
'@',
'P',
'R',
'Q'): 
key = 
"quicktime_version"; raw = 1; 
break;
 
  314     case MKTAG( 
'X',
'M',
'P',
'_'):
 
  315         if (
c->export_xmp) { 
key = 
"xmp"; raw = 1; } 
break;
 
  316     case MKTAG( 
'a',
'A',
'R',
'T'): 
key = 
"album_artist";    
break;
 
  317     case MKTAG( 
'a',
'k',
'I',
'D'): 
key = 
"account_type";
 
  319     case MKTAG( 
'a',
'p',
'I',
'D'): 
key = 
"account_id"; 
break;
 
  320     case MKTAG( 
'c',
'a',
't',
'g'): 
key = 
"category"; 
break;
 
  321     case MKTAG( 
'c',
'p',
'i',
'l'): 
key = 
"compilation";
 
  323     case MKTAG( 
'c',
'p',
'r',
't'): 
key = 
"copyright"; 
break;
 
  324     case MKTAG( 
'd',
'e',
's',
'c'): 
key = 
"description"; 
break;
 
  325     case MKTAG( 
'd',
'i',
's',
'k'): 
key = 
"disc";
 
  327     case MKTAG( 
'e',
'g',
'i',
'd'): 
key = 
"episode_uid";
 
  329     case MKTAG( 
'F',
'I',
'R',
'M'): 
key = 
"firmware"; raw = 1; 
break;
 
  330     case MKTAG( 
'g',
'n',
'r',
'e'): 
key = 
"genre";
 
  332     case MKTAG( 
'h',
'd',
'v',
'd'): 
key = 
"hd_video";
 
  334     case MKTAG( 
'H',
'M',
'M',
'T'):
 
  336     case MKTAG( 
'k',
'e',
'y',
'w'): 
key = 
"keywords";  
break;
 
  337     case MKTAG( 
'l',
'd',
'e',
's'): 
key = 
"synopsis";  
break;
 
  338     case MKTAG( 
'l',
'o',
'c',
'i'):
 
  340     case MKTAG( 
'm',
'a',
'n',
'u'): 
key = 
"make"; 
break;
 
  341     case MKTAG( 
'm',
'o',
'd',
'l'): 
key = 
"model"; 
break;
 
  342     case MKTAG( 
'p',
'c',
's',
't'): 
key = 
"podcast";
 
  344     case MKTAG( 
'p',
'g',
'a',
'p'): 
key = 
"gapless_playback";
 
  346     case MKTAG( 
'p',
'u',
'r',
'd'): 
key = 
"purchase_date"; 
break;
 
  347     case MKTAG( 
'r',
't',
'n',
'g'): 
key = 
"rating";
 
  349     case MKTAG( 
's',
'o',
'a',
'a'): 
key = 
"sort_album_artist"; 
break;
 
  350     case MKTAG( 
's',
'o',
'a',
'l'): 
key = 
"sort_album";   
break;
 
  351     case MKTAG( 
's',
'o',
'a',
'r'): 
key = 
"sort_artist";  
break;
 
  352     case MKTAG( 
's',
'o',
'c',
'o'): 
key = 
"sort_composer"; 
break;
 
  353     case MKTAG( 
's',
'o',
'n',
'm'): 
key = 
"sort_name";    
break;
 
  354     case MKTAG( 
's',
'o',
's',
'n'): 
key = 
"sort_show";    
break;
 
  355     case MKTAG( 
's',
't',
'i',
'k'): 
key = 
"media_type";
 
  357     case MKTAG( 
't',
'r',
'k',
'n'): 
key = 
"track";
 
  359     case MKTAG( 
't',
'v',
'e',
'n'): 
key = 
"episode_id"; 
break;
 
  360     case MKTAG( 
't',
'v',
'e',
's'): 
key = 
"episode_sort";
 
  362     case MKTAG( 
't',
'v',
'n',
'n'): 
key = 
"network";   
break;
 
  363     case MKTAG( 
't',
'v',
's',
'h'): 
key = 
"show";      
break;
 
  364     case MKTAG( 
't',
'v',
's',
'n'): 
key = 
"season_number";
 
  366     case MKTAG(0xa9,
'A',
'R',
'T'): 
key = 
"artist";    
break;
 
  367     case MKTAG(0xa9,
'P',
'R',
'D'): 
key = 
"producer";  
break;
 
  368     case MKTAG(0xa9,
'a',
'l',
'b'): 
key = 
"album";     
break;
 
  369     case MKTAG(0xa9,
'a',
'u',
't'): 
key = 
"artist";    
break;
 
  370     case MKTAG(0xa9,
'c',
'h',
'p'): 
key = 
"chapter";   
break;
 
  371     case MKTAG(0xa9,
'c',
'm',
't'): 
key = 
"comment";   
break;
 
  372     case MKTAG(0xa9,
'c',
'o',
'm'): 
key = 
"composer";  
break;
 
  373     case MKTAG(0xa9,
'c',
'p',
'y'): 
key = 
"copyright"; 
break;
 
  374     case MKTAG(0xa9,
'd',
'a',
'y'): 
key = 
"date";      
break;
 
  375     case MKTAG(0xa9,
'd',
'i',
'r'): 
key = 
"director";  
break;
 
  376     case MKTAG(0xa9,
'd',
'i',
's'): 
key = 
"disclaimer"; 
break;
 
  377     case MKTAG(0xa9,
'e',
'd',
'1'): 
key = 
"edit_date"; 
break;
 
  378     case MKTAG(0xa9,
'e',
'n',
'c'): 
key = 
"encoder";   
break;
 
  379     case MKTAG(0xa9,
'f',
'm',
't'): 
key = 
"original_format"; 
break;
 
  380     case MKTAG(0xa9,
'g',
'e',
'n'): 
key = 
"genre";     
break;
 
  381     case MKTAG(0xa9,
'g',
'r',
'p'): 
key = 
"grouping";  
break;
 
  382     case MKTAG(0xa9,
'h',
's',
't'): 
key = 
"host_computer"; 
break;
 
  383     case MKTAG(0xa9,
'i',
'n',
'f'): 
key = 
"comment";   
break;
 
  384     case MKTAG(0xa9,
'l',
'y',
'r'): 
key = 
"lyrics";    
break;
 
  385     case MKTAG(0xa9,
'm',
'a',
'k'): 
key = 
"make";      
break;
 
  386     case MKTAG(0xa9,
'm',
'o',
'd'): 
key = 
"model";     
break;
 
  387     case MKTAG(0xa9,
'n',
'a',
'm'): 
key = 
"title";     
break;
 
  388     case MKTAG(0xa9,
'o',
'p',
'e'): 
key = 
"original_artist"; 
break;
 
  389     case MKTAG(0xa9,
'p',
'r',
'd'): 
key = 
"producer";  
break;
 
  390     case MKTAG(0xa9,
'p',
'r',
'f'): 
key = 
"performers"; 
break;
 
  391     case MKTAG(0xa9,
'r',
'e',
'q'): 
key = 
"playback_requirements"; 
break;
 
  392     case MKTAG(0xa9,
's',
'r',
'c'): 
key = 
"original_source"; 
break;
 
  393     case MKTAG(0xa9,
's',
't',
'3'): 
key = 
"subtitle";  
break;
 
  394     case MKTAG(0xa9,
's',
'w',
'r'): 
key = 
"encoder";   
break;
 
  395     case MKTAG(0xa9,
't',
'o',
'o'): 
key = 
"encoder";   
break;
 
  396     case MKTAG(0xa9,
't',
'r',
'k'): 
key = 
"track";     
break;
 
  397     case MKTAG(0xa9,
'u',
'r',
'l'): 
key = 
"URL";       
break;
 
  398     case MKTAG(0xa9,
'w',
'r',
'n'): 
key = 
"warning";   
break;
 
  399     case MKTAG(0xa9,
'w',
'r',
't'): 
key = 
"composer";  
break;
 
  400     case MKTAG(0xa9,
'x',
'y',
'z'): 
key = 
"location";  
break;
 
  403     if (
c->itunes_metadata && atom.
size > 8) {
 
  406         if (
tag == 
MKTAG(
'd',
'a',
't',
'a') && data_size <= atom.size && data_size >= 16) {
 
  409             str_size = data_size - 16;
 
  412             if (!
key && 
c->found_hdlr_mdta && 
c->meta_keys) {
 
  414                 if (index < c->meta_keys_count && 
index > 0) {
 
  416                 } 
else if (atom.
type != 
MKTAG(
'c', 
'o', 
'v', 
'r')) {
 
  418                            "The index of 'data' is out of range: %"PRId32
" < 1 or >= %d.\n",
 
  419                            index, 
c->meta_keys_count);
 
  422             if (atom.
type == 
MKTAG(
'c', 
'o', 
'v', 
'r') ||
 
  423                 (
key && !strcmp(
key, 
"com.apple.quicktime.artwork"))) {
 
  429                 atom.
size -= str_size;
 
  435     } 
else if (atom.
size > 4 && 
key && !
c->itunes_metadata && !raw) {
 
  437         if (str_size > atom.
size) {
 
  447         str_size = atom.
size;
 
  449     if (
c->export_all && !
key) {
 
  455     if (atom.
size < 0 || str_size >= INT_MAX/2)
 
  460     num = (data_type >= 21 && data_type <= 23);
 
  461     str_size_alloc = (num ? 512 : (raw ? str_size : str_size * 2)) + 1;
 
  469         if (!raw && (data_type == 3 || (data_type == 0 && (langcode < 0x400 || langcode == 0x7fff)))) { 
 
  471         } 
else if (data_type == 21) { 
 
  475             else if (str_size == 2)
 
  477             else if (str_size == 3)
 
  479             else if (str_size == 4)
 
  481             if (
snprintf(str, str_size_alloc, 
"%d", 
val) >= str_size_alloc) {
 
  483                        "Failed to store the number (%d) in string.\n", 
val);
 
  487         } 
else if (data_type == 22) { 
 
  488             unsigned int val = 0;
 
  491             else if (str_size == 2)
 
  493             else if (str_size == 3)
 
  495             else if (str_size == 4)
 
  497             if (
snprintf(str, str_size_alloc, 
"%u", 
val) >= str_size_alloc) {
 
  499                        "Failed to store the number (%u) in string.\n", 
val);
 
  503         } 
else if (data_type == 23 && str_size >= 4) {  
 
  505             if (
snprintf(str, str_size_alloc, 
"%f", 
val) >= str_size_alloc) {
 
  507                        "Failed to store the float32 number (%f) in string.\n", 
val);
 
  511         } 
else if (data_type > 1 && data_type != 4) {
 
  533         if (!strcmp(
key, 
"encoder")) {
 
  534             int major, minor, micro;
 
  535             if (sscanf(str, 
"HandBrake %d.%d.%d", &major, &minor, µ) == 3) {
 
  536                 c->handbrake_version = 1000000*major + 1000*minor + micro;
 
  548     int i, nb_chapters, str_len, 
version;
 
  552     if (
c->ignore_chapters)
 
  555     if ((atom.
size -= 5) < 0)
 
  564     for (
i = 0; 
i < nb_chapters; 
i++) {
 
  571         if ((atom.
size -= 9+str_len) < 0)
 
  583 #define MIN_DATA_ENTRY_BOX_SIZE 12 
  590     if (
c->fc->nb_streams < 1)
 
  592     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
  599         entries >= UINT_MAX / 
sizeof(*sc->
drefs))
 
  614     for (
i = 0; 
i < entries; 
i++) {
 
  619         if (
size < 12 || next < 0 || next > INT64_MAX - 
size)
 
  629             uint16_t volume_len, 
len;
 
  636             volume_len = 
FFMIN(volume_len, 27);
 
  640             dref->
volume[volume_len] = 0;
 
  682                     if (
len > volume_len && !strncmp(dref->
path, dref->
volume, volume_len)) {
 
  688                     for (j = 
len - 1; j >= 0; j--) {
 
  689                         if (dref->
path[j] == 0)
 
  694                     for (j = 0; j < 
len; j++)
 
  695                         if (dref->
path[j] == 
':' || dref->
path[j] == 0)
 
  698                 } 
else if (
type == 0) { 
 
  710                     for (j = 0; j < 
len; j++)
 
  711                         if (dref->
dir[j] == 
':')
 
  747     if (
c->trak_index < 0) {  
 
  749             c->found_hdlr_mdta = 1;
 
  754     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
  769     title_size = atom.
size - 24;
 
  770     if (title_size > 0) {
 
  771         if (title_size > 
FFMIN(INT_MAX, SIZE_MAX-1))
 
  782         title_str[title_size] = 0;
 
  784             int off = (!
c->isom && title_str[0] == title_size - 1);
 
  804     int ac3info, acmod, lfeon, bsmod;
 
  807     if (
c->fc->nb_streams < 1)
 
  809     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
  820     bsmod = (ac3info >> 14) & 0x7;
 
  821     acmod = (ac3info >> 11) & 0x7;
 
  822     lfeon = (ac3info >> 10) & 0x1;
 
  842     int eac3info, acmod, lfeon, bsmod;
 
  845     if (
c->fc->nb_streams < 1)
 
  847     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
  863     bsmod = (eac3info >> 12) & 0x1f;
 
  864     acmod = (eac3info >>  9) & 0x7;
 
  865     lfeon = (eac3info >>  8) & 0x1;
 
  885     uint32_t frame_duration_code = 0;
 
  886     uint32_t channel_layout_code = 0;
 
  895     if (
c->fc->nb_streams < 1) {
 
  898     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
  908     frame_duration_code = 
get_bits(&gb, 2);
 
  910     channel_layout_code = 
get_bits(&gb, 16);
 
  913             (frame_duration_code == 0) ? 512 :
 
  914             (frame_duration_code == 1) ? 1024 :
 
  915             (frame_duration_code == 2) ? 2048 :
 
  916             (frame_duration_code == 3) ? 4096 : 0;
 
  918     if (channel_layout_code > 0xff) {
 
  937     if (
c->fc->nb_streams < 1)
 
  939     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
  955     int stream_structure;
 
  960     if (
c->fc->nb_streams < 1)
 
  962     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
  968                "Unsupported 'chnl' box with version %d, flags: %#x",
 
  973     stream_structure = 
avio_r8(pb);
 
  976     if (stream_structure & 1) {
 
  989                 if (speaker_pos == 126) { 
 
 1004                         "get channel layout from speaker positions failed, %s\n",
 
 1009             uint64_t omitted_channel_map = 
avio_rb64(pb);
 
 1011             if (omitted_channel_map) {
 
 1013                                       omitted_channel_map);
 
 1021     if (stream_structure & 2) {
 
 1039     if (
c->fc->nb_streams < 1)
 
 1041     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 1056     if (
c->fc->nb_streams < 1)
 
 1058     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 1076 #define DRM_BLOB_SIZE 56 
 1080     uint8_t intermediate_key[20];
 
 1081     uint8_t intermediate_iv[20];
 
 1084     uint8_t file_checksum[20];
 
 1085     uint8_t calculated_checksum[20];
 
 1086     char checksum_string[2 * 
sizeof(file_checksum) + 1];
 
 1090     uint8_t *activation_bytes = 
c->activation_bytes;
 
 1091     uint8_t *fixed_key = 
c->audible_fixed_key;
 
 1100     if (!
c->aes_decrypt) {
 
 1112     ff_data_to_hex(checksum_string, file_checksum, 
sizeof(file_checksum), 1);
 
 1116     if (!activation_bytes) {
 
 1121     if (
c->activation_bytes_size != 4) {
 
 1128     if (
c->audible_fixed_key_size != 16) {
 
 1148     if (memcmp(calculated_checksum, file_checksum, 20)) { 
 
 1155     for (
i = 0; 
i < 4; 
i++) {
 
 1157         if (activation_bytes[
i] != 
output[3 - 
i]) { 
 
 1163     memcpy(
c->file_key, 
output + 8, 16);
 
 1179     if (
c->audible_key_size != 16) {
 
 1184     if (
c->audible_iv_size != 16) {
 
 1190     if (!
c->aes_decrypt) {
 
 1194     memcpy(
c->file_key, 
c->audible_key, 16);
 
 1195     memcpy(
c->file_iv, 
c->audible_iv, 16);
 
 1205     unsigned char iv[16];
 
 1207     memcpy(iv, 
c->file_iv, 16); 
 
 1219     int comp_brand_size;
 
 1220     char* comp_brands_str;
 
 1221     uint8_t 
type[5] = {0};
 
 1225     if (
c->fc->nb_streams) {
 
 1232     if (strcmp(
type, 
"qt  "))
 
 1236     c->is_still_picture_avif = !strncmp(
type, 
"avif", 4);
 
 1240     comp_brand_size = atom.
size - 8;
 
 1241     if (comp_brand_size < 0 || comp_brand_size == INT_MAX)
 
 1243     comp_brands_str = 
av_malloc(comp_brand_size + 1); 
 
 1244     if (!comp_brands_str)
 
 1252     comp_brands_str[comp_brand_size] = 0;
 
 1257     if (!strcmp(
type, 
"aaxc")) {
 
 1269     if (
c->found_moov) {
 
 1291     if (index < 0 || index >= frag_index->
nb_items)
 
 1307     if (frag_index->
current < 0 ||
 
 1326     if (frag_index->
current < 0 ||
 
 1341     int64_t moof_offset;
 
 1354         if (moof_offset >= 
offset)
 
 1356         if (moof_offset <= 
offset)
 
 1394         for (j = 0; j < 
s->nb_streams; j++)
 
 1395             if (
s->streams[j]->id == frag_stream_info->
id)
 
 1396                 frag_stream = 
s->streams[j];
 
 1418         m0 = m = (
a + 
b) >> 1;
 
 1424         if (m < 
b && frag_time <= timestamp)
 
 1441     if (index < c->frag_index.nb_items &&
 
 1448                            &
c->frag_index.allocated_size,
 
 1449                            (
c->frag_index.nb_items + 1) *
 
 1450                            sizeof(*
c->frag_index.item));
 
 1453     c->frag_index.item = item;
 
 1457     if (!frag_stream_info)
 
 1460     for (
i = 0; 
i < 
c->fc->nb_streams; 
i++) {
 
 1462         if (
c->fc->streams[
i]->id < 0) {
 
 1467         frag_stream_info[
i].
id = 
c->fc->streams[
i]->id;
 
 1478     if (index < c->frag_index.nb_items)
 
 1479         memmove(
c->frag_index.item + 
index + 1, 
c->frag_index.item + 
index,
 
 1480                 (
c->frag_index.nb_items - 
index) * 
sizeof(*
c->frag_index.item));
 
 1482     item = &
c->frag_index.item[
index];
 
 1488     c->frag_index.nb_items++;
 
 1494                                    int id, 
int entries)
 
 1503         if (frag_stream_info && frag_stream_info->
index_entry >= 0)
 
 1511     c->fragment.found_tfhd = 0;
 
 1513     if (!
c->has_looked_for_mfra && 
c->use_mfra_for > 0) {
 
 1514         c->has_looked_for_mfra = 1;
 
 1521                         "read the mfra (may be a live ismv)\n");
 
 1525                     "seekable, can not look for mfra\n");
 
 1528     c->fragment.moof_offset = 
c->fragment.implicit_offset = 
avio_tell(pb) - 8;
 
 1547         if (time > 0 && time < 2082844800) {
 
 1555         if ((int64_t)(time * 1000000ULL) / 1000000 != time) {
 
 1572     if (
c->fc->nb_streams < 1)
 
 1574     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 1618     if (
c->time_scale <= 0) {
 
 1632     for (
i = 0; 
i < 3; 
i++) {
 
 1653     if (
fc->nb_streams < 1)
 
 1655     st = 
fc->streams[
fc->nb_streams-1];
 
 1680     int little_endian = 
avio_rb16(pb) & 0xFF;
 
 1682     if (little_endian == 1)
 
 1691     int pcm_sample_size;
 
 1696     if (atom.
size < 6) {
 
 1706                "Unsupported 'pcmC' box with version %d, flags: %x",
 
 1712     pcm_sample_size = 
avio_r8(pb);
 
 1714     if (
fc->nb_streams < 1)
 
 1717     st = 
fc->streams[
fc->nb_streams - 1];
 
 1721         switch (pcm_sample_size) {
 
 1735         switch (pcm_sample_size) {
 
 1757     if (format_flags & 1) 
 
 1766     char color_parameter_type[5] = { 0 };
 
 1770     if (
c->fc->nb_streams < 1)
 
 1772     st = 
c->fc->streams[
c->fc->nb_streams - 1];
 
 1777     if (strncmp(color_parameter_type, 
"nclx", 4) &&
 
 1778         strncmp(color_parameter_type, 
"nclc", 4) &&
 
 1779         strncmp(color_parameter_type, 
"prof", 4)) {
 
 1781                color_parameter_type);
 
 1785     if (!strncmp(color_parameter_type, 
"prof", 4)) {
 
 1801                "%s: pri %d trc %d matrix %d",
 
 1804         if (!strncmp(color_parameter_type, 
"nclx", 4)) {
 
 1831     unsigned mov_field_order;
 
 1834     if (
c->fc->nb_streams < 1) 
 
 1836     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 1840     if ((mov_field_order & 0xFF00) == 0x0100)
 
 1842     else if ((mov_field_order & 0xFF00) == 0x0200) {
 
 1843         switch (mov_field_order & 0xFF) {
 
 1866     if (
size > INT_MAX || (uint64_t)atom.
size > INT_MAX)
 
 1889     } 
else if (err < atom.
size) {
 
 1903     uint64_t original_size;
 
 1906     if (
c->fc->nb_streams < 1) 
 
 1908     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 1957     if (!
ret && 
c->fc->nb_streams >= 1) {
 
 1969     if (
c->fc->nb_streams >= 1) {
 
 1970         AVStream *
const  st = 
c->fc->streams[
c->fc->nb_streams - 1];
 
 1981             if (
cid == 0xd4d || 
cid == 0xd4e)
 
 1992             if (num <= 0 || den <= 0)
 
 1996                 if (den >= INT_MAX / 2)
 
 2014     uint64_t original_size;
 
 2015     if (
c->fc->nb_streams >= 1) {
 
 2019         if (atom.
size == 16) {
 
 2024                 if (length == atom.
size) {
 
 2025                     const uint8_t range_value = par->
extradata[original_size + 19];
 
 2026                     switch (range_value) {
 
 2063     if (
c->fc->nb_streams < 1)
 
 2065     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 2067     if ((uint64_t)atom.
size > (1<<30))
 
 2077     } 
else if (atom.
size > 8) { 
 
 2091 #define ALAC_EXTRADATA_SIZE 36 
 2120     if (
c->fc->nb_streams < 1)
 
 2122     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 2124     if ((uint64_t)atom.
size > (1<<30))
 
 2127     if (atom.
size >= 10) {
 
 2159     uint8_t profile_level;
 
 2162     if (
c->fc->nb_streams < 1)
 
 2164     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 2166     if (atom.
size >= (1<<28) || atom.
size < 7)
 
 2170     if ((profile_level & 0xf0) != 0xc0)
 
 2191     if (
c->fc->nb_streams < 1)
 
 2193     if (atom.
size <= 40)
 
 2195     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 2197     if ((uint64_t)atom.
size > (1<<30))
 
 2212     unsigned int i, entries;
 
 2214     if (
c->trak_index < 0) {
 
 2218     if (
c->fc->nb_streams < 1)
 
 2220     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 2242     if      (atom.
type == 
MKTAG(
's',
't',
'c',
'o'))
 
 2245     else if (atom.
type == 
MKTAG(
'c',
'o',
'6',
'4'))
 
 2271         ((
format & 0xFFFF) == 
'm' + (
's' << 8) ||
 
 2272          (
format & 0xFFFF) == 
'T' + (
'S' << 8)))
 
 2309     uint8_t codec_name[32] = { 0 };
 
 2344     if (!strncmp(codec_name, 
"Planar Y'CbCr 8-bit 4:2:0", 25)) {
 
 2351         !strncmp(codec_name, 
"Sorenson H263", 13))
 
 2367     int bits_per_sample, 
flags;
 
 2392         (compatible_brands && strstr(compatible_brands->
value, 
"qt  ")) ||
 
 2502     y  = (ycbcr >> 16) & 0xFF;
 
 2503     cr = (ycbcr >> 8)  & 0xFF;
 
 2510     return (
r << 16) | (
g << 8) | 
b;
 
 2515     char buf[256] = {0};
 
 2523         snprintf(buf, 
sizeof(buf), 
"size: %dx%d\n",
 
 2527     for (
i = 0; 
i < 16; 
i++) {
 
 2531         av_strlcatf(buf, 
sizeof(buf), 
"%06"PRIx32
"%s", rgba, 
i != 15 ? 
", " : 
"");
 
 2534     if (
av_strlcat(buf, 
"\n", 
sizeof(buf)) >= 
sizeof(buf))
 
 2571                     if (str_size > 0 && 
size >= (
int)str_size + 30 &&
 
 2573                         char *reel_name = 
av_malloc(str_size + 1);
 
 2577                         reel_name[str_size] = 0; 
 
 2602 #if CONFIG_DV_DEMUXER 
 2692                                   int codec_tag, 
int format,
 
 2704                                  : codec_tag != 
MKTAG(
'j',
'p',
'e',
'g')))) {
 
 2721     int pseudo_stream_id;
 
 2724     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 2727     for (pseudo_stream_id = 0;
 
 2729          pseudo_stream_id++) {
 
 2732         int ret, dref_id = 1;
 
 2742         } 
else if (
size <= 7) {
 
 2744                    "invalid size %"PRId64
" in stsd\n", 
size);
 
 2761                "size=%"PRId64
" 4CC=%s codec_type=%d\n", 
size,
 
 2791         } 
else if (
a.size > 0)
 
 2820     if (
c->fc->nb_streams < 1)
 
 2822     st = 
c->fc->streams[
c->fc->nb_streams - 1];
 
 2830     if (entries <= 0 || entries > atom.
size / 8 || entries > 1024) {
 
 2837                "Duplicate stsd found in this track.\n");
 
 2883     unsigned int i, entries;
 
 2885     if (
c->fc->nb_streams < 1)
 
 2887     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 2894     if ((uint64_t)entries * 12 + 4 > atom.
size)
 
 2919         int64_t first_min = 
i + 1;
 
 2979     unsigned i, entries;
 
 2981     if (
c->fc->nb_streams < 1)
 
 2983     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 3016     unsigned int i, entries;
 
 3018     if (
c->fc->nb_streams < 1)
 
 3020     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 3039     if (entries >= UINT_MAX / 
sizeof(
int))
 
 3065     unsigned int i, entries, sample_size, field_size, num_bytes;
 
 3070     if (
c->fc->nb_streams < 1)
 
 3072     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 3078     if (atom.
type == 
MKTAG(
's',
't',
's',
'z')) {
 
 3097     if (field_size != 4 && field_size != 8 && field_size != 16 && field_size != 32) {
 
 3114     num_bytes = (entries*field_size+4)>>3;
 
 3132     for (
i = 0; 
i < entries; 
i++) {
 
 3153     unsigned int i, entries, alloc_size = 0;
 
 3155     int64_t total_sample_count = 0;
 
 3156     int64_t current_dts = 0;
 
 3157     int64_t corrected_dts = 0;
 
 3159     if (
c->fc->nb_streams < 1)
 
 3161     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 3169             c->fc->nb_streams-1, entries);
 
 3175     if (entries >= INT_MAX / 
sizeof(*sc->
stts_data))
 
 3179         unsigned int sample_duration;
 
 3180         unsigned int sample_count;
 
 3181         unsigned int min_entries = 
FFMIN(
FFMAX(
i + 1, 1024 * 1024), entries);
 
 3199                 sample_count, sample_duration);
 
 3204         if (sample_duration > 
c->max_stts_delta) {
 
 3207             av_log(
c->fc, 
AV_LOG_WARNING, 
"Too large sample offset %u in stts entry %u with count %u in st:%d. Clipping to 1.\n",
 
 3208                    sample_duration, 
i, sample_count, st->
index);
 
 3210             corrected_dts += (delta_magnitude < 0 ? (int64_t)delta_magnitude : 1) * sample_count;
 
 3212             corrected_dts += sample_duration * sample_count;
 
 3217         if (current_dts > corrected_dts) {
 
 3218             int64_t drift = (current_dts - corrected_dts)/
FFMAX(sample_count, 1);
 
 3220             current_dts -= correction * sample_count;
 
 3231         duration <= INT64_MAX - sc->duration_for_fps &&
 
 3232         total_sample_count <= INT_MAX - sc->nb_frames_for_fps) {
 
 3254                "All samples in data stream index:id [%d:%d] have zero " 
 3255                "duration, stream set to be discarded by default. Override " 
 3256                "using AVStream->discard or -discard for ffmpeg command.\n",
 
 3270     if (
c->fc->nb_streams < 1)
 
 3272     st = 
c->fc->streams[
c->fc->nb_streams - 1];
 
 3277     entries = atom.
size - 4;
 
 3280            c->fc->nb_streams - 1, entries);
 
 3313     unsigned int i, entries, ctts_count = 0;
 
 3315     if (
c->fc->nb_streams < 1)
 
 3317     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 3328     if (entries >= UINT_MAX / 
sizeof(*sc->
ctts_data))
 
 3341                    "ignoring CTTS entry with count=%d duration=%d\n",
 
 3380     uint32_t grouping_type;
 
 3381     uint32_t default_length;
 
 3382     av_unused uint32_t default_group_description_index;
 
 3383     uint32_t entry_count;
 
 3385     if (
c->fc->nb_streams < 1)
 
 3387     st = 
c->fc->streams[
c->fc->nb_streams - 1];
 
 3398     if (grouping_type != 
MKTAG(
's',
'y',
'n',
'c'))
 
 3412         uint32_t description_length = default_length;
 
 3413         if (
version >= 1 && default_length == 0)
 
 3415         if (grouping_type == 
MKTAG(
's',
'y',
'n',
'c')) {
 
 3416             const uint8_t nal_unit_type = 
avio_r8(pb) & 0x3f;
 
 3418             description_length -= 1;
 
 3435     unsigned int i, entries;
 
 3437     uint32_t grouping_type;
 
 3441     if (
c->fc->nb_streams < 1)
 
 3443     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 3450     if (grouping_type == 
MKTAG(
'r',
'a',
'p',
' ')) {
 
 3453     } 
else if (grouping_type == 
MKTAG(
's',
'y',
'n',
'c')) {
 
 3494                                unsigned int edit_list_index,
 
 3495                                int64_t *edit_list_media_time,
 
 3496                                int64_t *edit_list_duration,
 
 3497                                int64_t global_timescale)
 
 3502     *edit_list_media_time = msc->
elst_data[edit_list_index].
time;
 
 3506     if (global_timescale == 0) {
 
 3539                                    int64_t timestamp_pts,
 
 3542                                    int64_t* ctts_index,
 
 3543                                    int64_t* ctts_sample)
 
 3550     int64_t index_ctts_count;
 
 3578     if (ctts_data && *
index >= 0) {
 
 3584         for (index_ctts_count = 0; index_ctts_count < *
index; index_ctts_count++) {
 
 3585             if (*ctts_index < ctts_count) {
 
 3587                 if (ctts_data[*ctts_index].
count == *ctts_sample) {
 
 3594         while (*
index >= 0 && (*ctts_index) >= 0 && (*ctts_index) < ctts_count) {
 
 3598             if ((e_old[*
index].timestamp + ctts_data[*ctts_index].
duration) <= timestamp_pts &&
 
 3604             if (*ctts_sample == 0) {
 
 3606                 if (*ctts_index >= 0)
 
 3607                   *ctts_sample = ctts_data[*ctts_index].
count - 1;
 
 3617     return *
index >= 0 ? 0 : -1;
 
 3641     const size_t requested_size =
 
 3658     ie= &entries[
index];
 
 3673                                        int64_t* frame_duration_buffer,
 
 3674                                        int frame_duration_buffer_size) {
 
 3677     av_assert0(end_index >= 0 && end_index <= sti->nb_index_entries);
 
 3678     for (
i = 0; 
i < frame_duration_buffer_size; 
i++) {
 
 3679         end_ts -= frame_duration_buffer[frame_duration_buffer_size - 1 - 
i];
 
 3692     const size_t min_size_needed = (*ctts_count + 1) * 
sizeof(
MOVCtts);
 
 3693     const size_t requested_size =
 
 3694         min_size_needed > *allocated_size ?
 
 3695         FFMAX(min_size_needed, 2 * (*allocated_size)) :
 
 3698     if ((
unsigned)(*ctts_count) >= UINT_MAX / 
sizeof(
MOVCtts) - 1)
 
 3701     ctts_buf_new = 
av_fast_realloc(*ctts_data, allocated_size, requested_size);
 
 3706     *ctts_data = ctts_buf_new;
 
 3711     *ctts_count = (*ctts_count) + 1;
 
 3715 #define MAX_REORDER_DELAY 16 
 3721     int ctts_sample = 0;
 
 3724     int j, 
r, num_swaps;
 
 3727         pts_buf[j] = INT64_MIN;
 
 3735             buf_start = (buf_start + 1);
 
 3748             while (j != buf_start) {
 
 3751                 if (pts_buf[j] < pts_buf[
r]) {
 
 3752                     FFSWAP(int64_t, pts_buf[j], pts_buf[
r]);
 
 3810         if (range_size > current_sample) {
 
 3814         current_sample -= range_size;
 
 3833     int64_t ctts_index_old = 0;
 
 3834     int64_t ctts_sample_old = 0;
 
 3836     int64_t edit_list_media_time = 0;
 
 3837     int64_t edit_list_duration = 0;
 
 3838     int64_t frame_duration = 0;
 
 3839     int64_t edit_list_dts_counter = 0;
 
 3840     int64_t edit_list_dts_entry_end = 0;
 
 3841     int64_t edit_list_start_ctts_sample = 0;
 
 3843     int64_t curr_ctts = 0;
 
 3844     int64_t empty_edits_sum_duration = 0;
 
 3845     int64_t edit_list_index = 0;
 
 3848     int64_t start_dts = 0;
 
 3849     int64_t edit_list_start_encountered = 0;
 
 3850     int64_t search_timestamp = 0;
 
 3851     int64_t* frame_duration_buffer = 
NULL;
 
 3852     int num_discarded_begin = 0;
 
 3853     int first_non_zero_audio_edit = -1;
 
 3854     int packet_skip_samples = 0;
 
 3856     int found_keyframe_after_edit = 0;
 
 3857     int found_non_empty_edit = 0;
 
 3890         edit_list_dts_entry_end -= msc->
dts_shift;
 
 3894     start_dts = edit_list_dts_entry_end;
 
 3898         av_log(mov->
fc, 
AV_LOG_DEBUG, 
"Processing st: %d, edit list %"PRId64
" - media time: %"PRId64
", duration: %"PRId64
"\n",
 
 3899                st->
index, edit_list_index, edit_list_media_time, edit_list_duration);
 
 3901         edit_list_dts_counter = edit_list_dts_entry_end;
 
 3902         edit_list_dts_entry_end += edit_list_duration;
 
 3903         num_discarded_begin = 0;
 
 3904         if (!found_non_empty_edit && edit_list_media_time == -1) {
 
 3905             empty_edits_sum_duration += edit_list_duration;
 
 3908         found_non_empty_edit = 1;
 
 3913             if (first_non_zero_audio_edit < 0) {
 
 3914                 first_non_zero_audio_edit = 1;
 
 3916                 first_non_zero_audio_edit = 0;
 
 3919             if (first_non_zero_audio_edit > 0)
 
 3927         search_timestamp = edit_list_media_time;
 
 3936                                     &
index, &ctts_index_old, &ctts_sample_old) < 0) {
 
 3938                    "st: %d edit list: %"PRId64
" Missing key frame while searching for timestamp: %"PRId64
"\n",
 
 3939                    st->
index, edit_list_index, search_timestamp);
 
 3941                                         &
index, &ctts_index_old, &ctts_sample_old) < 0) {
 
 3943                        "st: %d edit list %"PRId64
" Cannot find an index entry before timestamp: %"PRId64
".\n",
 
 3944                        st->
index, edit_list_index, search_timestamp);
 
 3947                 ctts_sample_old = 0;
 
 3950         current = e_old + 
index;
 
 3951         edit_list_start_ctts_sample = ctts_sample_old;
 
 3954         edit_list_start_encountered = 0;
 
 3955         found_keyframe_after_edit = 0;
 
 3956         for (; current < e_old_end; current++, 
index++) {
 
 3958             frame_duration = (current + 1 <  e_old_end) ?
 
 3959                              ((current + 1)->timestamp - current->
timestamp) : edit_list_duration;
 
 3967             if (ctts_data_old && ctts_index_old < ctts_count_old) {
 
 3968                 curr_ctts = ctts_data_old[ctts_index_old].
duration;
 
 3969                 av_log(mov->
fc, 
AV_LOG_TRACE, 
"stts: %"PRId64
" ctts: %"PRId64
", ctts_index: %"PRId64
", ctts_count: %"PRId64
"\n",
 
 3970                        curr_cts, curr_ctts, ctts_index_old, ctts_count_old);
 
 3971                 curr_cts += curr_ctts;
 
 3973                 if (ctts_sample_old == ctts_data_old[ctts_index_old].
count) {
 
 3976                                        ctts_data_old[ctts_index_old].
count - edit_list_start_ctts_sample,
 
 3977                                        ctts_data_old[ctts_index_old].
duration) == -1) {
 
 3980                                ctts_data_old[ctts_index_old].
count - edit_list_start_ctts_sample,
 
 3981                                ctts_data_old[ctts_index_old].
duration);
 
 3985                     ctts_sample_old = 0;
 
 3986                     edit_list_start_ctts_sample = 0;
 
 3990             if (curr_cts < edit_list_media_time || curr_cts >= (edit_list_duration + edit_list_media_time)) {
 
 3992                     curr_cts < edit_list_media_time && curr_cts + frame_duration > edit_list_media_time &&
 
 3993                     first_non_zero_audio_edit > 0) {
 
 3994                     packet_skip_samples = edit_list_media_time - curr_cts;
 
 3998                     edit_list_dts_counter -= packet_skip_samples;
 
 3999                     if (edit_list_start_encountered == 0)  {
 
 4000                         edit_list_start_encountered = 1;
 
 4003                         if (frame_duration_buffer) {
 
 4005                                                        frame_duration_buffer, num_discarded_begin);
 
 4010                     av_log(mov->
fc, 
AV_LOG_DEBUG, 
"skip %d audio samples from curr_cts: %"PRId64
"\n", packet_skip_samples, curr_cts);
 
 4015                     if (edit_list_start_encountered == 0) {
 
 4016                         num_discarded_begin++;
 
 4017                         frame_duration_buffer = 
av_realloc(frame_duration_buffer,
 
 4018                                                            num_discarded_begin * 
sizeof(int64_t));
 
 4019                         if (!frame_duration_buffer) {
 
 4023                         frame_duration_buffer[num_discarded_begin - 1] = frame_duration;
 
 4038                 if (edit_list_start_encountered == 0) {
 
 4039                     edit_list_start_encountered = 1;
 
 4042                     if (frame_duration_buffer) {
 
 4044                                                    frame_duration_buffer, num_discarded_begin);
 
 4057             if (current_index_range < msc->index_ranges || 
index != current_index_range->
end) {
 
 4058                 current_index_range++;
 
 4061             current_index_range->
end = 
index + 1;
 
 4064             if (edit_list_start_encountered > 0) {
 
 4065                 edit_list_dts_counter = edit_list_dts_counter + frame_duration;
 
 4069             if ((curr_cts + frame_duration >= (edit_list_duration + edit_list_media_time)) &&
 
 4071                 if (ctts_data_old) {
 
 4076                         found_keyframe_after_edit = 1;
 
 4079                     if (ctts_sample_old != 0) {
 
 4082                                            ctts_sample_old - edit_list_start_ctts_sample,
 
 4083                                            ctts_data_old[ctts_index_old].
duration) == -1) {
 
 4085                                    ctts_index_old, ctts_sample_old - edit_list_start_ctts_sample,
 
 4086                                    ctts_data_old[ctts_index_old].
duration);
 
 4121     current_index_range++;
 
 4122     current_index_range->
start = 0;
 
 4123     current_index_range->
end = 0;
 
 4182         if (sg->
index == cra_index)
 
 4183             for (uint32_t j = 0; j < sg->
count; j++)
 
 4185         if (sg->
count > INT_MAX - sample_id)
 
 4187         sample_id += sg->
count;
 
 4202     int64_t current_offset;
 
 4203     int64_t current_dts = 0;
 
 4204     unsigned int stts_index = 0;
 
 4205     unsigned int stsc_index = 0;
 
 4206     unsigned int stss_index = 0;
 
 4207     unsigned int stps_index = 0;
 
 4209     uint64_t stream_size = 0;
 
 4211     unsigned int ctts_count_old = sc->
ctts_count;
 
 4218         int i, edit_start_index = 0, multiple_edits = 0;
 
 4219         int64_t empty_duration = 0; 
 
 4224             if (
i == 0 && e->
time == -1) {
 
 4228                 edit_start_index = 1;
 
 4229             } 
else if (
i == edit_start_index && e->
time >= 0) {
 
 4239                        "not supported in fragmented MP4 files\n");
 
 4242                        "Use -advanced_editlist to correctly decode otherwise " 
 4243                        "a/v desync might occur\n");
 
 4268         unsigned int current_sample = 0;
 
 4269         unsigned int stts_sample = 0;
 
 4270         unsigned int sample_size;
 
 4272         unsigned int rap_group_index = 0;
 
 4273         unsigned int rap_group_sample = 0;
 
 4291         if (ctts_data_old) {
 
 4306             for (
i = 0; 
i < ctts_count_old &&
 
 4308                 for (j = 0; j < ctts_data_old[
i].
count &&
 
 4349                 if (rap_group_present && rap_group_index < sc->rap_group_count) {
 
 4352                     if (++rap_group_sample == sc->
rap_group[rap_group_index].
count) {
 
 4353                         rap_group_sample = 0;
 
 4359                     && !rap_group_present
 
 4365                 if (current_offset > INT64_MAX - sample_size) {
 
 4375                     if (sample_size > 0x3FFFFFFF) {
 
 4380                     e->
pos = current_offset;
 
 4382                     e->
size = sample_size;
 
 4385                     av_log(mov->
fc, 
AV_LOG_TRACE, 
"AVIndex stream %d, sample %u, offset %"PRIx64
", dts %"PRId64
", " 
 4386                             "size %u, distance %u, keyframe %d\n", st->
index, current_sample,
 
 4387                             current_offset, current_dts, sample_size, 
distance, keyframe);
 
 4392                 current_offset += sample_size;
 
 4393                 stream_size += sample_size;
 
 4409         unsigned chunk_samples, total = 0;
 
 4416             unsigned count, chunk_count;
 
 4431                 count = (chunk_samples+1023) / 1024;
 
 4438             total += chunk_count * 
count;
 
 4460             while (chunk_samples > 0) {
 
 4466                            "Zero bytes per frame, but %d samples per frame",
 
 4489                 if (
size > 0x3FFFFFFF) {
 
 4494                 e->
pos = current_offset;
 
 4500                        "size %u, duration %u\n", st->
index, 
i, current_offset, current_dts,
 
 4503                 current_offset += 
size;
 
 4536     av_url_split(src_proto, 
sizeof(src_proto), src_auth, 
sizeof(src_auth), src_host, 
sizeof(src_host), &src_port, 
NULL, 0, 
src);
 
 4537     av_url_split(ref_proto, 
sizeof(ref_proto), ref_auth, 
sizeof(ref_auth), ref_host, 
sizeof(ref_host), &ref_port, 
NULL, 0, 
ref);
 
 4539     if (strlen(
src) == 0) {
 
 4541     } 
else if (strlen(src_auth) + 1 >= 
sizeof(src_auth) ||
 
 4542         strlen(ref_auth) + 1 >= 
sizeof(ref_auth) ||
 
 4543         strlen(src_host) + 1 >= 
sizeof(src_host) ||
 
 4544         strlen(ref_host) + 1 >= 
sizeof(ref_host)) {
 
 4546     } 
else if (strcmp(src_proto, ref_proto) ||
 
 4547                strcmp(src_auth, ref_auth) ||
 
 4548                strcmp(src_host, ref_host) ||
 
 4549                src_port != ref_port) {
 
 4559     if (
ref->nlvl_to > 0 && 
ref->nlvl_from > 0) {
 
 4560         char filename[1025];
 
 4561         const char *src_path;
 
 4565         src_path = strrchr(
src, 
'/');
 
 4572         for (
i = 0, l = strlen(
ref->path) - 1; l >= 0; l--)
 
 4573             if (
ref->path[l] == 
'/') {
 
 4574                 if (
i == 
ref->nlvl_to - 1)
 
 4581         if (
i == 
ref->nlvl_to - 1 && src_path - 
src  < 
sizeof(filename)) {
 
 4582             memcpy(filename, 
src, src_path - 
src);
 
 4583             filename[src_path - 
src] = 0;
 
 4585             for (
i = 1; 
i < 
ref->nlvl_from; 
i++)
 
 4586                 av_strlcat(filename, 
"../", 
sizeof(filename));
 
 4589             if (!
c->use_absolute_path) {
 
 4594                         "Reference with mismatching origin, %s not tried for security reasons, " 
 4595                         "set demuxer option use_absolute_path to allow it anyway\n",
 
 4600                 if (strstr(
ref->path + l + 1, 
"..") ||
 
 4601                     strstr(
ref->path + l + 1, 
":") ||
 
 4602                     (
ref->nlvl_from > 1 && same_origin < 0) ||
 
 4603                     (filename[0] == 
'/' && src_path == 
src))
 
 4607             if (strlen(filename) + 1 == 
sizeof(filename))
 
 4612     } 
else if (
c->use_absolute_path) {
 
 4614                "this is a possible security issue\n");
 
 4619                "Absolute path %s not tried for security reasons, " 
 4620                "set demuxer option use_absolute_path to allow absolute paths\n",
 
 4643     if (
c->is_still_picture_avif) {
 
 4648     if (!st) 
return AVERROR(ENOMEM);
 
 4651     if (!sc) 
return AVERROR(ENOMEM);
 
 4656     c->trak_index = st->
index;
 
 4696                                       "MP4. disabling.\n");
 
 4697         c->advanced_editlist = 0;
 
 4698         c->advanced_editlist_autodisabled = 1;
 
 4705         if (
c->enable_drefs) {
 
 4708                        "stream %d, error opening alias: path='%s', dir='%s', " 
 4709                        "filename='%s', volume='%s', nlvl_from=%d, nlvl_to=%d\n",
 
 4714                    "Skipped opening external track: " 
 4715                    "stream %d, alias: path='%s', dir='%s', " 
 4716                    "filename='%s', volume='%s', nlvl_from=%d, nlvl_to=%d." 
 4717                    "Set enable_drefs to allow this.\n",
 
 4734 #if FF_API_R_FRAME_RATE 
 4750 #if CONFIG_H261_DECODER 
 4753 #if CONFIG_H263_DECODER 
 4756 #if CONFIG_MPEG4_DECODER 
 4788     c->itunes_metadata = 1;
 
 4790     c->itunes_metadata = 0;
 
 4804     if (
count > UINT_MAX / 
sizeof(*
c->meta_keys) - 1) {
 
 4806                "The 'keys' atom with the invalid key count: %"PRIu32
"\n", 
count);
 
 4810     c->meta_keys_count = 
count + 1;
 
 4811     c->meta_keys = 
av_mallocz(
c->meta_keys_count * 
sizeof(*
c->meta_keys));
 
 4818         if (key_size < 8 || key_size > atom.
size) {
 
 4820                    "The key# %"PRIu32
" in meta has invalid size:" 
 4821                    "%"PRIu32
"\n", 
i, key_size);
 
 4824         atom.
size -= key_size;
 
 4830         if (!
c->meta_keys[
i])
 
 4847     if (
c->fc->nb_streams < 1)
 
 4849     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 4852     for (
i = 0; 
i < 3; 
i++) {
 
 4863         if (len < 12 || len - 12 > end - 
avio_tell(pb))
 
 4867         if (
tag == 
MKTAG(
'm', 
'e', 
'a', 
'n'))
 
 4869         else if (
tag == 
MKTAG(
'n', 
'a', 
'm', 
'e'))
 
 4871         else if (
tag == 
MKTAG(
'd', 
'a', 
't', 
'a') && 
len > 4) {
 
 4895         if (strcmp(
key, 
"iTunSMPB") == 0) {
 
 4896             int priming, remainder, 
samples;
 
 4897             if(sscanf(
val, 
"%*X %X %X %X", &priming, &remainder, &
samples) == 3){
 
 4898                 if(priming>0 && priming<16384)
 
 4902         if (strcmp(
key, 
"cdec") != 0) {
 
 4909                "Unhandled or malformed custom metadata of size %"PRId64
"\n", atom.
size);
 
 4923     int item_index = -1;
 
 4924     if (
c->fc->nb_streams)
 
 4926     for (
int i = 0; 
i < 
c->avif_info_size; 
i++)
 
 4927         if (
c->avif_info[
i].item_id == item_id) {
 
 4936     st->
id = 
c->fc->nb_streams;
 
 4945     c->trak_index = st->
index;
 
 4977     sc->
sample_sizes[0] = 
c->avif_info[item_index].extent_length;
 
 4986     while (atom.
size > 8) {
 
 4992         if (
tag == 
MKTAG(
'h',
'd',
'l',
'r')) {
 
 4998             if (
c->is_still_picture_avif) {
 
 5016 #define IS_MATRIX_IDENT(matrix)            \ 
 5017     ( (matrix)[0][0] == (1 << 16) &&       \ 
 5018       (matrix)[1][1] == (1 << 16) &&       \ 
 5019       (matrix)[2][2] == (1 << 30) &&       \ 
 5020      !(matrix)[0][1] && !(matrix)[0][2] && \ 
 5021      !(matrix)[1][0] && !(matrix)[1][2] && \ 
 5022      !(matrix)[2][0] && !(matrix)[2][1]) 
 5029     int display_matrix[3][3];
 
 5030     int res_display_matrix[3][3] = { { 0 } };
 
 5036     if (
c->fc->nb_streams < 1)
 
 5038     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 5074     for (
i = 0; 
i < 3; 
i++) {
 
 5086     for (
i = 0; 
i < 3; 
i++) {
 
 5087         const int sh[3] = { 16, 16, 30 };
 
 5088         for (j = 0; j < 3; j++) {
 
 5089             for (e = 0; e < 3; e++) {
 
 5090                 res_display_matrix[
i][j] +=
 
 5091                     ((int64_t) display_matrix[
i][e] *
 
 5092                      c->movie_display_matrix[e][j]) >> sh[e];
 
 5104         for (
i = 0; 
i < 3; 
i++)
 
 5105             for (j = 0; j < 3; j++)
 
 5112         double disp_transform[2];
 
 5114         for (
i = 0; 
i < 2; 
i++)
 
 5118         if (disp_transform[0] > 1       && disp_transform[1] > 1 &&
 
 5119             disp_transform[0] < (1<<24) && disp_transform[1] < (1<<24) &&
 
 5120             fabs((disp_transform[0] / disp_transform[1]) - 1.0) > 0.01)
 
 5122                 disp_transform[0] / disp_transform[1],
 
 5141     for (
i = 0; 
i < 
c->trex_count; 
i++)
 
 5142         if (
c->trex_data[
i].track_id == track_id) {
 
 5143             trex = &
c->trex_data[
i];
 
 5150     c->fragment.found_tfhd = 1;
 
 5168     if (frag_stream_info) {
 
 5180     num = atom.
size / 4;
 
 5185     c->chapter_tracks = new_tracks;
 
 5186     c->nb_chapter_tracks = num;
 
 5191     c->nb_chapter_tracks = 
i;
 
 5201     if ((uint64_t)
c->trex_count+1 >= UINT_MAX / 
sizeof(*
c->trex_data))
 
 5204                                  sizeof(*
c->trex_data))) < 0) {
 
 5211     trex = &
c->trex_data[
c->trex_count++];
 
 5229     int64_t base_media_decode_time;
 
 5231     for (
i = 0; 
i < 
c->fc->nb_streams; 
i++) {
 
 5232         if (
c->fc->streams[
i]->id == frag->
track_id) {
 
 5233             st = 
c->fc->streams[
i];
 
 5253     if (frag_stream_info)
 
 5254         frag_stream_info->
tfdt_dts = base_media_decode_time;
 
 5269     int data_offset = 0;
 
 5270     unsigned entries, first_sample_flags = frag->
flags;
 
 5273     int next_frag_index = -1, index_entry_pos;
 
 5274     size_t requested_size;
 
 5275     size_t old_ctts_allocated_size;
 
 5284     for (
i = 0; 
i < 
c->fc->nb_streams; 
i++) {
 
 5285         if (
c->fc->streams[
i]->id == frag->
track_id) {
 
 5286             st = 
c->fc->streams[
i];
 
 5306     for (
i = 
c->frag_index.current + 1; i < c->frag_index.nb_items; 
i++) {
 
 5308         if (frag_stream_info && frag_stream_info->
index_entry >= 0) {
 
 5309             next_frag_index = 
i;
 
 5314     av_assert0(index_entry_pos <= sti->nb_index_entries);
 
 5327     if (frag_stream_info) {
 
 5334                     ", using it for pts\n", 
pts);
 
 5339                     ", using it for dts\n", 
pts);
 
 5343             int fallback_tfdt = !
c->use_tfdt && !has_sidx && has_tfdt;
 
 5344             int fallback_sidx =  
c->use_tfdt && !has_tfdt && has_sidx;
 
 5346             if (fallback_sidx) {
 
 5349             if (fallback_tfdt) {
 
 5353             if (has_tfdt && 
c->use_tfdt || fallback_tfdt) {
 
 5356                         ", using it for dts\n", dts);
 
 5357             } 
else if (has_sidx && !
c->use_tfdt || fallback_sidx) {
 
 5362                         ", using it for dts\n", frag_stream_info->
sidx_pts);
 
 5366                         ", using it for dts\n", dts);
 
 5372                 ", using it for dts\n", dts);
 
 5405     memset((uint8_t*)(sc->
ctts_data) + old_ctts_allocated_size, 0,
 
 5408     if (index_entry_pos < sti->nb_index_entries) {
 
 5414         memmove(sc->
ctts_data + index_entry_pos + entries,
 
 5417         if (index_entry_pos < sc->current_sample) {
 
 5426     if (frag_stream_info) {
 
 5429             frag_stream_info->
index_base = index_entry_pos;
 
 5432     if (index_entry_pos > 0)
 
 5436         unsigned sample_size = frag->
size;
 
 5437         int sample_flags = 
i ? frag->
flags : first_sample_flags;
 
 5438         unsigned sample_duration = frag->
duration;
 
 5439         unsigned ctts_duration = 0;
 
 5441         int index_entry_flags = 0;
 
 5452                 dts -= ctts_duration;
 
 5457                    "pts %"PRId64
" calculated dts %"PRId64
 
 5458                    " sc->dts_shift %d ctts.duration %d" 
 5459                    " sc->time_offset %"PRId64
 
 5460                    " flags & MOV_TRUN_SAMPLE_CTS %d\n",
 
 5479         if (prev_dts >= dts)
 
 5492         av_log(
c->fc, 
AV_LOG_TRACE, 
"AVIndex stream %d, sample %d, offset %"PRIx64
", dts %"PRId64
", " 
 5493                 "size %u, distance %d, keyframe %d\n", st->
index,
 
 5496         if (
av_sat_add64(dts, sample_duration) != dts + (uint64_t)sample_duration)
 
 5500         dts += sample_duration;
 
 5504         if (sample_duration <= INT64_MAX - sc->duration_for_fps &&
 
 5511     if (frag_stream_info)
 
 5516         int gap = entries - 
i;
 
 5521         memmove(sc->
ctts_data + index_entry_pos,
 
 5528         if (index_entry_pos < sc->current_sample) {
 
 5538     if (index_entry_pos > 0)
 
 5541         if (prev_dts < sti->index_entries[
i].timestamp)
 
 5572     unsigned i, j, track_id, item_count;
 
 5587     for (
i = 0; 
i < 
c->fc->nb_streams; 
i++) {
 
 5588         if (
c->fc->streams[
i]->id == track_id) {
 
 5589             st = 
c->fc->streams[
i];
 
 5602     if (timescale.
den <= 0) {
 
 5617     offset += (uint64_t)offadd;
 
 5622     if (item_count == 0)
 
 5625     for (
i = 0; 
i < item_count; 
i++) {
 
 5630         if (
size & 0x80000000) {
 
 5639         if (frag_stream_info)
 
 5640             frag_stream_info->
sidx_pts = timestamp;
 
 5655     is_complete = 
offset == stream_size;
 
 5659         if (!
c->have_read_mfra_size) {
 
 5660             if ((
ret = 
avio_seek(pb, stream_size - 4, SEEK_SET)) < 0)
 
 5663             c->have_read_mfra_size = 1;
 
 5667         if (
offset == stream_size - 
c->mfra_size)
 
 5674         for (
i = 0; 
i < 
c->frag_index.nb_items; 
i++) {
 
 5680                     ref_st = 
c->fc->streams[j];
 
 5686         if (ref_st) 
for (
i = 0; 
i < 
c->fc->nb_streams; 
i++) {
 
 5687             st = 
c->fc->streams[
i];
 
 5694         c->frag_index.complete = 1;
 
 5715     if (atom.
type != 
MKTAG(
'm',
'd',
'a',
't')) {
 
 5729     long cmov_len, moov_len;
 
 5743     cmov_len = atom.
size - 6 * 4;
 
 5755         goto free_and_return;
 
 5758     if (uncompress (moov_data, (uLongf *) &moov_len, (
const Bytef *)cmov_data, cmov_len) != Z_OK)
 
 5759         goto free_and_return;
 
 5763     atom.
size = moov_len;
 
 5780     int64_t elst_entry_size;
 
 5782     if (
c->fc->nb_streams < 1 || 
c->ignore_editlist)
 
 5784     sc = 
c->fc->streams[
c->fc->nb_streams-1]->priv_data;
 
 5791     elst_entry_size = 
version == 1 ? 20 : 12;
 
 5792     if (atom.
size != edit_count * elst_entry_size) {
 
 5794             av_log(
c->fc, 
AV_LOG_ERROR, 
"Invalid edit list entry_count: %d for elst atom of size: %"PRId64
" bytes.\n",
 
 5795                    edit_count, atom.
size + 8);
 
 5798             edit_count = atom.
size / elst_entry_size;
 
 5799             if (edit_count * elst_entry_size != atom.
size) {
 
 5833         if (e->
time < 0 && e->
time != -1 &&
 
 5835             av_log(
c->fc, 
AV_LOG_ERROR, 
"Track %d, edit %d: Invalid edit list media time=%"PRId64
"\n",
 
 5836                    c->fc->nb_streams-1, 
i, e->
time);
 
 5849     if (
c->fc->nb_streams < 1)
 
 5851     sc = 
c->fc->streams[
c->fc->nb_streams - 1]->priv_data;
 
 5861     if (
c->fc->nb_streams < 1)
 
 5863     st = 
c->fc->streams[
c->fc->nb_streams - 1];
 
 5865     if (atom.
size < 5) {
 
 5905     if (
c->fc->nb_streams < 1)
 
 5908     sc = 
c->fc->streams[
c->fc->nb_streams - 1]->priv_data;
 
 5910     if (atom.
size < 5) {
 
 5931     for (
i = 0; 
i < 3; 
i++) {
 
 5950     const int mapping[3] = {1, 2, 0};
 
 5951     const int chroma_den = 50000;
 
 5952     const int luma_den = 10000;
 
 5955     if (
c->fc->nb_streams < 1)
 
 5958     sc = 
c->fc->streams[
c->fc->nb_streams - 1]->priv_data;
 
 5960     if (atom.
size < 24) {
 
 5974     for (
i = 0; 
i < 3; 
i++) {
 
 5975         const int j = mapping[
i];
 
 5996     if (
c->fc->nb_streams < 1)
 
 5999     sc = 
c->fc->streams[
c->fc->nb_streams - 1]->priv_data;
 
 6001     if (atom.
size < 5) {
 
 6032     if (
c->fc->nb_streams < 1)
 
 6035     sc = 
c->fc->streams[
c->fc->nb_streams - 1]->priv_data;
 
 6037     if (atom.
size < 4) {
 
 6064     if (
c->fc->nb_streams < 1)
 
 6067     st = 
c->fc->streams[
c->fc->nb_streams - 1];
 
 6070     if (atom.
size < 5) {
 
 6110     uint32_t l = 0, t = 0, 
r = 0, 
b = 0;
 
 6111     uint32_t 
tag, padding = 0;
 
 6114     if (
c->fc->nb_streams < 1)
 
 6117     st = 
c->fc->streams[
c->fc->nb_streams - 1];
 
 6120     if (atom.
size < 8) {
 
 6126     if (size <= 12 || size > atom.
size)
 
 6130     if (
tag != 
MKTAG(
's',
'v',
'h',
'd')) {
 
 6148     if (
tag != 
MKTAG(
'p',
'r',
'o',
'j')) {
 
 6158     if (
tag != 
MKTAG(
'p',
'r',
'h',
'd')) {
 
 6188     case MKTAG(
'c',
'b',
'm',
'p'):
 
 6192                    "Unsupported cubemap layout %d\n", 
layout);
 
 6198     case MKTAG(
'e',
'q',
'u',
'i'):
 
 6204         if (
b >= UINT_MAX - t || 
r >= UINT_MAX - l) {
 
 6206                    "Invalid bounding rectangle coordinates " 
 6207                    "%"PRIu32
",%"PRIu32
",%"PRIu32
",%"PRIu32
"\n", l, t, 
r, 
b);
 
 6211         if (l || t || 
r || 
b)
 
 6310     static const AVUUID uuid_isml_manifest = {
 
 6311         0xa5, 0xd4, 0x0b, 0x30, 0xe8, 0x14, 0x11, 0xdd,
 
 6312         0xba, 0x2f, 0x08, 0x00, 0x20, 0x0c, 0x9a, 0x66
 
 6314     static const AVUUID uuid_xmp = {
 
 6315         0xbe, 0x7a, 0xcf, 0xcb, 0x97, 0xa9, 0x42, 0xe8,
 
 6316         0x9c, 0x71, 0x99, 0x94, 0x91, 0xe3, 0xaf, 0xac
 
 6318     static const AVUUID uuid_spherical = {
 
 6319         0xff, 0xcc, 0x82, 0x63, 0xf8, 0x55, 0x4a, 0x93,
 
 6320         0x88, 0x14, 0x58, 0x7a, 0x02, 0x52, 0x1f, 0xdd,
 
 6326     if (
c->fc->nb_streams < 1)
 
 6328     st = 
c->fc->streams[
c->fc->nb_streams - 1];
 
 6356         while ((ptr = 
av_stristr(ptr, 
"systemBitrate=\""))) {
 
 6357             ptr += 
sizeof(
"systemBitrate=\"") - 1;
 
 6358             c->bitrates_count++;
 
 6359             c->bitrates = 
av_realloc_f(
c->bitrates, 
c->bitrates_count, 
sizeof(*
c->bitrates));
 
 6361                 c->bitrates_count = 0;
 
 6366             ret = strtol(ptr, &endptr, 10);
 
 6367             if (
ret < 0 || errno || *endptr != 
'"') {
 
 6368                 c->bitrates[
c->bitrates_count - 1] = 0;
 
 6370                 c->bitrates[
c->bitrates_count - 1] = 
ret;
 
 6378         if (
c->export_xmp) {
 
 6412     uint8_t content[16];
 
 6423         && !memcmp(content, 
"Anevia\x1A\x1A", 8)
 
 6438     if (
c->fc->nb_streams < 1)
 
 6440     st = 
c->fc->streams[
c->fc->nb_streams - 1];
 
 6445     case MKTAG(
'e',
'n',
'c',
'v'):        
 
 6446     case MKTAG(
'e',
'n',
'c',
'a'):        
 
 6451                    "ignoring 'frma' atom of '%.4s', stream has codec id %d\n",
 
 6463                    "ignoring 'frma' atom of '%.4s', stream format is '%.4s'\n",
 
 6485     if (frag_stream_info) {
 
 6486         for (
i = 0; 
i < 
c->fc->nb_streams; 
i++) {
 
 6487             if (
c->fc->streams[
i]->id == frag_stream_info->
id) {
 
 6488               st = 
c->fc->streams[
i];
 
 6492         if (
i == 
c->fc->nb_streams)
 
 6498             if (!(*sc)->cenc.default_encrypted_sample)
 
 6509         if (
c->fc->nb_streams < 1)
 
 6511         st = 
c->fc->streams[
c->fc->nb_streams - 1];
 
 6514         if (!(*sc)->cenc.encryption_index) {
 
 6516             if (!(*sc)->cenc.default_encrypted_sample)
 
 6519             if (!(*sc)->cenc.encryption_index)
 
 6523         *encryption_index = (*sc)->cenc.encryption_index;
 
 6531     unsigned int subsample_count;
 
 6555     if (use_subsamples) {
 
 6557         av_free((*sample)->subsamples);
 
 6558         (*sample)->subsamples = 
av_calloc(subsample_count, 
sizeof(*subsamples));
 
 6559         if (!(*sample)->subsamples) {
 
 6566             (*sample)->subsamples[
i].bytes_of_clear_data = 
avio_rb16(pb);
 
 6567             (*sample)->subsamples[
i].bytes_of_protected_data = 
avio_rb32(pb);
 
 6576         (*sample)->subsample_count = subsample_count;
 
 6587     int use_subsamples, 
ret;
 
 6588     unsigned int sample_count, 
i, alloc_size = 0;
 
 6604     if (sample_count >= INT_MAX / 
sizeof(*encrypted_samples))
 
 6607     for (
i = 0; 
i < sample_count; 
i++) {
 
 6608         unsigned int min_samples = 
FFMIN(
FFMAX(
i + 1, 1024 * 1024), sample_count);
 
 6610                                             min_samples * 
sizeof(*encrypted_samples));
 
 6611         if (encrypted_samples) {
 
 6642     size_t sample_count, sample_info_size, 
i;
 
 6644     unsigned int alloc_size = 0;
 
 6653     if (sample_count >= INT_MAX / 
sizeof(*encrypted_samples))
 
 6659         av_log(
c->fc, 
AV_LOG_INFO, 
"Failed to seek for auxiliary info, will only parse senc atoms for encryption info\n");
 
 6664         unsigned int min_samples = 
FFMIN(
FFMAX(
i + 1, 1024 * 1024), sample_count);
 
 6666                                             min_samples * 
sizeof(*encrypted_samples));
 
 6667         if (!encrypted_samples) {
 
 6692         for (; 
i > 0; 
i--) {
 
 6705     unsigned int sample_count, aux_info_type, aux_info_param;
 
 6731             if (aux_info_param != 0) {
 
 6737             if ((aux_info_type == 
MKBETAG(
'c',
'e',
'n',
'c') ||
 
 6738                  aux_info_type == 
MKBETAG(
'c',
'e',
'n',
's') ||
 
 6739                  aux_info_type == 
MKBETAG(
'c',
'b',
'c',
'1') ||
 
 6740                  aux_info_type == 
MKBETAG(
'c',
'b',
'c',
's')) &&
 
 6741                 aux_info_param == 0) {
 
 6757         if (sample_count == 0)
 
 6765         if (
ret != sample_count) {
 
 6786     uint64_t *auxiliary_offsets;
 
 6790     unsigned int version, entry_count, aux_info_type, aux_info_param;
 
 6791     unsigned int alloc_size = 0;
 
 6817             if (aux_info_param != 0) {
 
 6823             if ((aux_info_type == 
MKBETAG(
'c',
'e',
'n',
'c') ||
 
 6824                  aux_info_type == 
MKBETAG(
'c',
'e',
'n',
's') ||
 
 6825                  aux_info_type == 
MKBETAG(
'c',
'b',
'c',
'1') ||
 
 6826                  aux_info_type == 
MKBETAG(
'c',
'b',
'c',
's')) &&
 
 6827                 aux_info_param == 0) {
 
 6840     if (entry_count >= INT_MAX / 
sizeof(*auxiliary_offsets))
 
 6844         unsigned int min_offsets = 
FFMIN(
FFMAX(
i + 1, 1024), entry_count);
 
 6847             min_offsets * 
sizeof(*auxiliary_offsets));
 
 6848         if (!auxiliary_offsets) {
 
 6859         if (
c->frag_index.current >= 0) {
 
 6885     uint8_t *side_data, *extra_data;
 
 6886     size_t side_data_size;
 
 6888     unsigned int version, kid_count, extra_data_size, alloc_size = 0;
 
 6890     if (
c->fc->nb_streams < 1)
 
 6892     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 6909         if (kid_count >= INT_MAX / 
sizeof(*key_ids)) {
 
 6914         for (
unsigned int i = 0; 
i < kid_count && !pb->
eof_reached; 
i++) {
 
 6915             unsigned int min_kid_count = 
FFMIN(
FFMAX(
i + 1, 1024), kid_count);
 
 6917                                       min_kid_count * 
sizeof(*key_ids));
 
 6922             info->key_ids = key_ids;
 
 6925             if (!
info->key_ids[
i]) {
 
 6929             info->num_key_ids = 
i + 1;
 
 6945     extra_data = 
av_malloc(extra_data_size);
 
 6951     if (
ret != extra_data_size) {
 
 6960     info->data = extra_data;
 
 6961     info->data_size = extra_data_size;
 
 6966     if (old_side_data) {
 
 6968         if (old_init_info) {
 
 6976             info = old_init_info;
 
 6992                                  side_data, side_data_size, 0))
 
 7005     if (
c->fc->nb_streams < 1)
 
 7007     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 7011         av_log(
c->fc, 
AV_LOG_ERROR, 
"schm boxes are only supported in first sample descriptor\n");
 
 7035     unsigned int version, pattern, is_protected, iv_size;
 
 7037     if (
c->fc->nb_streams < 1)
 
 7039     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 7088         if (iv_size != 8 && iv_size != 16) {
 
 7108     if (
c->fc->nb_streams < 1)
 
 7110     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 7112     if ((uint64_t)atom.
size > (1<<30) || atom.
size < 42)
 
 7121     if (
avio_read(pb, buf, 
sizeof(buf)) != 
sizeof(buf)) {
 
 7145     int bytes_of_protected_data;
 
 7162     if (!
sample->subsample_count) {
 
 7168     for (
i = 0; 
i < 
sample->subsample_count; 
i++) {
 
 7169         if (
sample->subsamples[
i].bytes_of_clear_data + 
sample->subsamples[
i].bytes_of_protected_data > 
size) {
 
 7176         size -= 
sample->subsamples[
i].bytes_of_clear_data;
 
 7180         bytes_of_protected_data = 
sample->subsamples[
i].bytes_of_protected_data;
 
 7183         input += bytes_of_protected_data;
 
 7184         size -= bytes_of_protected_data;
 
 7198     int num_of_encrypted_blocks;
 
 7214     memcpy(iv, 
sample->iv, 16);
 
 7217     if (!
sample->subsample_count) {
 
 7223     for (
i = 0; 
i < 
sample->subsample_count; 
i++) {
 
 7224         if (
sample->subsamples[
i].bytes_of_clear_data + 
sample->subsamples[
i].bytes_of_protected_data > 
size) {
 
 7229         if (
sample->subsamples[
i].bytes_of_protected_data % 16) {
 
 7236         size -= 
sample->subsamples[
i].bytes_of_clear_data;
 
 7239         num_of_encrypted_blocks = 
sample->subsamples[
i].bytes_of_protected_data/16;
 
 7240         if (num_of_encrypted_blocks > 0) {
 
 7243         input += 
sample->subsamples[
i].bytes_of_protected_data;
 
 7244         size -= 
sample->subsamples[
i].bytes_of_protected_data;
 
 7257     int i, 
ret, rem_bytes;
 
 7276     if (!
sample->subsample_count) {
 
 7280     } 
else if (!
sample->crypt_byte_block && !
sample->skip_byte_block) {
 
 7285     for (
i = 0; 
i < 
sample->subsample_count; 
i++) {
 
 7286         if (
sample->subsamples[
i].bytes_of_clear_data + 
sample->subsamples[
i].bytes_of_protected_data > 
size) {
 
 7293         size -= 
sample->subsamples[
i].bytes_of_clear_data;
 
 7297         rem_bytes = 
sample->subsamples[
i].bytes_of_protected_data;
 
 7298         while (rem_bytes > 0) {
 
 7299             if (rem_bytes < 16*sample->crypt_byte_block) {
 
 7304             rem_bytes -= 16*
sample->crypt_byte_block;
 
 7306             rem_bytes -= 
FFMIN(16*
sample->skip_byte_block, rem_bytes);
 
 7308         input += 
sample->subsamples[
i].bytes_of_protected_data;
 
 7309         size -= 
sample->subsamples[
i].bytes_of_protected_data;
 
 7322     int i, 
ret, rem_bytes;
 
 7340     if (!
sample->subsample_count) {
 
 7342         memcpy(iv, 
sample->iv, 16);
 
 7345     } 
else if (!
sample->crypt_byte_block && !
sample->skip_byte_block) {
 
 7350     for (
i = 0; 
i < 
sample->subsample_count; 
i++) {
 
 7351         if (
sample->subsamples[
i].bytes_of_clear_data + 
sample->subsamples[
i].bytes_of_protected_data > 
size) {
 
 7358         size -= 
sample->subsamples[
i].bytes_of_clear_data;
 
 7361         memcpy(iv, 
sample->iv, 16);
 
 7363         rem_bytes = 
sample->subsamples[
i].bytes_of_protected_data;
 
 7364         while (rem_bytes > 0) {
 
 7365             if (rem_bytes < 16*sample->crypt_byte_block) {
 
 7370             rem_bytes -= 16*
sample->crypt_byte_block;
 
 7372             rem_bytes -= 
FFMIN(16*
sample->skip_byte_block, rem_bytes);
 
 7374         input += 
sample->subsamples[
i].bytes_of_protected_data;
 
 7375         size -= 
sample->subsamples[
i].bytes_of_protected_data;
 
 7404     int current = frag_index->
current;
 
 7410     if (current >= 0 && current < frag_index->nb_items) {
 
 7412             (current + 1 == frag_index->
nb_items ||
 
 7423     frag_index->
current = current;
 
 7432     int encrypted_index, 
ret;
 
 7435     encrypted_index = current_index;
 
 7436     encryption_index = 
NULL;
 
 7437     if (frag_stream_info) {
 
 7439         if (frag_stream_info->
stsd_id == 1) {
 
 7441                 encrypted_index = current_index - frag_stream_info->
index_base;
 
 7451     if (encryption_index) {
 
 7466         } 
else if (encrypted_index >= 0 && encrypted_index < encryption_index->nb_encrypted_samples) {
 
 7469             if (!encrypted_sample)
 
 7501     if (
c->fc->nb_streams < 1)
 
 7503     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 7505     if ((uint64_t)atom.
size > (1<<30) || atom.
size < 11)
 
 7545     unsigned format_info;
 
 7546     int channel_assignment, channel_assignment1, channel_assignment2;
 
 7550     if (
c->fc->nb_streams < 1)
 
 7552     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 7559     ratebits            = (format_info >> 28) & 0xF;
 
 7560     channel_assignment1 = (format_info >> 15) & 0x1F;
 
 7561     channel_assignment2 = format_info & 0x1FFF;
 
 7562     if (channel_assignment2)
 
 7563         channel_assignment = channel_assignment2;
 
 7565         channel_assignment = channel_assignment1;
 
 7582     int64_t read_size = atom.
size;
 
 7584     if (
c->fc->nb_streams < 1)
 
 7586     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 7601     AVBPrint scheme_buf, value_buf;
 
 7602     int64_t scheme_str_len = 0, value_str_len = 0;
 
 7610     if (
c->fc->nb_streams < 1)
 
 7612     st = 
c->fc->streams[
c->fc->nb_streams-1];
 
 7620                "Unsupported 'kind' box with version %d, flags: %x",
 
 7630         ret = scheme_str_len;
 
 7634     if (scheme_str_len + 1 >= 
size) {
 
 7642     size -= scheme_str_len + 1;
 
 7646         ret = value_str_len;
 
 7650     if (value_str_len == 
size) {
 
 7657            "%s stream %d KindBox(scheme: %s, value: %s)\n",
 
 7660            scheme_buf.str, value_buf.str);
 
 7667         for (
int j = 0; 
map.value_maps[j].disposition; j++) {
 
 7692     if (
c->fc->nb_streams < 1)
 
 7695     st = 
c->fc->streams[
c->fc->nb_streams - 1];
 
 7697     if (atom.
size < 16) {
 
 7711                "Unsupported ambisonic type %d\n", 
type);
 
 7718     if (channel_order) {
 
 7720                "Unsupported channel_order %d\n", channel_order);
 
 7725     if (normalization) {
 
 7727                "Unsupported normalization %d\n", normalization);
 
 7734                "Invalid number of channels (%d / %d)\n",
 
 7739     for (
i = 0; 
i < channel_count; 
i++) {
 
 7742                    "Ambisonic channel reordering is not supported\n");
 
 7759     if (
c->fc->nb_streams < 1)
 
 7762     st = 
c->fc->streams[
c->fc->nb_streams - 1];
 
 7764     if (atom.
size < 5) {
 
 7806     int version, offset_size, length_size, base_offset_size, index_size;
 
 7807     int item_count, extent_count;
 
 7808     uint64_t base_offset, extent_offset, extent_length;
 
 7811     if (!
c->is_still_picture_avif) {
 
 7828     offset_size = (
value >> 4) & 0xF;
 
 7829     length_size = 
value & 0xF;
 
 7831     base_offset_size = (
value >> 4) & 0xF;
 
 7842     c->avif_info_size = item_count;
 
 7844     for (
int i = 0; 
i < item_count; 
i++) {
 
 7848         c->avif_info[
i].item_id = item_id;
 
 7853         if (
rb_size(pb, &base_offset, base_offset_size) < 0)
 
 7856         if (extent_count > 1) {
 
 7861         for (
int j = 0; j < extent_count; j++) {
 
 7862             if (
rb_size(pb, &extent_offset, offset_size) < 0 ||
 
 7863                 rb_size(pb, &extent_length, length_size) < 0)
 
 7865             c->avif_info[
i].extent_length = extent_length;
 
 7866             c->avif_info[
i].extent_offset = base_offset + extent_offset;
 
 7985     int64_t total_size = 0;
 
 7989     if (
c->atom_depth > 10) {
 
 7996         atom.
size = INT64_MAX;
 
 7997     while (total_size <= atom.
size - 8) {
 
 8003         if (((
a.type == 
MKTAG(
'f',
'r',
'e',
'e') && 
c->moov_retry) ||
 
 8004               a.type == 
MKTAG(
'h',
'o',
'o',
'v')) &&
 
 8016                     a.type = 
MKTAG(
'm',
'o',
'o',
'v');
 
 8019         if (atom.
type != 
MKTAG(
'r',
'o',
'o',
't') &&
 
 8021             if (
a.type == 
MKTAG(
't',
'r',
'a',
'k') ||
 
 8022                 a.type == 
MKTAG(
'm',
'd',
'a',
't')) {
 
 8030         if (
a.size == 1 && total_size + 8 <= atom.
size) { 
 
 8037             a.size = atom.
size - total_size + 8;
 
 8059         if (!
parse && 
c->found_hdlr_mdta &&
 
 8061             a.type == 
MKTAG(
'k',
'e',
'y',
's') &&
 
 8062             c->meta_keys_count == 0) {
 
 8076             if (
c->found_moov && 
c->found_mdat && 
a.size <= INT64_MAX - start_pos &&
 
 8080                     c->next_root_atom = start_pos + 
a.size;
 
 8087             else if (
left < 0) {
 
 8089                        "overread end of atom '%s' by %"PRId64
" bytes\n",
 
 8095         total_size += 
a.size;
 
 8098     if (total_size < atom.
size && atom.
size < 0x7ffff)
 
 8110     int moov_offset = -1;
 
 8124         } 
else if (
size == 0) {
 
 8127         if (
size < minsize) {
 
 8134         case MKTAG(
'm',
'o',
'o',
'v'):
 
 8135             moov_offset = 
offset + 4;
 
 8136         case MKTAG(
'm',
'd',
'a',
't'):
 
 8137         case MKTAG(
'p',
'n',
'o',
't'): 
 
 8138         case MKTAG(
'u',
'd',
't',
'a'): 
 
 8139         case MKTAG(
'f',
't',
'y',
'p'):
 
 8140             if (
tag == 
MKTAG(
'f',
't',
'y',
'p') &&
 
 8145                 score = 
FFMAX(score, 5);
 
 8151         case MKTAG(
'e',
'd',
'i',
'w'): 
 
 8152         case MKTAG(
'w',
'i',
'd',
'e'):
 
 8153         case MKTAG(
'f',
'r',
'e',
'e'):
 
 8154         case MKTAG(
'j',
'u',
'n',
'k'):
 
 8155         case MKTAG(
'p',
'i',
'c',
't'):
 
 8158         case MKTAG(0x82,0x82,0x7f,0x7d):
 
 8161         case MKTAG(
's',
'k',
'i',
'p'):
 
 8162         case MKTAG(
'u',
'u',
'i',
'd'):
 
 8163         case MKTAG(
'p',
'r',
'f',
'l'):
 
 8211         for (
i = 0; 
i < 
s->nb_streams; 
i++)
 
 8212             if (
s->streams[
i]->id == chapter_track) {
 
 8249                 if (end < sample->timestamp) {
 
 8263                 title_len = 2*
len + 1;
 
 8276                     else if (ch == 0xfffe)
 
 8280                         if (
len == 1 || 
len == 2)
 
 8316     int hh, mm, 
ss, ff, drop;
 
 8329              hh, mm, 
ss, drop ? 
';' : 
':', ff);
 
 8345     int rounded_tc_rate;
 
 8350     if (!tc_rate.
num || !tc_rate.
den || !tmcd_nb_frames)
 
 8369     rounded_tc_rate = (tc_rate.
num + tc_rate.
den / 2LL) / tc_rate.
den;
 
 8372     if (tmcd_nb_frames == tc_rate.
num / tc_rate.
den &&
 
 8374         tmcd_nb_frames = rounded_tc_rate;
 
 8386     for (
i = 0; 
i < (*index)->nb_encrypted_samples; 
i++) {
 
 8389     av_freep(&(*index)->encrypted_samples);
 
 8390     av_freep(&(*index)->auxiliary_info_sizes);
 
 8391     av_freep(&(*index)->auxiliary_offsets);
 
 8400     for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
 8486     for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
 8502     for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
 8521     unsigned track_id, item_count;
 
 8533     for (
i = 0; 
i < item_count; 
i++) {
 
 8555         if (frag_stream_info &&
 
 8559         for (j = 0; j < ((fieldlength >> 4) & 3) + 1; j++)
 
 8561         for (j = 0; j < ((fieldlength >> 2) & 3) + 1; j++)
 
 8563         for (j = 0; j < ((fieldlength >> 0) & 3) + 1; j++)
 
 8577     if ((seek_ret = 
avio_seek(
f, stream_size - 4, SEEK_SET)) < 0) {
 
 8582     c->have_read_mfra_size = 1;
 
 8583     if (!
c->mfra_size || 
c->mfra_size > stream_size) {
 
 8587     if ((seek_ret = 
avio_seek(
f, -((int64_t) 
c->mfra_size), SEEK_CUR)) < 0) {
 
 8606     c->frag_index.complete = 1;
 
 8608     seek_ret = 
avio_seek(
f, original_pos, SEEK_SET);
 
 8611                "failed to seek back after looking for mfra\n");
 
 8637         atom.
size = INT64_MAX;
 
 8657         for (
i = 0; 
i < 
s->nb_streams; 
i++)
 
 8658             if (
s->streams[
i]->codecpar->codec_tag == 
AV_RL32(
"tmcd")) {
 
 8660             } 
else if (
s->streams[
i]->codecpar->codec_tag == 
AV_RL32(
"rtmd")) {
 
 8666     for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
 8671             int tmcd_st_id = -1;
 
 8673             for (j = 0; j < 
s->nb_streams; j++)
 
 8677             if (tmcd_st_id < 0 || tmcd_st_id == 
i)
 
 8686     for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
 8717         for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
 8735         for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
 8754             s->streams[
i]->codecpar->bit_rate = mov->
bitrates[
i];
 
 8760     for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
 8826     int64_t best_dts = INT64_MAX;
 
 8830     for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
 8837             uint64_t dtsdiff = best_dts > dts ? best_dts - (uint64_t)dts : ((uint64_t)dts - best_dts);
 
 8839             if (!
sample || (no_interleave && current_sample->
pos < 
sample->pos) ||
 
 8842                  ((dtsdiff <= AV_TIME_BASE && current_sample->pos < sample->
pos) ||
 
 8865     if (
index >= 0 && index < mov->frag_index.nb_items)
 
 8867     if (
avio_seek(
s->pb, target, SEEK_SET) != target) {
 
 8875     if (index < mov->frag_index.nb_items &&
 
 8898     uint8_t *side, *extradata;
 
 8907     if (extradata_size > 0 && extradata) {
 
 8913         memcpy(side, extradata, extradata_size);
 
 8925     new_size = ((
size - 8) / 2) * 3;
 
 8931     for (
int j = 0; j < new_size; j += 3) {
 
 8946     int64_t current_index;
 
 8970         if (ret64 != 
sample->pos) {
 
 8975             } 
else if (ret64 < 0) {
 
 8996 #if CONFIG_DV_DEMUXER 
 9042         if (next_dts >= 
pkt->
dts)
 
 9050         uint8_t sample_is_depended_on = (sample_flags >> 2) & 0x3;
 
 9126     int64_t key_sample_dts, key_sample_pts;
 
 9166         if (sample < 0 && sti->nb_index_entries && timestamp < sti->index_entries[0].timestamp)
 
 9235     if (stream_index >= 
s->nb_streams)
 
 9238     st = 
s->streams[stream_index];
 
 9244     if (
mc->seek_individually) {
 
 9249         for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
 9254             if (stream_index == 
i)
 
 9263         for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
 9283 #define OFFSET(x) offsetof(MOVContext, x) 
 9284 #define FLAGS AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM 
 9286     {
"use_absolute_path",
 
 9287         "allow using absolute path when opening alias, this is a possible security issue",
 
 9290     {
"seek_streams_individually",
 
 9291         "Seek each stream individually to the closest point",
 
 9296     {
"advanced_editlist",
 
 9297         "Modify the AVIndex according to the editlists. Use this option to decode in the order specified by the edits.",
 
 9303         "use mfra for fragment timestamps",
 
 9308         FLAGS, 
"use_mfra_for" },
 
 9310         FLAGS, 
"use_mfra_for" },
 
 9312         FLAGS, 
"use_mfra_for" },
 
 9315     { 
"export_all", 
"Export unrecognized metadata entries", 
OFFSET(export_all),
 
 9317     { 
"export_xmp", 
"Export full XMP metadata", 
OFFSET(export_xmp),
 
 9319     { 
"activation_bytes", 
"Secret bytes for Audible AAX files", 
OFFSET(activation_bytes),
 
 9321     { 
"audible_key", 
"AES-128 Key for Audible AAXC files", 
OFFSET(audible_key),
 
 9323     { 
"audible_iv", 
"AES-128 IV for Audible AAXC files", 
OFFSET(audible_iv),
 
 9325     { 
"audible_fixed_key", 
 
 9326         "Fixed key used for handling Audible AAX files", 
OFFSET(audible_fixed_key),
 
 9331         {.i64 = 0}, 0, 1, 
FLAGS },
 
 9346     .
name           = 
"mov,mp4,m4a,3gp,3g2,mj2",
 
 9350     .extensions     = 
"mov,mp4,m4a,3gp,3g2,mj2,psp,m4b,ism,ismv,isma,f4v,avif",
 
  
AVChapter * avpriv_new_chapter(AVFormatContext *s, int64_t id, AVRational time_base, int64_t start, int64_t end, const char *title)
Add a new chapter.
unsigned int ctts_allocated_size
static int mov_read_chpl(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_frma(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_meta(MOVContext *c, AVIOContext *pb, MOVAtom atom)
@ AV_PKT_DATA_DISPLAYMATRIX
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
int ff_rfps_add_frame(AVFormatContext *ic, AVStream *st, int64_t ts)
add frame for rfps calculation.
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_BPRINT_SIZE_UNLIMITED
#define MOV_TFHD_DEFAULT_FLAGS
#define PUT_UTF8(val, tmp, PUT_BYTE)
#define AV_TIMECODE_STR_SIZE
int av_aes_init(AVAES *a, const uint8_t *key, int key_bits, int decrypt)
Initialize an AVAES context.
int skip_samples
Number of samples to skip at the start of the frame decoded from the next packet.
int16_t audio_cid
stsd audio compression id
AVSphericalProjection
Projection of the video surface(s) on a sphere.
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
static int mov_read_dops(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int can_seek_to_key_sample(AVStream *st, int sample, int64_t requested_pts)
@ AV_CODEC_ID_ADPCM_IMA_QT
#define AV_EF_EXPLODE
abort decoding on minor error detection
#define MOV_TRUN_SAMPLE_FLAGS
unsigned int nb_chapter_tracks
const uint16_t ff_ac3_channel_layout_tab[8]
Map audio coding mode (acmod) to channel layout mask.
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
#define MOV_TKHD_FLAG_ENABLED
enum AVMediaType codec_type
General type of the encoded data.
enum AVSphericalProjection projection
Projection type.
uint8_t ** extradata
extradata array (and size) for multiple stsd
static const AVClass mov_class
uint32_t bound_bottom
Distance from the bottom edge.
uint8_t AVUUID[AV_UUID_LEN]
static int mov_read_targa_y216(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_chnl(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_moof(MOVContext *c, AVIOContext *pb, MOVAtom atom)
void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max)
static double cb(void *priv, double x, double y)
This struct describes the properties of an encoded stream.
char * av_stristr(const char *s1, const char *s2)
Locate the first case-independent occurrence in the string haystack of the string needle.
enum AVColorSpace color_space
AVStream * avformat_new_stream(AVFormatContext *s, const struct AVCodec *c)
Add a new stream to a media file.
int ff_replaygain_export(AVStream *st, AVDictionary *metadata)
Parse replaygain tags and export them as per-stream side data.
static int tmcd_is_referenced(AVFormatContext *s, int tmcd_id)
@ AV_PKT_DATA_NEW_EXTRADATA
The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format that the extradata buffer was...
#define AVERROR_EOF
End of file.
enum AVDiscard discard
Selects which packets can be discarded at will and do not need to be demuxed.
static const AVOption mov_options[]
static int mov_codec_id(AVStream *st, uint32_t format)
@ AV_PKT_DATA_MASTERING_DISPLAY_METADATA
Mastering display metadata (based on SMPTE-2086:2014).
static av_always_inline double av_int2double(uint64_t i)
Reinterpret a 64-bit integer as a double.
static int mov_read_iloc(MOVContext *c, AVIOContext *pb, MOVAtom atom)
#define AV_PKT_FLAG_DISCARD
Flag is used to discard packets which are required to maintain valid decoder state but are not requir...
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce output
static int mov_read_alac(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int test_same_origin(const char *src, const char *ref)
static int cbcs_scheme_decrypt(MOVContext *c, MOVStreamContext *sc, AVEncryptionInfo *sample, uint8_t *input, int size)
uint64_t base_data_offset
static int ambisonic_order(const AVChannelLayout *channel_layout)
If the layout is n-th order standard-order ambisonic, with optional extra non-diegetic channels at th...
#define IS_MATRIX_IDENT(matrix)
static void mov_update_dts_shift(MOVStreamContext *sc, int duration, void *logctx)
AVSphericalMapping * spherical
unsigned MaxCLL
Max content light level (cd/m^2).
int avio_get_str16be(AVIOContext *pb, int maxlen, char *buf, int buflen)
void av_encryption_init_info_free(AVEncryptionInitInfo *info)
Frees the given encryption init info object.
static int mov_read_avss(MOVContext *c, AVIOContext *pb, MOVAtom atom)
int found_moov
'moov' atom has been found
static int mov_read_custom(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static av_cold void cleanup(FlashSV2Context *s)
This structure stores auxiliary information for decoding, presenting, or otherwise processing the cod...
static int mov_read_extradata(MOVContext *c, AVIOContext *pb, MOVAtom atom, enum AVCodecID codec_id)
@ AVCOL_RANGE_JPEG
Full range content.
unsigned int rap_group_count
av_cold int av_sha_init(AVSHA *ctx, int bits)
Initialize SHA-1 or SHA-2 hashing.
static int mov_read_mvhd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
int found_mdat
'mdat' atom has been found
uint32_t crypt_byte_block
Only used for pattern encryption.
@ AV_PKT_DATA_ENCRYPTION_INIT_INFO
This side data is encryption initialization data.
static int mov_read_avid(MOVContext *c, AVIOContext *pb, MOVAtom atom)
int seek_preroll
Audio only.
static int parse(AVCodecParserContext *s, AVCodecContext *avctx, const uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size)
static int mov_read_stps(MOVContext *c, AVIOContext *pb, MOVAtom atom)
int * bitrates
bitrates read before streams creation
static int mov_read_tkhd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
AVRational avg_frame_rate
Average framerate.
static const uint16_t table[]
static int mov_read_colr(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static void set_last_stream_little_endian(AVFormatContext *fc)
static int avif_add_stream(MOVContext *c, int item_id)
static int mov_read_strf(MOVContext *c, AVIOContext *pb, MOVAtom atom)
An strf atom is a BITMAPINFOHEADER struct.
static uint32_t yuv_to_rgba(uint32_t ycbcr)
#define FF_COMPLIANCE_STRICT
Strictly conform to all the things in the spec no matter what consequences.
int error
contains the error code or 0 if no error happened
static int mov_parse_auxiliary_info(MOVContext *c, MOVStreamContext *sc, AVIOContext *pb, MOVEncryptionIndex *encryption_index)
static int mov_seek_stream(AVFormatContext *s, AVStream *st, int64_t timestamp, int flags)
static int mov_read_saio(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int64_t mov_get_stsc_samples(MOVStreamContext *sc, unsigned int index)
int ff_get_wav_header(void *logctx, AVIOContext *pb, AVCodecParameters *par, int size, int big_endian)
#define AV_LOG_VERBOSE
Detailed information.
const AVCodecTag ff_codec_wav_tags[]
static int get_edit_list_entry(MOVContext *mov, const MOVStreamContext *msc, unsigned int edit_list_index, int64_t *edit_list_media_time, int64_t *edit_list_duration, int64_t global_timescale)
Get ith edit list entry (media time, duration).
#define fc(width, name, range_min, range_max)
@ FLAC_METADATA_TYPE_STREAMINFO
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
@ AV_SPHERICAL_EQUIRECTANGULAR_TILE
Video represents a portion of a sphere mapped on a flat surface using equirectangular projection.
static void mov_current_sample_set(MOVStreamContext *sc, int current_sample)
void ffio_init_read_context(FFIOContext *s, const uint8_t *buffer, int buffer_size)
Wrap a buffer in an AVIOContext for reading.
#define AV_PKT_FLAG_DISPOSABLE
Flag is used to indicate packets that contain frames that can be discarded by the decoder.
int buf_size
Size of buf except extra allocated bytes.
enum AVChannelOrder order
Channel order used in this layout.
static int mov_read_moov(MOVContext *c, AVIOContext *pb, MOVAtom atom)
#define FFNABS(a)
Negative Absolute value.
const AVInputFormat ff_mov_demuxer
static int mov_read_esds(MOVContext *c, AVIOContext *pb, MOVAtom atom)
unsigned int sample_count
int nb_channels
Number of channels in this layout.
@ AV_SPHERICAL_EQUIRECTANGULAR
Video represents a sphere mapped on a flat surface using equirectangular projection.
AVEncryptionInitInfo * av_encryption_init_info_get_side_data(const uint8_t *side_data, size_t side_data_size)
Creates a copy of the AVEncryptionInitInfo that is contained in the given side data.
int advanced_editlist_autodisabled
int64_t avio_size(AVIOContext *s)
Get the filesize.
size_t av_strlcatf(char *dst, size_t size, const char *fmt,...)
static int mov_read_stco(MOVContext *c, AVIOContext *pb, MOVAtom atom)
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
struct AVAESCTR * aes_ctr
static int cenc_filter(MOVContext *mov, AVStream *st, MOVStreamContext *sc, AVPacket *pkt, int current_index)
static int mov_read_sdtp(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_jp2h(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_tfhd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
#define OPUS_SEEK_PREROLL_MS
static int mov_read_wide(MOVContext *c, AVIOContext *pb, MOVAtom atom)
@ AV_FIELD_BT
Bottom coded first, top displayed first.
int ff_mov_lang_to_iso639(unsigned code, char to[4])
int ff_generate_avci_extradata(AVStream *st)
Generate standard extradata for AVC-Intra based on width/height and field order.
int ff_get_extradata(void *logctx, AVCodecParameters *par, AVIOContext *pb, int size)
Allocate extradata with additional AV_INPUT_BUFFER_PADDING_SIZE at end which is always set to 0 and f...
static void skip_bits(GetBitContext *s, int n)
enum AVColorPrimaries color_primaries
uint32_t scheme
The fourcc encryption scheme, in big-endian byte order.
@ AV_STEREO3D_SIDEBYSIDE
Views are next to each other.
int ff_mov_get_channel_layout_from_config(int config, AVChannelLayout *layout)
Get AVChannelLayout from ISO/IEC 23001-8 ChannelConfiguration.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
@ AV_FIELD_TT
Top coded_first, top displayed first.
const static uint16_t positions[][14][3]
uint32_t skip_byte_block
Only used for pattern encryption.
static int aax_filter(uint8_t *input, int size, MOVContext *c)
@ AV_OPT_TYPE_BINARY
offset must point to a pointer immediately followed by an int for the length
const char * av_color_space_name(enum AVColorSpace space)
int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, uint8_t *data, size_t size)
Wrap an existing array as a packet side data.
AVMasteringDisplayMetadata * mastering
#define AV_FOURCC_MAX_STRING_SIZE
@ AV_PKT_DATA_PALETTE
An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE bytes worth of palette.
static int mov_read_mdhd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_ctts(MOVContext *c, AVIOContext *pb, MOVAtom atom)
#define MOV_FRAG_SAMPLE_FLAG_IS_NON_SYNC
static int mov_read_aclr(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static av_always_inline float av_int2float(uint32_t i)
Reinterpret a 32-bit integer as a float.
@ AV_STEREO3D_2D
Video is not stereoscopic (and metadata has to be there).
static int read_seek(AVFormatContext *ctx, int stream_index, int64_t timestamp, int flags)
static MOVFragmentStreamInfo * get_current_frag_stream_info(MOVFragmentIndex *frag_index)
char * av_timecode_make_string(const AVTimecode *tc, char *buf, int framenum)
Load timecode string in buf.
static int rb_size(AVIOContext *pb, uint64_t *value, int size)
unsigned int index_entries_allocated_size
static av_cold int read_close(AVFormatContext *ctx)
static int mov_read_enda(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_chap(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
#define MOV_TRUN_SAMPLE_DURATION
static double val(void *priv, double ch)
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
uint8_t * iv
The initialization vector.
@ AV_CODEC_ID_MP3
preferred ID for decoding MPEG audio layer 1, 2 or 3
int64_t duration
Decoding: duration of the stream, in stream time base.
#define ss(width, name, subs,...)
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
static int update_frag_index(MOVContext *c, int64_t offset)
size_t auxiliary_info_sample_count
@ AV_FIELD_TB
Top coded first, bottom displayed first.
AVPacket attached_pic
For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet will contain the attached pictu...
static int mov_read_saiz(MOVContext *c, AVIOContext *pb, MOVAtom atom)
#define MOV_FRAG_SAMPLE_FLAG_DEPENDS_YES
#define MOV_TRUN_DATA_OFFSET
AVEncryptionInfo * av_encryption_info_clone(const AVEncryptionInfo *info)
Allocates an AVEncryptionInfo structure with a copy of the given data.
#define AV_DICT_DONT_STRDUP_VAL
Take ownership of a value that's been allocated with av_malloc() or another memory allocation functio...
static int mov_read_ares(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_adrm(MOVContext *c, AVIOContext *pb, MOVAtom atom)
int av_get_bits_per_sample(enum AVCodecID codec_id)
Return codec bits per sample.
enum AVColorTransferCharacteristic color_trc
unsigned int avio_rb32(AVIOContext *s)
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static void mov_free_encryption_index(MOVEncryptionIndex **index)
#define AV_CH_LOW_FREQUENCY
uint64_t * auxiliary_offsets
Absolute seek position.
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
int dts_shift
dts shift when ctts is negative
int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start, void *log_ctx)
Init a timecode struct with the passed parameters.
static const uint16_t mask[17]
int frame_size
Audio only.
int avio_get_str16le(AVIOContext *pb, int maxlen, char *buf, int buflen)
Read a UTF-16 string from pb and convert it to UTF-8.
static int mov_metadata_track_or_disc_number(MOVContext *c, AVIOContext *pb, unsigned len, const char *key)
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
int ff_add_attached_pic(AVFormatContext *s, AVStream *st, AVIOContext *pb, AVBufferRef **buf, int size)
Add an attached pic to an AVStream.
void * av_fast_realloc(void *ptr, unsigned int *size, size_t min_size)
Reallocate the given buffer if it is not large enough, otherwise do nothing.
#define FF_MOV_FLAG_MFRA_PTS
int ff_mov_read_esds(AVFormatContext *fc, AVIOContext *pb)
static int mov_read_coll(MOVContext *c, AVIOContext *pb, MOVAtom atom)
MOVEncryptionIndex * encryption_index
static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom)
#define MOV_TFHD_DEFAULT_BASE_IS_MOOF
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
#define MOV_TFHD_DEFAULT_DURATION
#define ALAC_EXTRADATA_SIZE
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample format(the sample packing is implied by the sample format) and sample rate. The lists are not just lists
struct AVAES * aes_decrypt
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
uint32_t bound_top
Distance from the top edge.
@ AV_CHANNEL_ORDER_UNSPEC
Only the channel count is specified, without any further information about the channel order.
#define MOV_TRUN_FIRST_SAMPLE_FLAGS
FF_ENABLE_DEPRECATION_WARNINGS int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask)
Initialize a native channel layout from a bitmask indicating which channels are present.
int ff_mov_get_layout_from_channel_positions(const uint8_t *position, int position_num, AVChannelLayout *layout)
Get AVChannelLayout from ISO/IEC 23001-8 OutputChannelPosition.
static void mov_estimate_video_delay(MOVContext *c, AVStream *st)
int64_t timestamp
Timestamp in AVStream.time_base units, preferably the time from which on correctly decoded frames are...
#define av_assert0(cond)
assert() equivalent, that is always enabled.
int64_t min_corrected_pts
minimum Composition time shown by the edits excluding empty edits.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
static int mov_read_sidx(MOVContext *c, AVIOContext *pb, MOVAtom atom)
@ AV_PKT_DATA_STEREO3D
This side data should be associated with a video stream and contains Stereoscopic 3D information in f...
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
AVRational display_aspect_ratio
display aspect ratio (0 if unknown)
static AVIndexEntry * mov_find_next_sample(AVFormatContext *s, AVStream **st)
int min_distance
Minimum distance between this and the previous keyframe, used to avoid unneeded searching.
static int mov_read_dvcc_dvvc(MOVContext *c, AVIOContext *pb, MOVAtom atom)
int(* parse)(MOVContext *ctx, AVIOContext *pb, MOVAtom atom)
int nb_coded_side_data
Amount of entries in coded_side_data.
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
static int mov_read_udta_string(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_stss(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_ddts(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_uuid(MOVContext *c, AVIOContext *pb, MOVAtom atom)
void av_sha_final(AVSHA *ctx, uint8_t *digest)
Finish hashing and output digest value.
#define MAX_REORDER_DELAY
AVEncryptionInfo ** encrypted_samples
static int mov_read_close(AVFormatContext *s)
static enum AVCodecID ff_mov_get_lpcm_codec_id(int bps, int flags)
Compute codec id for 'lpcm' tag.
static int mov_read_cmov(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_sample_encryption_info(MOVContext *c, AVIOContext *pb, MOVStreamContext *sc, AVEncryptionInfo **sample, int use_subsamples)
enum AVStreamParseType need_parsing
unsigned int keyframe_count
static int mov_read_SAND(MOVContext *c, AVIOContext *pb, MOVAtom atom)
@ AVDISCARD_ALL
discard all
#define av_realloc_f(p, o, n)
static int mov_read_stts(MOVContext *c, AVIOContext *pb, MOVAtom atom)
MOVIndexRange * index_ranges
static void set_frag_stream(MOVFragmentIndex *frag_index, int id)
static int mov_read_free(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_realloc_extradata(AVCodecParameters *par, MOVAtom atom)
AVCodecParameters * codecpar
Codec parameters associated with this stream.
#define LIBAVUTIL_VERSION_INT
static int read_header(FFV1Context *f)
Describe the class of an AVClass context structure.
and forward the result(frame or status change) to the corresponding input. If nothing is possible
@ AV_CHANNEL_ORDER_AMBISONIC
The audio is represented as the decomposition of the sound field into spherical harmonics.
static __device__ float fabs(float a)
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
static uint64_t truehd_layout(int chanmap)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
This describes info used to initialize an encryption key system.
static int mov_read_ftyp(MOVContext *c, AVIOContext *pb, MOVAtom atom)
struct AVAESCTR * av_aes_ctr_alloc(void)
Allocate an AVAESCTR context.
static av_always_inline void flac_parse_block_header(const uint8_t *block_header, int *last, int *type, int *size)
Parse the metadata block parameters from the header.
Rational number (pair of numerator and denominator).
static int mov_read_sgpd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_probe(const AVProbeData *p)
@ AV_CODEC_ID_DVD_SUBTITLE
int64_t time_offset
time offset of the edit list entries
static int mov_read_smdm(MOVContext *c, AVIOContext *pb, MOVAtom atom)
const char * av_default_item_name(void *ptr)
Return the context name.
uint64_t avio_rb64(AVIOContext *s)
void av_aes_crypt(AVAES *a, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt)
Encrypt or decrypt a buffer using a previously initialized context.
MOVIndexRange * current_index_range
static int mov_open_dref(MOVContext *c, AVIOContext **pb, const char *src, MOVDref *ref)
This structure contains the data a format has to probe a file.
struct AVAES * av_aes_alloc(void)
Allocate an AVAES context.
static int mov_read_schm(MOVContext *c, AVIOContext *pb, MOVAtom atom)
#define FLAC_STREAMINFO_SIZE
const char * av_color_primaries_name(enum AVColorPrimaries primaries)
#define FF_MOV_FLAG_MFRA_DTS
#define MOV_SAMPLE_DEPENDENCY_NO
#define AV_DICT_DONT_OVERWRITE
Don't overwrite existing entries.
const AVCodecTag ff_codec_movvideo_tags[]
static int mov_read_ilst(MOVContext *c, AVIOContext *pb, MOVAtom atom)
#define AV_CH_FRONT_CENTER
AVChannelLayout ch_layout
Audio only.
static MOVFragmentStreamInfo * get_frag_stream_info_from_pkt(MOVFragmentIndex *frag_index, AVPacket *pkt, int id)
static uint32_t get_sgpd_sync_index(const MOVStreamContext *sc, int nal_unit_type)
static int mov_read_fiel(MOVContext *c, AVIOContext *pb, MOVAtom atom)
@ AV_PKT_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
uint8_t * av_encryption_info_add_side_data(const AVEncryptionInfo *info, size_t *size)
Allocates and initializes side data that holds a copy of the given encryption info.
#define MOV_TFHD_BASE_DATA_OFFSET
int open_key_samples_count
const AVCodecTag ff_codec_movaudio_tags[]
const AVCodecTag ff_codec_movdata_tags[]
static int mov_read_wfex(MOVContext *c, AVIOContext *pb, MOVAtom atom)
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
int sample_rate
Audio only.
static void mov_parse_stsd_subtitle(MOVContext *c, AVIOContext *pb, AVStream *st, MOVStreamContext *sc, int64_t size)
static int mov_skip_multiple_stsd(MOVContext *c, AVIOContext *pb, int codec_tag, int format, int64_t size)
@ AV_CODEC_ID_GSM
as in Berlin toast format
int64_t nb_frames
number of frames in this stream if known or 0
AVCodecID
Identify the syntax and semantics of the bitstream.
const AVPacketSideData * av_packet_side_data_get(const AVPacketSideData *sd, int nb_sd, enum AVPacketSideDataType type)
Get side information from a side data array.
static int should_retry(AVIOContext *pb, int error_code)
@ AV_PKT_DATA_SPHERICAL
This side data should be associated with a video stream and corresponds to the AVSphericalMapping str...
int extradata_size
Size of the extradata content in bytes.
static int mov_read_pasp(MOVContext *c, AVIOContext *pb, MOVAtom atom)
DVDemuxContext * dv_demux
static const AVColorPrimariesDesc color_primaries[AVCOL_PRI_NB]
static int mov_read_SA3D(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_elst(MOVContext *c, AVIOContext *pb, MOVAtom atom)
uint8_t auxiliary_info_default_size
static int mov_read_header(AVFormatContext *s)
static int cbc1_scheme_decrypt(MOVContext *c, MOVStreamContext *sc, AVEncryptionInfo *sample, uint8_t *input, int size)
unsigned int avio_rl32(AVIOContext *s)
@ AVDISCARD_NONKEY
discard all frames except keyframes
static int mov_read_wave(MOVContext *c, AVIOContext *pb, MOVAtom atom)
@ AV_SPHERICAL_CUBEMAP
Video frame is split into 6 faces of a cube, and arranged on a 3x2 layout.
unsigned int avio_rb24(AVIOContext *s)
static int cens_scheme_decrypt(MOVContext *c, MOVStreamContext *sc, AVEncryptionInfo *sample, uint8_t *input, int size)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
AVFormatContext * avformat_alloc_context(void)
Allocate an AVFormatContext.
static int get_current_encryption_info(MOVContext *c, MOVEncryptionIndex **encryption_index, MOVStreamContext **sc)
Gets the current encryption info and associated current stream context.
int seekable
A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
int av_aes_ctr_init(struct AVAESCTR *a, const uint8_t *key)
Initialize an AVAESCTR context.
int av_bprint_finalize(AVBPrint *buf, char **ret_str)
Finalize a print buffer.
An AVChannelLayout holds information about the channel layout of audio data.
static int mov_read_dref(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static void mov_current_sample_dec(MOVStreamContext *sc)
uint32_t bound_right
Distance from the right edge.
struct MOVContext::@302 * avif_info
static int find_prev_closest_index(AVStream *st, AVIndexEntry *e_old, int nb_old, MOVCtts *ctts_data, int64_t ctts_count, int64_t timestamp_pts, int flag, int64_t *index, int64_t *ctts_index, int64_t *ctts_sample)
Find the closest previous frame to the timestamp_pts, in e_old index entries.
unsigned int stsz_sample_size
always contains sample size from stsz atom
#define FF_MOV_FLAG_MFRA_AUTO
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
static int64_t start_time
static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom)
int avio_get_str(AVIOContext *pb, int maxlen, char *buf, int buflen)
Read a string from pb into buf.
void av_sha_update(struct AVSHA *ctx, const uint8_t *data, size_t len)
Update hash value.
static av_const double hypot(double x, double y)
static int mov_read_chan(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static AVRational av_make_q(int num, int den)
Create an AVRational.
static int mov_read_stsc(MOVContext *c, AVIOContext *pb, MOVAtom atom)
int av_reallocp(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory through a pointer to a pointer.
int ff_get_qtpalette(int codec_id, AVIOContext *pb, uint32_t *palette)
Retrieve the palette (or "color table" in QuickTime terms), either from the video sample description,...
#define AV_NOPTS_VALUE
Undefined timestamp value.
#define MKBETAG(a, b, c, d)
char * av_fourcc_make_string(char *buf, uint32_t fourcc)
Fill the provided buffer with a string containing a FourCC (four-character code) representation.
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
void av_aes_ctr_set_full_iv(struct AVAESCTR *a, const uint8_t *iv)
Forcefully change the "full" 16-byte iv, including the counter.
AVContentLightMetadata * coll
static int64_t add_index_entry(AVStream *st, int64_t pos, int64_t timestamp, int size, int distance, int flags)
Add index entry with the given values, to the end of ffstream(st)->index_entries.
static void mov_current_sample_inc(MOVStreamContext *sc)
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
static void fix_timescale(MOVContext *c, MOVStreamContext *sc)
int avio_r8(AVIOContext *s)
uint32_t padding
Number of pixels to pad from the edge of each cube face.
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
int av_reallocp_array(void *ptr, size_t nmemb, size_t size)
Allocate, reallocate an array through a pointer to a pointer.
static int mov_read_default(MOVContext *c, AVIOContext *pb, MOVAtom atom)
@ AV_TIMECODE_FLAG_24HOURSMAX
timecode wraps after 24 hours
int ffio_ensure_seekback(AVIOContext *s, int64_t buf_size)
Ensures that the requested seekback buffer size will be available.
AVPacketSideData * av_packet_side_data_add(AVPacketSideData **psd, int *pnb_sd, enum AVPacketSideDataType type, void *data, size_t size, int flags)
Wrap existing data as packet side data.
static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
size_t auxiliary_offsets_count
int flags
A combination of AV_PKT_FLAG values.
void av_encryption_info_free(AVEncryptionInfo *info)
Frees the given encryption info object.
int av_strstart(const char *str, const char *pfx, const char **ptr)
Return non-zero if pfx is a prefix of str.
This file is part of FFmpeg.
MOVFragmentStreamInfo * stream_info
struct AVEncryptionInitInfo * next
An optional pointer to the next initialization info in the list.
void ff_rfps_calculate(AVFormatContext *ic)
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some input
static int mov_read_clli(MOVContext *c, AVIOContext *pb, MOVAtom atom)
MOVFragmentIndexItem * item
#define AV_LOG_INFO
Standard information.
AVEncryptionInitInfo * av_encryption_init_info_alloc(uint32_t system_id_size, uint32_t num_key_ids, uint32_t key_id_size, uint32_t data_size)
Allocates an AVEncryptionInitInfo structure and sub-pointers to hold the given sizes.
void av_aes_ctr_free(struct AVAESCTR *a)
Release an AVAESCTR context.
static int mov_read_dfla(MOVContext *c, AVIOContext *pb, MOVAtom atom)
uint64_t count
number of bytes in buffer
static const MOVParseTableEntry mov_default_parse_table[]
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel layout
static void mov_metadata_creation_time(MOVContext *c, AVIOContext *pb, AVDictionary **metadata, int version)
static int mov_metadata_hmmt(MOVContext *c, AVIOContext *pb, unsigned len)
struct AVSHA * av_sha_alloc(void)
Allocate an AVSHA context.
static int mov_read_tenc(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int av_uuid_equal(const AVUUID uu1, const AVUUID uu2)
Compares two UUIDs for equality.
static int mov_stsc_index_valid(unsigned int index, unsigned int count)
static int mov_read_seek(AVFormatContext *s, int stream_index, int64_t sample_time, int flags)
static const uint32_t mac_to_unicode[128]
unsigned int bytes_per_frame
int32_t roll
Rotation around the forward vector [-180, 180].
struct MOVStreamContext::@301 cenc
#define i(width, name, range_min, range_max)
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
static int mov_read_trex(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int search_frag_timestamp(AVFormatContext *s, MOVFragmentIndex *frag_index, AVStream *st, int64_t timestamp)
static void mov_fix_index(MOVContext *mov, AVStream *st)
Fix ffstream(st)->index_entries, so that it contains only the entries (and the entries which are need...
int ff_isom_parse_dvcc_dvvc(void *logctx, AVStream *st, const uint8_t *buf_ptr, uint64_t size)
static int mov_read_pssh(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_stsd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_rewrite_dvd_sub_extradata(AVStream *st)
#define AV_TIME_BASE
Internal time base represented as integer.
int block_align
Audio only.
#define av_malloc_array(a, b)
int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries)
@ AV_FIELD_BB
Bottom coded first, bottom displayed first.
@ AV_PKT_DATA_ICC_PROFILE
ICC profile data consisting of an opaque octet buffer following the format described by ISO 15076-1.
@ AV_STEREO3D_TOPBOTTOM
Views are on top of each other.
const char *const ff_id3v1_genre_str[ID3v1_GENRE_MAX+1]
ID3v1 genres.
MOVFragmentIndex frag_index
static int mov_read_vpcc(MOVContext *c, AVIOContext *pb, MOVAtom atom)
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default value
#define AV_OPT_FLAG_DECODING_PARAM
a generic parameter which can be set by the user for demuxing or decoding
void av_url_split(char *proto, int proto_size, char *authorization, int authorization_size, char *hostname, int hostname_size, int *port_ptr, char *path, int path_size, const char *url)
Split a URL string into components.
AVRational av_d2q(double d, int max)
Convert a double precision floating point number to a rational.
static void fix_frag_index_entries(MOVFragmentIndex *frag_index, int index, int id, int entries)
static int mov_finalize_stsd_codec(MOVContext *c, AVIOContext *pb, AVStream *st, MOVStreamContext *sc)
static int mov_read_mdcv(MOVContext *c, AVIOContext *pb, MOVAtom atom)
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
@ AV_TIMECODE_FLAG_ALLOWNEGATIVE
negative time values are allowed
static int mov_read_mdat(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_keys(MOVContext *c, AVIOContext *pb, MOVAtom atom)
enum AVColorRange color_range
Video only.
#define MOV_TFHD_DEFAULT_SIZE
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
static void mov_build_index(MOVContext *mov, AVStream *st)
AVPacketSideData * coded_side_data
Additional data associated with the entire stream.
static int mov_read_svq3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
void * av_calloc(size_t nmemb, size_t size)
enum AVFieldOrder field_order
Video only.
int64_t ff_read_string_to_bprint_overwrite(AVIOContext *s, struct AVBPrint *bp, int64_t max_len)
Read a whole null-terminated string of text from AVIOContext to an AVBPrint buffer overwriting its co...
static int64_t get_stream_info_time(MOVFragmentStreamInfo *frag_stream_info)
static void fix_index_entry_timestamps(AVStream *st, int end_index, int64_t end_ts, int64_t *frame_duration_buffer, int frame_duration_buffer_size)
Rewrite timestamps of index entries in the range [end_index - frame_duration_buffer_size,...
@ AV_TIMECODE_FLAG_DROPFRAME
timecode is drop frame
Undefined Behavior In the C language
static int mov_read_tmcd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
int disposition
Stream disposition - a combination of AV_DISPOSITION_* flags.
int id
Format-specific stream ID.
#define AV_LOG_FATAL
Something went wrong and recovery is not possible.
unsigned int nb_encrypted_samples
AVStereo3D * av_stereo3d_alloc(void)
Allocate an AVStereo3D structure and set its fields to default values.
static int mov_read_senc(MOVContext *c, AVIOContext *pb, MOVAtom atom)
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
#define FFSWAP(type, a, b)
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
uint8_t * key_id
The ID of the key used to encrypt the packet.
size_t av_strlcat(char *dst, const char *src, size_t size)
Append the string src to the string dst, but to a total length of no more than size - 1 bytes,...
int32_t pitch
Rotation around the right vector [-90, 90].
unsigned int avio_rb16(AVIOContext *s)
enum AVStereo3DType type
How views are packed within the video.
AVPacketSideData * av_packet_side_data_new(AVPacketSideData **psd, int *pnb_sd, enum AVPacketSideDataType type, size_t size, int flags)
Allocate a new packet side data.
@ AV_AUDIO_SERVICE_TYPE_KARAOKE
static int mov_read_dmlp(MOVContext *c, AVIOContext *pb, MOVAtom atom)
#define AV_INPUT_BUFFER_PADDING_SIZE
int pseudo_stream_id
-1 means demux all ids
static int mov_read_tfdt(MOVContext *c, AVIOContext *pb, MOVAtom atom)
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2] ... the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so ...,+,-,+,-,+,+,-,+,-,+,... hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32 - hcoeff[1] - hcoeff[2] - ... a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2} an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||......... intra?||||:Block01 :yes no||||:Block02 :....... ..........||||:Block03 ::y DC ::ref index:||||:Block04 ::cb DC ::motion x :||||......... :cr DC ::motion y :||||....... ..........|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------ ------------ ------------|||Y subbands||Cb subbands||Cr subbands||||--- ---||--- ---||--- ---|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------ ------------ ------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction ------------|\ Dequantization ------------------- \||Reference frames|\ IDWT|------- -------|Motion \|||Frame 0||Frame 1||Compensation . OBMC v -------|------- -------|--------------. \------> Frame n output Frame Frame<----------------------------------/|...|------------------- Range Coder:============Binary Range Coder:------------------- The implemented range coder is an adapted version based upon "Range encoding: an algorithm for removing redundancy from a digitised message." by G. N. N. Martin. The symbols encoded by the Snow range coder are bits(0|1). The associated probabilities are not fix but change depending on the symbol mix seen so far. bit seen|new state ---------+----------------------------------------------- 0|256 - state_transition_table[256 - old_state];1|state_transition_table[old_state];state_transition_table={ 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:------------------------- FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1. the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled left
static int search_frag_moof_offset(MOVFragmentIndex *frag_index, int64_t offset)
#define AV_DICT_MATCH_CASE
Only get an entry with exact-case key match.
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
static int mov_switch_root(AVFormatContext *s, int64_t target, int index)
This describes encryption info for a packet.
static int64_t add_ctts_entry(MOVCtts **ctts_data, unsigned int *ctts_count, unsigned int *allocated_size, int count, int duration)
Append a new ctts entry to ctts_data.
MOVEncryptionIndex * encryption_index
#define MIN_DATA_ENTRY_BOX_SIZE
const char * av_get_media_type_string(enum AVMediaType media_type)
Return a string describing the media_type enum, NULL if media_type is unknown.
int index
stream index in AVFormatContext
static int mov_seek_fragment(AVFormatContext *s, AVStream *st, int64_t timestamp)
void ff_configure_buffers_for_index(AVFormatContext *s, int64_t time_tolerance)
static void mov_parse_stsd_video(MOVContext *c, AVIOContext *pb, AVStream *st, MOVStreamContext *sc)
const AVCodecTag ff_codec_bmp_tags[]
static int mov_read_dec3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int64_t get_frag_time(AVFormatContext *s, AVStream *dst_st, MOVFragmentIndex *frag_index, int index)
unsigned int sample_size
may contain value calculated from stsd or value from stsz atom
static int mlp_samplerate(int in)
#define ISOM_DVCC_DVVC_SIZE
static int mov_read_sbgp(MOVContext *c, AVIOContext *pb, MOVAtom atom)
#define AVIO_SEEKABLE_NORMAL
Seeking works like for a local file.
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, size_t size)
Allocate new information of a packet.
the frame and frame reference mechanism is intended to as much as expensive copies of that data while still allowing the filters to produce correct results The data is stored in buffers represented by AVFrame structures Several references can point to the same frame buffer
static int mov_read_glbl(MOVContext *c, AVIOContext *pb, MOVAtom atom)
This function reads atom content and puts data in extradata without tag nor size unlike mov_read_extr...
static int mov_change_extradata(MOVStreamContext *sc, AVPacket *pkt)
static int mov_parse_uuid_spherical(MOVStreamContext *sc, AVIOContext *pb, size_t len)
AVFormatContext * dv_fctx
void av_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
unsigned int aax_mode
'aax' file has been detected
static int mov_read_sv3d(MOVContext *c, AVIOContext *pb, MOVAtom atom)
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
static int mov_aaxc_crypto(MOVContext *c)
static int64_t mov_get_skip_samples(AVStream *st, int sample)
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_WB16 unsigned int_TMPL AV_RB8
static int ref[MAX_W *MAX_W]
AVRational r_frame_rate
Real base framerate of the stream.
int64_t track_end
used for dts generation in fragmented movie files
MOVFragment fragment
current fragment in moof atom
int eof_reached
true if was unable to read due to error or eof
static int mov_metadata_int8_bypass_padding(MOVContext *c, AVIOContext *pb, unsigned len, const char *key)
Filter the word “frame” indicates either a video frame or a group of audio samples
static float mean(const float *input, int size)
static int mov_read_covr(MOVContext *c, AVIOContext *pb, int type, int len)
unsigned int per_sample_iv_size
const AVCodecTag ff_codec_movsubtitle_tags[]
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
static void export_orphan_timecode(AVFormatContext *s)
#define AV_CH_FRONT_RIGHT
void av_aes_ctr_crypt(struct AVAESCTR *a, uint8_t *dst, const uint8_t *src, int count)
Process a buffer using a previously initialized context.
static int mov_metadata_gnre(MOVContext *c, AVIOContext *pb, unsigned len, const char *key)
@ AV_PKT_DATA_ENCRYPTION_INFO
This side data contains encryption info for how to decrypt the packet.
AVIndexEntry * index_entries
Only used if the format does not support seeking natively.
int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags)
Convenience wrapper for av_dict_set() that converts the value to a string and stores it.
static int mov_read_dpxe(MOVContext *c, AVIOContext *pb, MOVAtom atom)
#define AVIO_FLAG_READ
read-only
@ AV_PKT_DATA_AUDIO_SERVICE_TYPE
This side data should be associated with an audio stream and corresponds to enum AVAudioServiceType.
AVSphericalMapping * av_spherical_alloc(size_t *size)
Allocate a AVSphericalVideo structure and initialize its fields to default values.
static int mov_read_rtmd_track(AVFormatContext *s, AVStream *st)
static int read_probe(const AVProbeData *p)
int bits_per_coded_sample
The number of bits per sample in the codedwords.
static int mov_read_pcmc(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int build_open_gop_key_points(AVStream *st)
static void mov_parse_stsd_audio(MOVContext *c, AVIOContext *pb, AVStream *st, MOVStreamContext *sc)
int trak_index
Index of the current 'trak'.
static int mov_read_timecode_track(AVFormatContext *s, AVStream *st)
uint32_t bound_left
Distance from the left edge.
static int mov_read_mac_string(MOVContext *c, AVIOContext *pb, int len, char *dst, int dstlen)
uint8_t * auxiliary_info_sizes
int video_delay
Video only.
#define avpriv_request_sample(...)
const VDPAUPixFmtMap * map
#define AV_CHANNEL_LAYOUT_MONO
static int read_tfra(MOVContext *mov, AVIOContext *f)
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
This structure stores compressed data.
unsigned MaxFALL
Max average light level per frame (cd/m^2).
static double cr(void *priv, double x, double y)
unsigned * stps_data
partial sync sample for mpeg-2 open gop
@ AV_CODEC_ID_ADPCM_IMA_WAV
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
AVEncryptionInfo * av_encryption_info_alloc(uint32_t subsample_count, uint32_t key_id_size, uint32_t iv_size)
Allocates an AVEncryptionInfo structure and sub-pointers to hold the given number of subsamples.
int64_t pos
byte position in stream, -1 if unknown
static int mov_metadata_loci(MOVContext *c, AVIOContext *pb, unsigned len)
#define MOV_TRUN_SAMPLE_SIZE
uint32_t tmcd_flags
tmcd track flags
static float distance(float x, float y, int band)
static int parse_timecode_in_framenum_format(AVFormatContext *s, AVStream *st, int64_t value, int flags)
uint8_t tmcd_nb_frames
tmcd number of frames per tick / second
#define flags(name, subs,...)
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
int start_pad
amount of samples to skip due to enc-dec delay
AVStereo3DType
List of possible 3D Types.
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
uint32_t min_sample_duration
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
const struct MP4TrackKindMapping ff_mov_track_kind_table[]
static int cenc_decrypt(MOVContext *c, MOVStreamContext *sc, AVEncryptionInfo *sample, uint8_t *input, int size)
#define MKTAG(a, b, c, d)
int ffio_read_size(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
unsigned int sync_group_count
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base.
unsigned int samples_per_frame
static int mov_read_mfra(MOVContext *c, AVIOContext *f)
static int mov_metadata_int8_no_padding(MOVContext *c, AVIOContext *pb, unsigned len, const char *key)
static MOVFragmentStreamInfo * get_frag_stream_info(MOVFragmentIndex *frag_index, int index, int id)
static int mov_read_kind(MOVContext *c, AVIOContext *pb, MOVAtom atom)
#define MOV_TRUN_SAMPLE_CTS
#define MOV_ISMV_TTML_TAG
int initial_padding
Audio only.
static int get_eia608_packet(AVIOContext *pb, AVPacket *pkt, int size)
static int mov_read_st3d(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int is_open_key_sample(const MOVStreamContext *sc, int sample)
static int mov_read_dvc1(MOVContext *c, AVIOContext *pb, MOVAtom atom)
const char * av_color_transfer_name(enum AVColorTransferCharacteristic transfer)
int avpriv_dict_set_timestamp(AVDictionary **dict, const char *key, int64_t timestamp)
Set a dictionary value to an ISO-8601 compliant timestamp string.
static int64_t mov_read_atom_into_extradata(MOVContext *c, AVIOContext *pb, MOVAtom atom, AVCodecParameters *par, uint8_t *buf)
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_RB64
int32_t yaw
Rotation around the up vector [-180, 180].
static void mov_read_chapters(AVFormatContext *s)
AVEncryptionInfo * default_encrypted_sample
#define AV_DICT_DONT_STRDUP_KEY
Take ownership of a key that's been allocated with av_malloc() or another memory allocation function.
int64_t next_root_atom
offset of the next root atom
static int cenc_scheme_decrypt(MOVContext *c, MOVStreamContext *sc, AVEncryptionInfo *sample, uint8_t *input, int size)
static int mov_read_hdlr(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_parse_stsd_data(MOVContext *c, AVIOContext *pb, AVStream *st, MOVStreamContext *sc, int64_t size)
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_RB16
void * av_realloc(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory.
uint8_t * av_encryption_init_info_add_side_data(const AVEncryptionInitInfo *info, size_t *side_data_size)
Allocates and initializes side data that holds a copy of the given encryption init info.
#define av_fourcc2str(fourcc)
int ff_mov_read_chan(AVFormatContext *s, AVIOContext *pb, AVStream *st, int64_t size)
Read 'chan' tag from the input stream.
int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags)
Get the index for a specific timestamp.
static int mov_read_pitm(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_dac3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
int avio_feof(AVIOContext *s)
Similar to feof() but also returns nonzero on read errors.
int ffindex
AVStream index.
static int mov_read_stsz(MOVContext *c, AVIOContext *pb, MOVAtom atom)