63 #define EDIT_UNITS_PER_BODY 250 
  103 static const struct {
 
  124     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x02,0x0D,0x01,0x03,0x01,0x02,0x04,0x60,0x01 },
 
  125       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
 
  126       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x00,0x00,0x00 },
 
  128     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x06,0x03,0x00 },
 
  129       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x16,0x01,0x03,0x00 },
 
  130       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 },
 
  132     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x06,0x01,0x00 },
 
  133       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x16,0x01,0x01,0x00 },
 
  134       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 },
 
  137     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x01,0x01 },
 
  138       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x05,0x01,0x01,0x00 },
 
  139       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x01 },
 
  141     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x01,0x01 },
 
  142       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x06,0x01,0x10,0x00 },
 
  143       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 },
 
  146     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x02,0x01 },
 
  147       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x05,0x01,0x01,0x00 },
 
  148       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x02 },
 
  150     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x02,0x01 },
 
  151       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x06,0x01,0x10,0x00 },
 
  152       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 },
 
  155     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x03,0x01 },
 
  156       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x05,0x01,0x01,0x00 },
 
  157       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x03 },
 
  159     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x03,0x01 },
 
  160       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x06,0x01,0x10,0x00 },
 
  161       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 },
 
  164     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x04,0x01 },
 
  165       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x05,0x01,0x01,0x00 },
 
  166       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x04 },
 
  168     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x04,0x01 },
 
  169       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x06,0x01,0x10,0x00 },
 
  170       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 },
 
  173     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x05,0x01 },
 
  174       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x05,0x01,0x01,0x00 },
 
  175       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x05 },
 
  177     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x05,0x01 },
 
  178       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x06,0x01,0x10,0x00 },
 
  179       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 },
 
  182     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x06,0x01 },
 
  183       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x05,0x01,0x01,0x00 },
 
  184       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x01,0x02,0x01,0x06 },
 
  186     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x01,0x06,0x01 },
 
  187       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x06,0x01,0x10,0x00 },
 
  188       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x02,0x02,0x01,0x00,0x00,0x00,0x00 },
 
  191     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x02,0x7F,0x01 },
 
  192       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x18,0x01,0x01,0x00 },
 
  193       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x02,0x00,0x00,0x00 },
 
  196     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x02,0x40,0x01 },
 
  197       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x18,0x01,0x01,0x00 },
 
  198       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x02,0x02,0x01,0x00 },
 
  201     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x02,0x41,0x01 },
 
  202       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x18,0x01,0x01,0x00 },
 
  203       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x02,0x02,0x02,0x00 },
 
  206     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x02,0x50,0x01 },
 
  207       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x18,0x01,0x01,0x00 },
 
  208       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x02,0x02,0x03,0x00 },
 
  211     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x02,0x51,0x01 },
 
  212       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x18,0x01,0x01,0x00 },
 
  213       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x02,0x02,0x04,0x00 },
 
  216     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x02,0x60,0x01 },
 
  217       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x18,0x01,0x01,0x00 },
 
  218       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x02,0x02,0x05,0x00 },
 
  221     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x02,0x61,0x01 },
 
  222       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x18,0x01,0x01,0x00 },
 
  223       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x02,0x02,0x06,0x00 },
 
  226     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x02,0x62,0x01 },
 
  227       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x18,0x01,0x01,0x00 },
 
  228       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x02,0x02,0x07,0x00 },
 
  231     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x02,0x63,0x01 },
 
  232       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x18,0x01,0x01,0x00 },
 
  233       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x04,0x01,0x02,0x02,0x02,0x02,0x08,0x00 },
 
  236     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x11,0x01,0x00 },
 
  237       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
 
  238       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x01,0x00,0x00 },
 
  241     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x11,0x01,0x00 },
 
  242       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
 
  243       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x03,0x00,0x00 },
 
  246     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x11,0x01,0x00 },
 
  247       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
 
  248       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x04,0x00,0x00 },
 
  251     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x11,0x01,0x00 },
 
  252       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
 
  253       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x07,0x00,0x00 },
 
  256     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x11,0x01,0x00 },
 
  257       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
 
  258       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x08,0x00,0x00 },
 
  261     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x03,0x01,0x02,0x11,0x01,0x00 },
 
  262       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
 
  263       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x09,0x00,0x00 },
 
  266     { { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x01,0x0d,0x01,0x03,0x01,0x02,0x11,0x01,0x00 },
 
  267       { 0x06,0x0e,0x2b,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
 
  268       { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x10,0x00,0x00 },
 
  271     { { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x01,0x0d,0x01,0x03,0x01,0x02,0x11,0x01,0x00 },
 
  272       { 0x06,0x0e,0x2b,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
 
  273       { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x11,0x00,0x00 },
 
  276     { { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x01,0x0d,0x01,0x03,0x01,0x02,0x11,0x01,0x00 },
 
  277       { 0x06,0x0e,0x2b,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
 
  278       { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x12,0x00,0x00 },
 
  281     { { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x01,0x0d,0x01,0x03,0x01,0x02,0x11,0x01,0x00 },
 
  282       { 0x06,0x0e,0x2b,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
 
  283       { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x13,0x00,0x00 },
 
  286     { { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x07,0x0d,0x01,0x03,0x01,0x02,0x0c,0x01,0x00 },
 
  287       { 0x06,0x0e,0x2b,0x34,0x01,0x02,0x01,0x01,0x0d,0x01,0x03,0x01,0x15,0x01,0x08,0x00 },
 
  288       { 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x07,0x04,0x01,0x02,0x02,0x03,0x01,0x01,0x00 },
 
  291     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0a,0x0D,0x01,0x03,0x01,0x02,0x10,0x60,0x01 },
 
  292       { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
 
  293       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0a,0x04,0x01,0x02,0x02,0x01,0x00,0x00,0x00 },
 
  295     { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
 
  296       { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
 
  297       { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },
 
  330 static const uint8_t uuid_base[]            = { 0xAD,0xAB,0x44,0x24,0x2f,0x25,0x4d,0xc7,0x92,0xff,0x29,0xbd };
 
  331 static const uint8_t umid_ul[]              = { 0x06,0x0A,0x2B,0x34,0x01,0x01,0x01,0x05,0x01,0x01,0x0D,0x00,0x13 };
 
  336 static const uint8_t op1a_ul[]                     = { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x0D,0x01,0x02,0x01,0x01,0x01,0x09,0x00 };
 
  337 static const uint8_t opatom_ul[]                   = { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x02,0x0D,0x01,0x02,0x01,0x10,0x03,0x00,0x00 };
 
  338 static const uint8_t footer_partition_key[]        = { 0x06,0x0E,0x2B,0x34,0x02,0x05,0x01,0x01,0x0D,0x01,0x02,0x01,0x01,0x04,0x04,0x00 }; 
 
  339 static const uint8_t primer_pack_key[]             = { 0x06,0x0E,0x2B,0x34,0x02,0x05,0x01,0x01,0x0D,0x01,0x02,0x01,0x01,0x05,0x01,0x00 };
 
  340 static const uint8_t index_table_segment_key[]     = { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x02,0x01,0x01,0x10,0x01,0x00 };
 
  341 static const uint8_t random_index_pack_key[]       = { 0x06,0x0E,0x2B,0x34,0x02,0x05,0x01,0x01,0x0D,0x01,0x02,0x01,0x01,0x11,0x01,0x00 };
 
  342 static const uint8_t header_open_partition_key[]   = { 0x06,0x0E,0x2B,0x34,0x02,0x05,0x01,0x01,0x0D,0x01,0x02,0x01,0x01,0x02,0x01,0x00 }; 
 
  343 static const uint8_t header_closed_partition_key[] = { 0x06,0x0E,0x2B,0x34,0x02,0x05,0x01,0x01,0x0D,0x01,0x02,0x01,0x01,0x02,0x04,0x00 }; 
 
  344 static const uint8_t klv_fill_key[]                = { 0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x03,0x01,0x02,0x10,0x01,0x00,0x00,0x00 };
 
  345 static const uint8_t body_partition_key[]          = { 0x06,0x0E,0x2B,0x34,0x02,0x05,0x01,0x01,0x0D,0x01,0x02,0x01,0x01,0x03,0x04,0x00 }; 
 
  350 static const uint8_t header_metadata_key[]  = { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0D,0x01,0x01,0x01,0x01 };
 
  351 static const uint8_t multiple_desc_ul[]     = { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x0D,0x01,0x03,0x01,0x02,0x7F,0x01,0x00 };
 
  358     { 0x3C0A, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x01,0x01,0x15,0x02,0x00,0x00,0x00,0x00}}, 
 
  359     { 0x3B02, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x07,0x02,0x01,0x10,0x02,0x04,0x00,0x00}}, 
 
  360     { 0x3B05, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x03,0x01,0x02,0x01,0x05,0x00,0x00,0x00}}, 
 
  361     { 0x3B06, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x04,0x06,0x04,0x00,0x00}}, 
 
  362     { 0x3B03, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x04,0x02,0x01,0x00,0x00}}, 
 
  363     { 0x3B09, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x01,0x02,0x02,0x03,0x00,0x00,0x00,0x00}}, 
 
  364     { 0x3B0A, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x01,0x02,0x02,0x10,0x02,0x01,0x00,0x00}}, 
 
  365     { 0x3B0B, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x01,0x02,0x02,0x10,0x02,0x02,0x00,0x00}}, 
 
  367     { 0x3C09, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x05,0x20,0x07,0x01,0x01,0x00,0x00,0x00}}, 
 
  368     { 0x3C01, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x05,0x20,0x07,0x01,0x02,0x01,0x00,0x00}}, 
 
  369     { 0x3C02, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x05,0x20,0x07,0x01,0x03,0x01,0x00,0x00}}, 
 
  370     { 0x3C04, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x05,0x20,0x07,0x01,0x05,0x01,0x00,0x00}}, 
 
  371     { 0x3C05, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x05,0x20,0x07,0x01,0x07,0x00,0x00,0x00}}, 
 
  372     { 0x3C06, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x07,0x02,0x01,0x10,0x02,0x03,0x00,0x00}}, 
 
  374     { 0x1901, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x04,0x05,0x01,0x00,0x00}}, 
 
  375     { 0x1902, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x04,0x05,0x02,0x00,0x00}}, 
 
  377     { 0x2701, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x06,0x01,0x00,0x00,0x00}}, 
 
  378     { 0x3F07, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x04,0x01,0x03,0x04,0x04,0x00,0x00,0x00,0x00}}, 
 
  380     { 0x4401, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x01,0x01,0x15,0x10,0x00,0x00,0x00,0x00}}, 
 
  381     { 0x4405, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x07,0x02,0x01,0x10,0x01,0x03,0x00,0x00}}, 
 
  382     { 0x4404, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x07,0x02,0x01,0x10,0x02,0x05,0x00,0x00}}, 
 
  383     { 0x4402, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x01,0x03,0x03,0x02,0x01,0x00,0x00,0x00}}, 
 
  384     { 0x4403, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x04,0x06,0x05,0x00,0x00}}, 
 
  385     { 0x4701, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x04,0x02,0x03,0x00,0x00}}, 
 
  387     { 0x4801, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x01,0x07,0x01,0x01,0x00,0x00,0x00,0x00}}, 
 
  388     { 0x4804, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x01,0x04,0x01,0x03,0x00,0x00,0x00,0x00}}, 
 
  389     { 0x4B01, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x05,0x30,0x04,0x05,0x00,0x00,0x00,0x00}}, 
 
  390     { 0x4B02, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x07,0x02,0x01,0x03,0x01,0x03,0x00,0x00}}, 
 
  391     { 0x4803, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x04,0x02,0x04,0x00,0x00}}, 
 
  393     { 0x0201, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x04,0x07,0x01,0x00,0x00,0x00,0x00,0x00}}, 
 
  394     { 0x0202, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x07,0x02,0x02,0x01,0x01,0x03,0x00,0x00}}, 
 
  395     { 0x1001, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x04,0x06,0x09,0x00,0x00}}, 
 
  397     { 0x1201, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x07,0x02,0x01,0x03,0x01,0x04,0x00,0x00}}, 
 
  398     { 0x1101, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x03,0x01,0x00,0x00,0x00}}, 
 
  399     { 0x1102, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x03,0x02,0x00,0x00,0x00}}, 
 
  401     { 0x1501, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x07,0x02,0x01,0x03,0x01,0x05,0x00,0x00}}, 
 
  402     { 0x1502, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x04,0x04,0x01,0x01,0x02,0x06,0x00,0x00}}, 
 
  403     { 0x1503, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x04,0x01,0x01,0x05,0x00,0x00,0x00}}, 
 
  405     { 0x3F01, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x04,0x06,0x01,0x01,0x04,0x06,0x0B,0x00,0x00}}, 
 
  406     { 0x3006, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x06,0x01,0x01,0x03,0x05,0x00,0x00,0x00}}, 
 
  407     { 0x3001, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x06,0x01,0x01,0x00,0x00,0x00,0x00}}, 
 
  408     { 0x3002, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x06,0x01,0x02,0x00,0x00,0x00,0x00}}, 
 
  409     { 0x3004, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x06,0x01,0x01,0x04,0x01,0x02,0x00,0x00}}, 
 
  411     { 0x320C, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x01,0x03,0x01,0x04,0x00,0x00,0x00}}, 
 
  412     { 0x320D, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x04,0x01,0x03,0x02,0x05,0x00,0x00,0x00}}, 
 
  413     { 0x3203, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x01,0x05,0x02,0x02,0x00,0x00,0x00}}, 
 
  414     { 0x3202, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x01,0x05,0x02,0x01,0x00,0x00,0x00}}, 
 
  415     { 0x3209, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x01,0x05,0x01,0x0C,0x00,0x00,0x00}}, 
 
  416     { 0x3208, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x01,0x05,0x01,0x0B,0x00,0x00,0x00}}, 
 
  417     { 0x320B, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x01,0x05,0x01,0x0E,0x00,0x00,0x00}}, 
 
  418     { 0x320E, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x01,0x01,0x01,0x01,0x00,0x00,0x00}}, 
 
  419     { 0x3201, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x04,0x01,0x06,0x01,0x00,0x00,0x00,0x00}}, 
 
  420     { 0x3212, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x04,0x01,0x03,0x01,0x06,0x00,0x00,0x00}}, 
 
  421     { 0x3215, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x04,0x05,0x01,0x13,0x00,0x00,0x00,0x00}}, 
 
  423     { 0x3301, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x04,0x01,0x05,0x03,0x0A,0x00,0x00,0x00}}, 
 
  424     { 0x3302, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x01,0x05,0x01,0x05,0x00,0x00,0x00}}, 
 
  425     { 0x3303, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x01,0x04,0x01,0x05,0x01,0x06,0x00,0x00,0x00}}, 
 
  427     { 0x3D02, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x04,0x04,0x02,0x03,0x01,0x04,0x00,0x00,0x00}}, 
 
  428     { 0x3D03, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x04,0x02,0x03,0x01,0x01,0x01,0x00,0x00}}, 
 
  429     { 0x3D07, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x04,0x02,0x01,0x01,0x04,0x00,0x00,0x00}}, 
 
  430     { 0x3D01, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x04,0x04,0x02,0x03,0x03,0x04,0x00,0x00,0x00}}, 
 
  431     { 0x3D06, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x04,0x02,0x04,0x02,0x00,0x00,0x00,0x00}}, 
 
  433     { 0x3F0B, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x05,0x30,0x04,0x06,0x00,0x00,0x00,0x00}}, 
 
  434     { 0x3F0C, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x07,0x02,0x01,0x03,0x01,0x0A,0x00,0x00}}, 
 
  435     { 0x3F0D, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x07,0x02,0x02,0x01,0x01,0x02,0x00,0x00}}, 
 
  436     { 0x3F05, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x04,0x04,0x06,0x02,0x01,0x00,0x00,0x00,0x00}}, 
 
  437     { 0x3F06, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x04,0x01,0x03,0x04,0x05,0x00,0x00,0x00,0x00}}, 
 
  438     { 0x3F08, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x04,0x04,0x04,0x04,0x01,0x01,0x00,0x00,0x00}}, 
 
  439     { 0x3F09, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x04,0x04,0x04,0x01,0x06,0x00,0x00,0x00}}, 
 
  440     { 0x3F0A, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x04,0x04,0x04,0x02,0x05,0x00,0x00,0x00}}, 
 
  442     { 0x8000, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x04,0x01,0x06,0x02,0x01,0x0B,0x00,0x00}}, 
 
  443     { 0x8007, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x04,0x01,0x06,0x02,0x01,0x0A,0x00,0x00}}, 
 
  445     { 0x3D09, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x04,0x02,0x03,0x03,0x05,0x00,0x00,0x00}}, 
 
  446     { 0x3D0A, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x05,0x04,0x02,0x03,0x02,0x01,0x00,0x00,0x00}}, 
 
  450     { 0x4406, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x03,0x02,0x01,0x02,0x0C,0x00,0x00,0x00}}, 
 
  451     { 0x5001, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x03,0x02,0x01,0x02,0x09,0x01,0x00,0x00}}, 
 
  452     { 0x5003, {0x06,0x0E,0x2B,0x34,0x01,0x01,0x01,0x02,0x03,0x02,0x01,0x02,0x0A,0x01,0x00,0x00}}, 
 
  482         return (
av_log2(len) >> 3) + 2;
 
  495     size = (
av_log2(len) >> 3) + 1;
 
  501         avio_w8(pb, len >> 8 * size & 0xff);
 
  534     int local_tag_number, i = 0;
 
  546         avio_wb16(pb, mxf_local_tag_batch[i].local_tag);
 
  550         for (i = 0; i < 
FF_ARRAY_ELEMS(mxf_user_comments_local_tag); i++) {
 
  551             avio_wb16(pb, mxf_user_comments_local_tag[i].local_tag);
 
  581     while (uls->
uid[0]) {
 
  590 #define DESCRIPTOR_COUNT(essence_container_count) \ 
  591     (essence_container_count > 1 ? essence_container_count + 1 : essence_container_count) 
  643     if (s->
oformat == &ff_mxf_opatom_muxer)
 
  691     if (size >= UINT16_MAX/2) {
 
  706     if (size >= UINT16_MAX/2) {
 
  719     const char *company = 
"FFmpeg";
 
  720     const char *product = s->
oformat != &ff_mxf_opatom_muxer ? 
"OP1a Muxer" : 
"OPAtom Muxer";
 
  825 static const uint8_t smpte_12m_timecode_track_data_ul[] = { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x01,0x01,0x03,0x02,0x01,0x01,0x00,0x00,0x00 };
 
  930         for (i = 0; i < 4; i++)
 
 1003 static const UID mxf_mpegvideo_descriptor_key = { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x51,0x00 };
 
 1004 static const UID mxf_wav_descriptor_key       = { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x48,0x00 };
 
 1005 static const UID mxf_aes3_descriptor_key      = { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x47,0x00 };
 
 1006 static const UID mxf_cdci_descriptor_key      = { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0D,0x01,0x01,0x01,0x01,0x01,0x28,0x00 };
 
 1007 static const UID mxf_generic_sound_descriptor_key = { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0D,0x01,0x01,0x01,0x01,0x01,0x42,0x00 };
 
 1016     unsigned desc_size = size+8+8+8+8+8+8+8+5+16+4+12+20+5;
 
 1034         display_height = 576;
 
 1036         display_height = 486;
 
 1071     case  608: f1 =  7; f2 = 320; 
break;
 
 1073     case  512: f1 =  7; f2 = 270; 
break;
 
 1074     case  720: f1 = 26; f2 =   0; 
break; 
 
 1075     case 1080: f1 = 21; f2 = 584; 
break;
 
 1076     default:   f1 =  0; f2 =   0; 
break;
 
 1126             profile_and_level |= 0x80; 
 
 1127         avio_w8(pb, profile_and_level);
 
 1138     int duration_size = 0;
 
 1140     if (s->
oformat == &ff_mxf_opatom_muxer)
 
 1145     if (duration_size > 0){
 
 1162             av_log(s, 
AV_LOG_WARNING, 
"the number of audio channels shall be 4 or 8 : the output will not comply to MXF D-10 specs, use -d10_channelcount to fix this\n");
 
 1164     } 
else if (s->
oformat == &ff_mxf_d10_muxer) {
 
 1166             av_log(s, 
AV_LOG_WARNING, 
"d10_channelcount < actual number of audio channels : some channels will be discarded\n");
 
 1168             av_log(s, 
AV_LOG_WARNING, 
"d10_channelcount shall be set to 4 or 8 : the output will not comply to MXF D-10 specs\n");
 
 1172             av_log(s, 
AV_LOG_ERROR, 
"-d10_channelcount requires MXF D-10 and will be ignored\n");
 
 1209 static const uint8_t mxf_indirect_value_utf16le[] = { 0x4c,0x00,0x02,0x10,0x01,0x00,0x00,0x00,0x00,0x06,0x0e,0x2b,0x34,0x01,0x04,0x01,0x01 };
 
 1218     if (!name_size || indirect_value_size == 13)
 
 1264     int user_comment_count = 0;
 
 1313         for (i = 0; i < user_comment_count; i++)
 
 1369     const char *material_package_name = 
NULL;
 
 1370     const char *file_package_name = 
NULL;
 
 1376        material_package_name = entry->
value;
 
 1379         file_package_name = entry->
value;
 
 1385                 file_package_name = entry->
value;
 
 1406         return pad & (KAG_SIZE-1);
 
 1413     int i, j, temporal_reordering = 0;
 
 1480                 temporal_reordering = 1;
 
 1497             int temporal_offset = 0;
 
 1504             if (temporal_reordering) {
 
 1505                 int pic_num_in_gop = i - key_index;
 
 1513                     temporal_offset = j - key_index - pic_num_in_gop;
 
 1560     int64_t header_byte_count_offset;
 
 1561     unsigned index_byte_count = 0;
 
 1562     uint64_t partition_offset = 
avio_tell(pb);
 
 1566         index_byte_count = 85 + 12+(s->
nb_streams+1)*6 +
 
 1569         index_byte_count = 80;
 
 1571     if (index_byte_count) {
 
 1611     header_byte_count_offset = 
avio_tell(pb);
 
 1616     avio_wb32(pb, index_byte_count ? indexsid : 0); 
 
 1627     if (s->
oformat == &ff_mxf_opatom_muxer)
 
 1635     if (write_metadata) {
 
 1638         unsigned header_byte_count;
 
 1648         avio_seek(pb, header_byte_count_offset, SEEK_SET);
 
 1674     header_cid = pkt->
data + 0x28;
 
 1675     cid = header_cid[0] << 24 | header_cid[1] << 16 | header_cid[2] << 8 | header_cid[3];
 
 1723     if(s->
oformat == &ff_mxf_opatom_muxer){
 
 1755     if (pkt->
size < 120000)
 
 1758     vs_pack  = pkt->
data + 80*5 + 48;
 
 1759     vsc_pack = pkt->
data + 80*5 + 53;
 
 1760     stype    = vs_pack[3] & 0x1f;
 
 1761     pal      = (vs_pack[3] >> 5) & 0x1;
 
 1763     if ((vs_pack[2] & 0x07) == 0x02)
 
 1776         frame_size = pal ? 288000 : 240000;
 
 1778             av_log(s, 
AV_LOG_ERROR, 
"source marked as interlaced but codec profile is progressive\n");
 
 1784         frame_size = pal ? 576000 : 480000;
 
 1788         frame_size = pal ? 288000 : 240000;
 
 1792         frame_size = pal ? 144000 : 120000;
 
 1795     sc->
index = ul_index + 16;
 
 1798     if(s->
oformat == &ff_mxf_opatom_muxer) {
 
 1819 static const struct {
 
 1825     {{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0a,0x04,0x01,0x02,0x02,0x01,0x32,0x20,0x01 },      0, 110, 0 }, 
 
 1826     {{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0a,0x04,0x01,0x02,0x02,0x01,0x32,0x21,0x01 }, 232960,   0, 1 }, 
 
 1827     {{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0a,0x04,0x01,0x02,0x02,0x01,0x32,0x21,0x02 }, 281088,   0, 1 }, 
 
 1828     {{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0a,0x04,0x01,0x02,0x02,0x01,0x32,0x21,0x03 }, 232960,   0, 0 }, 
 
 1829     {{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0a,0x04,0x01,0x02,0x02,0x01,0x32,0x21,0x04 }, 281088,   0, 0 }, 
 
 1830     {{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0a,0x04,0x01,0x02,0x02,0x01,0x32,0x21,0x08 }, 116736,   0, 0 }, 
 
 1831     {{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0a,0x04,0x01,0x02,0x02,0x01,0x32,0x21,0x09 }, 140800,   0, 0 }, 
 
 1832     {{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0a,0x04,0x01,0x02,0x02,0x01,0x32,0x30,0x01 },      0, 122, 0 }, 
 
 1833     {{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0a,0x04,0x01,0x02,0x02,0x01,0x32,0x31,0x01 }, 472576,   0, 1 }, 
 
 1834     {{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0a,0x04,0x01,0x02,0x02,0x01,0x32,0x31,0x02 }, 568832,   0, 1 }, 
 
 1835     {{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0a,0x04,0x01,0x02,0x02,0x01,0x32,0x31,0x03 }, 472576,   0, 0 }, 
 
 1836     {{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0a,0x04,0x01,0x02,0x02,0x01,0x32,0x31,0x04 }, 568832,   0, 0 }, 
 
 1837     {{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0a,0x04,0x01,0x02,0x02,0x01,0x32,0x31,0x08 }, 236544,   0, 0 }, 
 
 1838     {{ 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0a,0x04,0x01,0x02,0x02,0x01,0x32,0x31,0x09 }, 284672,   0, 0 }, 
 
 1849     uint32_t 
state = -1;
 
 1850     int extra_size = 512; 
 
 1854     if (pkt->
size > extra_size)
 
 1855         buf_end -= pkt->
size - extra_size; 
 
 1862         switch (state & 0x1f) {
 
 1868             if (e->
flags & 0x40) { 
 
 1889     frame_size = pkt->
size + extra_size;
 
 1890     for (i = 0; i < mxf_h264_num_codec_uls; i++) {
 
 1909     { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x01,0x10,0x00 }, 
 
 1910     { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x01,0x11,0x00 }, 
 
 1911     { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x02,0x02,0x00 }, 
 
 1912     { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x02,0x03,0x00 }, 
 
 1913     { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x03,0x02,0x00 }, 
 
 1914     { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x03,0x03,0x00 }, 
 
 1915     { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x04,0x02,0x00 }, 
 
 1916     { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x04,0x03,0x00 }, 
 
 1917     { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x05,0x02,0x00 }, 
 
 1918     { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x03,0x04,0x01,0x02,0x02,0x01,0x05,0x03,0x00 }, 
 
 1926         if (avctx->
level == 8) 
 
 1928         else if (avctx->
level == 4) 
 
 1930         else if (avctx->
level == 6) 
 
 1932     } 
else if (avctx->
profile == 0) { 
 
 1933         if (avctx->
level == 5) 
 
 1935         else if (avctx->
level == 2) 
 
 1948     for(i = 0; i < pkt->
size - 4; i++) {
 
 1949         c = (c<<8) + pkt->
data[i];
 
 1951             if ((pkt->
data[i+1] & 0xf0) == 0x10) { 
 
 1954             } 
else if (i + 5 < pkt->
size && (pkt->
data[i+1] & 0xf0) == 0x80) { 
 
 1960         } 
else if (c == 0x1b8) { 
 
 1961             if (pkt->
data[i+4]>>6 & 0x01) { 
 
 1963                 if (e->
flags & 0x40) 
 
 1966         } 
else if (c == 0x1b3) { 
 
 1968             switch ((pkt->
data[i+4]>>4) & 0xf) {
 
 1976         } 
else if (c == 0x100) { 
 
 1977             int pict_type = (pkt->
data[i+2]>>3) & 0x07;
 
 1979             if (pict_type == 2) { 
 
 1982             } 
else if (pict_type == 3) { 
 
 1988             } 
else if (!pict_type) {
 
 1994     if (s->
oformat != &ff_mxf_d10_muxer)
 
 2002     struct tm *time = 
gmtime_r(×tamp, &tmbuf);
 
 2005     return (uint64_t)(time->tm_year+1900) << 48 |
 
 2006            (uint64_t)(time->tm_mon+1)     << 40 |
 
 2007            (uint64_t) time->tm_mday       << 32 |
 
 2008                       time->tm_hour       << 24 |
 
 2009                       time->tm_min        << 16 |
 
 2017     uint64_t umid = seed + 0x5294713400000000LL;
 
 2044     int64_t timestamp = 0;
 
 2065             av_log(s, 
AV_LOG_ERROR, 
"there must be exactly one video stream and it must be the first one\n");
 
 2103             if (s->
oformat == &ff_mxf_d10_muxer) {
 
 2113                     else                          sc->
index = 13;
 
 2136             if (s->
oformat == &ff_mxf_d10_muxer) {
 
 2137                 if (st->
index != 1) {
 
 2146             } 
else if (s->
oformat == &ff_mxf_opatom_muxer) {
 
 2151                     av_log(s, 
AV_LOG_ERROR, 
"Only pcm_s16le and pcm_s24le audio codecs are implemented\n");
 
 2179             if (sc->
index == -1) {
 
 2181                        "codec not currently supported in container\n", i);
 
 2192         if (!present[sc->
index])
 
 2194         present[sc->
index]++;
 
 2197     if (s->
oformat == &ff_mxf_d10_muxer || s->
oformat == &ff_mxf_opatom_muxer) {
 
 2235 static const uint8_t system_metadata_pack_key[]        = { 0x06,0x0E,0x2B,0x34,0x02,0x05,0x01,0x01,0x0D,0x01,0x03,0x01,0x04,0x01,0x01,0x00 };
 
 2236 static const uint8_t system_metadata_package_set_key[] = { 0x06,0x0E,0x2B,0x34,0x02,0x43,0x01,0x01,0x0D,0x01,0x03,0x01,0x04,0x01,0x02,0x01 };
 
 2288     packet_size += 16 + 4;
 
 2295     pad = packet_size - pkt->
size - 16 - 4;
 
 2323     while (samples < end) {
 
 2327                 sample = 
AV_RL24(samples)<< 4;
 
 2330                 sample = 
AV_RL16(samples)<<12;
 
 2431     if (s->
oformat == &ff_mxf_opatom_muxer)
 
 2447     if (st->
index == 0) {
 
 2450             !(ie.
flags & 0x33)) { 
 
 2479     if (s->
oformat == &ff_mxf_d10_muxer) {
 
 2553         if (s->
oformat == &ff_mxf_opatom_muxer){
 
 2582     return err < 0 ? err : 0;
 
 2587     int i, stream_count = 0;
 
 2592     if (stream_count && (s->
nb_streams == stream_count || flush)) {
 
 2625         av_log(s, 
AV_LOG_TRACE, 
"out st:%d dts:%"PRId64
"\n", (*out).stream_index, (*out).dts);
 
 2645     return next->
dts > pkt->
dts ||
 
 2655 #define MXF_COMMON_OPTIONS \ 
 2656     { "signal_standard", "Force/set Sigal Standard",\ 
 2657       offsetof(MXFContext, signal_standard), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 7, AV_OPT_FLAG_ENCODING_PARAM, "signal_standard"},\ 
 2658     { "bt601", "ITU-R BT.601 and BT.656, also SMPTE 125M (525 and 625 line interlaced)",\ 
 2659       0, AV_OPT_TYPE_CONST, {.i64 = 1}, -1, 7, AV_OPT_FLAG_ENCODING_PARAM, "signal_standard"},\ 
 2660     { "bt1358", "ITU-R BT.1358 and ITU-R BT.799-3, also SMPTE 293M (525 and 625 line progressive)",\ 
 2661       0, AV_OPT_TYPE_CONST, {.i64 = 2}, -1, 7, AV_OPT_FLAG_ENCODING_PARAM, "signal_standard"},\ 
 2662     { "smpte347m", "SMPTE 347M (540 Mbps mappings)",\ 
 2663       0, AV_OPT_TYPE_CONST, {.i64 = 3}, -1, 7, AV_OPT_FLAG_ENCODING_PARAM, "signal_standard"},\ 
 2664     { "smpte274m", "SMPTE 274M (1125 line)",\ 
 2665       0, AV_OPT_TYPE_CONST, {.i64 = 4}, -1, 7, AV_OPT_FLAG_ENCODING_PARAM, "signal_standard"},\ 
 2666     { "smpte296m", "SMPTE 296M (750 line progressive)",\ 
 2667       0, AV_OPT_TYPE_CONST, {.i64 = 5}, -1, 7, AV_OPT_FLAG_ENCODING_PARAM, "signal_standard"},\ 
 2668     { "smpte349m", "SMPTE 349M (1485 Mbps mappings)",\ 
 2669       0, AV_OPT_TYPE_CONST, {.i64 = 6}, -1, 7, AV_OPT_FLAG_ENCODING_PARAM, "signal_standard"},\ 
 2670     { "smpte428", "SMPTE 428-1 DCDM",\ 
 2671       0, AV_OPT_TYPE_CONST, {.i64 = 7}, -1, 7, AV_OPT_FLAG_ENCODING_PARAM, "signal_standard"}, 
 2677     { 
"store_user_comments", 
"",
 
 2690     { 
"d10_channelcount", 
"Force/set channelcount in generic sound essence descriptor",
 
 2693     { 
"store_user_comments", 
"",
 
 2706     { 
"mxf_audio_edit_rate", 
"Audio edit rate for timecode",
 
 2722     .mime_type         = 
"application/mxf",
 
 2723     .extensions        = 
"mxf",
 
 2732     .priv_class        = &mxf_muxer_class,
 
 2738     .mime_type         = 
"application/mxf",
 
 2747     .priv_class        = &mxf_d10_muxer_class,
 
 2751     .
name              = 
"mxf_opatom",
 
 2753     .mime_type         = 
"application/mxf",
 
 2754     .extensions        = 
"mxf",
 
 2763     .priv_class        = &mxf_opatom_muxer_class,
 
static uint64_t mxf_parse_timestamp(time_t timestamp)
void avio_wb64(AVIOContext *s, uint64_t val)
uint32_t tagged_value_count
void avio_wl16(AVIOContext *s, unsigned int val)
#define AVERROR_INVALIDDATA
Invalid data found when processing input. 
static int mxf_utf16_local_tag_length(const char *utf8_str)
static void mxf_write_d10_video_packet(AVFormatContext *s, AVStream *st, AVPacket *pkt)
static const uint8_t header_closed_partition_key[]
#define GET_UTF8(val, GET_BYTE, ERROR)
Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form. 
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
mpeg2/4 4:2:0, h264 default for 4:2:0 
int avio_put_str16be(AVIOContext *s, const char *str)
Convert an UTF-8 string to UTF-16BE and write it. 
static void flush(AVCodecContext *avctx)
static void mxf_write_index_table_segment(AVFormatContext *s)
#define PRINT_KEY(pc, s, x)
static const uint8_t klv_fill_key[]
static const UID mxf_mpegvideo_descriptor_key
#define AV_LOG_WARNING
Something somehow does not look correct. 
int64_t bit_rate
the average bitrate 
#define LIBAVUTIL_VERSION_INT
unsigned char * buf_ptr
Current position in the buffer. 
static void klv_encode_ber9_length(AVIOContext *pb, uint64_t len)
int index
index in mxf_essence_container_uls table 
static void mxf_write_structural_component(AVFormatContext *s, AVStream *st, enum MXFMetadataSetType type)
unsigned body_partitions_count
const int * samples
current samples per frame, pointer to samples_per_frame 
static int mxf_init_timecode(AVFormatContext *s, AVStream *st, AVRational rate)
int index
stream index in AVFormatContext 
static const UID mxf_cdci_descriptor_key
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext. 
AVFormatInternal * internal
An opaque field for libavformat internal usage. 
int interlaced
whether picture is interlaced 
static const uint8_t body_partition_key[]
AVOutputFormat ff_mxf_muxer
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx. 
int avpriv_dnxhd_get_interlaced(int cid)
struct AVRational time_base
static void mxf_free(AVFormatContext *s)
static void mxf_write_uuid(AVIOContext *pb, enum MXFMetadataSetType type, int value)
static void mxf_write_generic_desc(AVFormatContext *s, AVStream *st, const UID key, unsigned size)
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_RL16
UID track_essence_element_key
static void mxf_write_common_fields(AVFormatContext *s, AVStream *st)
int block_align
number of bytes per packet if constant and known or 0 Used by some WAV based audio codecs...
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width. 
static int mxf_write_header(AVFormatContext *s)
static void klv_encode_ber4_length(AVIOContext *pb, int len)
static const uint8_t multiple_desc_ul[]
uint8_t slice_count
index slice count minus 1 (1 if no audio, 0 otherwise) 
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
static const UID mxf_generic_sound_descriptor_key
static int klv_encode_ber_length(AVIOContext *pb, uint64_t len)
static void mxf_write_klv_fill(AVFormatContext *s)
static void mxf_write_refs_count(AVIOContext *pb, int ref_count)
int timecode_base
rounded time code base (25 or 30) 
int av_timecode_init_from_string(AVTimecode *tc, AVRational rate, const char *str, void *log_ctx)
Parse timecode representation (hh:mm:ss[:;. 
static int mxf_write_packet(AVFormatContext *s, AVPacket *pkt)
AVOutputFormat ff_mxf_d10_muxer
void avio_wl32(AVIOContext *s, unsigned int val)
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed. 
static unsigned klv_fill_size(uint64_t size)
const MXFSamplesPerFrame * ff_mxf_get_samples_per_frame(AVFormatContext *s, AVRational time_base)
static void mxf_write_cdci_common(AVFormatContext *s, AVStream *st, const UID key, unsigned size)
static const UID mxf_mpeg2_codec_uls[]
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development. 
static av_cold int end(AVCodecContext *avctx)
int ff_audio_interleave_init(AVFormatContext *s, const int *samples_per_frame, AVRational time_base)
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
AVStream ** streams
A list of all streams in the file. 
int avpriv_dnxhd_get_frame_size(int cid)
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key. 
int flags
Flags modifying the (de)muxer behaviour. 
int start
timecode frame start (first base frame number) 
static void mxf_write_track(AVFormatContext *s, AVStream *st, enum MXFMetadataSetType type)
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext. 
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
static int interleave_packet(AVFormatContext *s, AVPacket *out, AVPacket *in, int flush)
Interleave an AVPacket correctly so it can be muxed. 
AVRational audio_edit_rate
unsigned slice_offset
offset of audio slice 
static const uint8_t index_table_segment_key[]
#define AV_OPT_FLAG_ENCODING_PARAM
a generic parameter which can be set by the user for muxing or encoding 
const uint8_t * avpriv_find_start_code(const uint8_t *p, const uint8_t *end, uint32_t *state)
struct AVOutputFormat * oformat
The output container format. 
int av_timecode_init(AVTimecode *tc, AVRational rate, int flags, int frame_start, void *log_ctx)
Init a timecode struct with the passed parameters. 
H.264 / AVC / MPEG4 part10 codec. 
AudioInterleaveContext aic
static const AVClass mxf_opatom_muxer_class
static const uint8_t umid_ul[]
int av_reallocp_array(void *ptr, size_t nmemb, size_t size)
AVCodecID
Identify the syntax and semantics of the bitstream. 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
AVDictionary * metadata
Metadata that applies to the whole file. 
int av_get_bits_per_sample(enum AVCodecID codec_id)
Return codec bits per sample. 
static void mxf_write_system_item(AVFormatContext *s)
#define EDIT_UNITS_PER_BODY
void(* write_desc)(AVFormatContext *, AVStream *)
static const uint8_t header_metadata_key[]
partial key for header metadata 
static const uint8_t mxf_indirect_value_utf16le[]
int ff_audio_rechunk_interleave(AVFormatContext *s, AVPacket *out, AVPacket *pkt, int flush, int(*get_packet)(AVFormatContext *, AVPacket *, AVPacket *, int), int(*compare_ts)(AVFormatContext *, AVPacket *, AVPacket *))
Rechunk audio PCM packets per AudioInterleaveContext->samples_per_frame and interleave them correctly...
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static const uint8_t header_open_partition_key[]
static void mxf_write_preface(AVFormatContext *s)
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers. 
static void mxf_write_random_index_pack(AVFormatContext *s)
static void mxf_write_cdci_desc(AVFormatContext *s, AVStream *st)
simple assert() macros that are a bit more flexible than ISO C assert(). 
static int mxf_write_opatom_body_partition(AVFormatContext *s)
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_RL24
static void mxf_write_metadata_key(AVIOContext *pb, unsigned int value)
#define MXF_COMMON_OPTIONS
int order
interleaving order if dts are equal 
static void mxf_write_d10_audio_packet(AVFormatContext *s, AVStream *st, AVPacket *pkt)
static const uint8_t primer_pack_key[]
static const uint8_t system_metadata_pack_key[]
static int mxf_get_essence_container_ul_index(enum AVCodecID id)
static struct tm * gmtime_r(const time_t *clock, struct tm *result)
AVCodecContext * codec
Codec context associated with this stream. 
static void mxf_write_content_storage(AVFormatContext *s)
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction. 
static int klv_ber_length(uint64_t len)
unsigned int nb_streams
Number of elements in AVFormatContext.streams. 
int seekable
A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable. 
static int mxf_parse_h264_frame(AVFormatContext *s, AVStream *st, AVPacket *pkt, MXFIndexEntry *e)
int void avio_flush(AVIOContext *s)
Force flushing of buffered data. 
static const UID mxf_wav_descriptor_key
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code. 
void ffio_fill(AVIOContext *s, int b, int count)
static const uint8_t op1a_ul[]
complete key for operation pattern, partitions, and primer pack 
static int mxf_parse_dnxhd_frame(AVFormatContext *s, AVStream *st, AVPacket *pkt)
int width
picture width / height. 
uint64_t * body_partition_offset
typedef void(APIENTRY *FF_PFNGLACTIVETEXTUREPROC)(GLenum texture)
GLsizei GLboolean const GLfloat * value
static int write_trailer(AVFormatContext *s1)
ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2. 
static const AVOption mxf_options[]
void avio_wb24(AVIOContext *s, unsigned int val)
static const AVClass mxf_muxer_class
static int mxf_write_partition(AVFormatContext *s, int bodysid, int indexsid, const uint8_t *key, int write_metadata)
static void mxf_write_local_tag_utf16(AVIOContext *pb, int tag, const char *value)
static int mxf_write_header_metadata_sets(AVFormatContext *s)
AVStream * timecode_track
static const UID mxf_aes3_descriptor_key
const MXFCodecUL ff_mxf_data_definition_uls[]
SMPTE RP224 http://www.smpte-ra.org/mdd/index.html. 
static const uint8_t system_metadata_package_set_key[]
int edit_unit_byte_count
fixed edit unit byte count 
preferred ID for MPEG-1/2 video decoding 
#define FF_ARRAY_ELEMS(a)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome. 
static void mxf_write_wav_common(AVFormatContext *s, AVStream *st, const UID key, unsigned size)
static int mxf_write_user_comments(AVFormatContext *s, const AVDictionary *m)
static void mxf_write_local_tag(AVIOContext *pb, int size, int tag)
static void mxf_write_aes3_desc(AVFormatContext *s, AVStream *st)
int last_indexed_edit_unit
static const AVClass mxf_d10_muxer_class
static int mxf_parse_mpeg2_frame(AVFormatContext *s, AVStream *st, AVPacket *pkt, MXFIndexEntry *e)
enum AVMediaType codec_type
int sample_rate
samples per second 
AVIOContext * pb
I/O context. 
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
static const UID * mxf_get_mpeg2_codec_ul(AVCodecContext *avctx)
void avio_w8(AVIOContext *s, int b)
main external API structure. 
void av_packet_unref(AVPacket *pkt)
Wipe the packet. 
static void mxf_write_essence_container_refs(AVFormatContext *s)
AVRational rate
frame rate in rational form 
int closed_gop
gop is closed, used in mpeg-2 frame parsing 
uint64_t timestamp
timestamp, as year(16),month(8),day(8),hour(8),minutes(8),msec/4(8) 
Describe the class of an AVClass context structure. 
AVRational aspect_ratio
display aspect ratio 
static const MXFLocalTagPair mxf_local_tag_batch[]
SMPTE RP210 http://www.smpte-ra.org/mdd/index.html. 
rational number numerator/denominator 
int sample_size
size of one sample all channels included 
static uint64_t mxf_utf16len(const char *utf8_str)
static void mxf_write_primer_pack(AVFormatContext *s)
int avio_put_str16le(AVIOContext *s, const char *str)
Convert an UTF-8 string to UTF-16LE and write it. 
static const struct @182 mxf_essence_mappings[]
MXFIndexEntry * index_entries
static void mxf_write_timecode_component(AVFormatContext *s, AVStream *st, enum MXFMetadataSetType type)
static const uint8_t uuid_base[]
void avio_wb16(AVIOContext *s, unsigned int val)
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational. 
static const MXFContainerEssenceEntry mxf_essence_container_uls[]
static const MXFLocalTagPair mxf_user_comments_local_tag[]
static int mxf_interleave_get_packet(AVFormatContext *s, AVPacket *out, AVPacket *pkt, int flush)
int64_t footer_partition_offset
static const uint8_t smpte_12m_timecode_track_data_ul[]
static void mxf_write_identification(AVFormatContext *s)
void ff_audio_interleave_close(AVFormatContext *s)
static int mxf_compare_timestamps(AVFormatContext *s, AVPacket *next, AVPacket *pkt)
static void mxf_write_package(AVFormatContext *s, enum MXFMetadataSetType type, const char *package_name)
common internal api header. 
struct AVPacketList * next
static const uint8_t footer_partition_key[]
static int mxf_write_essence_container_data(AVFormatContext *s)
void av_init_packet(AVPacket *pkt)
Initialize optional fields of a packet with default values. 
#define AVERROR_UNKNOWN
Unknown error, typically from an external library. 
static const MXFCodecUL * mxf_get_data_definition_ul(int type)
int field_dominance
tff=1, bff=2 
static const AVOption d10_options[]
int last_key_index
index of last key frame 
int channels
number of audio channels 
static void mxf_write_generic_sound_common(AVFormatContext *s, AVStream *st, const UID key, unsigned size)
void * priv_data
Format private data. 
static const struct @183 mxf_h264_codec_uls[]
static void mxf_gen_umid(AVFormatContext *s)
static void write_header(FFV1Context *f)
uint8_t umid[16]
unique material identifier 
static void mxf_write_multi_descriptor(AVFormatContext *s)
static void mxf_write_wav_desc(AVFormatContext *s, AVStream *st)
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
void avio_wb32(AVIOContext *s, unsigned int val)
static const AVOption opatom_options[]
enum AVFieldOrder field_order
Field order. 
#define AV_DICT_IGNORE_SUFFIX
Return first entry in a dictionary whose first part corresponds to the search key, ignoring the suffix of the found key string. 
unsigned edit_units_count
uint32_t av_get_random_seed(void)
Get a seed to use in conjunction with random functions. 
static void mxf_write_sequence(AVFormatContext *s, AVStream *st, enum MXFMetadataSetType type)
mpeg1 4:2:0, jpeg 4:2:0, h263 4:2:0 
static const uint8_t opatom_ul[]
#define DESCRIPTOR_COUNT(essence_container_count)
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented...
int depth
Number of bits in the component. 
static int mxf_write_opatom_packet(AVFormatContext *s, AVPacket *pkt, MXFIndexEntry *ie)
uint32_t flags
flags such as drop frame, +24 hours support, ... 
static void mxf_write_mpegvideo_desc(AVFormatContext *s, AVStream *st)
static void mxf_write_umid(AVFormatContext *s, int type)
This structure stores compressed data. 
static int mxf_parse_dv_frame(AVFormatContext *s, AVStream *st, AVPacket *pkt)
static int write_packet(AVFormatContext *s1, AVPacket *pkt)
int essence_container_count
static int mxf_write_tagged_value(AVFormatContext *s, const char *name, const char *value)
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
static const uint8_t random_index_pack_key[]
static void mxf_write_generic_sound_desc(AVFormatContext *s, AVStream *st)
static int mxf_interleave(AVFormatContext *s, AVPacket *out, AVPacket *pkt, int flush)
struct AVPacketList * last_in_packet_buffer
last packet in packet_buffer for this stream when muxing. 
AVTimecode tc
timecode context 
static int mxf_write_footer(AVFormatContext *s)
int64_t rc_max_rate
maximum bitrate 
uint32_t av_timecode_get_smpte_from_framenum(const AVTimecode *tc, int framenum)
Convert frame number to SMPTE 12M binary representation. 
AVOutputFormat ff_mxf_opatom_muxer