35 static const uint8_t dv_audio_shuffle525[10][9] = {
 
   36     {  0, 30, 60, 20, 50, 80, 10, 40, 70 }, 
 
   37     {  6, 36, 66, 26, 56, 86, 16, 46, 76 },
 
   38     { 12, 42, 72,  2, 32, 62, 22, 52, 82 },
 
   39     { 18, 48, 78,  8, 38, 68, 28, 58, 88 },
 
   40     { 24, 54, 84, 14, 44, 74,  4, 34, 64 },
 
   42     {  1, 31, 61, 21, 51, 81, 11, 41, 71 }, 
 
   43     {  7, 37, 67, 27, 57, 87, 17, 47, 77 },
 
   44     { 13, 43, 73,  3, 33, 63, 23, 53, 83 },
 
   45     { 19, 49, 79,  9, 39, 69, 29, 59, 89 },
 
   46     { 25, 55, 85, 15, 45, 75,  5, 35, 65 },
 
   49 static const uint8_t dv_audio_shuffle625[12][9] = {
 
   50     {  0, 36,  72, 26, 62,  98, 16, 52,  88 }, 
 
   51     {  6, 42,  78, 32, 68, 104, 22, 58,  94 },
 
   52     { 12, 48,  84,  2, 38,  74, 28, 64, 100 },
 
   53     { 18, 54,  90,  8, 44,  80, 34, 70, 106 },
 
   54     { 24, 60,  96, 14, 50,  86,  4, 40,  76 },
 
   55     { 30, 66, 102, 20, 56,  92, 10, 46,  82 },
 
   57     {  1, 37,  73, 27, 63,  99, 17, 53,  89 }, 
 
   58     {  7, 43,  79, 33, 69, 105, 23, 59,  95 },
 
   59     { 13, 49,  85,  3, 39,  75, 29, 65, 101 },
 
   60     { 19, 55,  91,  9, 45,  81, 35, 71, 107 },
 
   61     { 25, 61,  97, 15, 51,  87,  5, 41,  77 },
 
   62     { 31, 67, 103, 21, 57,  93, 11, 47,  83 },
 
   66 static const uint8_t block_sizes_dv2550[8] = {
 
   67     112, 112, 112, 112, 80, 80, 0, 0,
 
   70 static const uint8_t block_sizes_dv100[8] = {
 
   71     80, 80, 80, 80, 80, 80, 64, 64,
 
   80       .time_base          = { 1001, 30000 },
 
   84       .sar                = { { 8, 9 }, { 32, 27 } },
 
   87       .block_sizes        = block_sizes_dv2550,
 
   89       .audio_min_samples  = { 1580, 1452, 1053 }, 
 
   90       .audio_samples_dist = { 1600, 1602, 1602, 1602, 1602 },  
 
   91       .audio_shuffle      = dv_audio_shuffle525, },
 
   97       .time_base          = { 1, 25 },
 
  101       .sar                = { { 16, 15 }, { 64, 45 } },
 
  104       .block_sizes        = block_sizes_dv2550,
 
  106       .audio_min_samples  = { 1896, 1742, 1264 }, 
 
  107       .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 },
 
  108       .audio_shuffle      = dv_audio_shuffle625, },
 
  111       .frame_size         = 144000, 
 
  114       .time_base          = { 1, 25 },
 
  118       .sar                = { { 16, 15 }, { 64, 45 } },
 
  121       .block_sizes        = block_sizes_dv2550,
 
  123       .audio_min_samples  = { 1896, 1742, 1264 }, 
 
  124       .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 },
 
  125       .audio_shuffle      = dv_audio_shuffle625, },
 
  128       .frame_size         = 240000, 
 
  131       .time_base          = { 1001, 30000 },
 
  135       .sar                = { { 8, 9 }, { 32, 27 } },
 
  138       .block_sizes        = block_sizes_dv2550,
 
  140       .audio_min_samples  = { 1580, 1452, 1053 }, 
 
  141       .audio_samples_dist = { 1600, 1602, 1602, 1602, 1602 },  
 
  142       .audio_shuffle      = dv_audio_shuffle525, },
 
  145       .frame_size         = 288000, 
 
  148       .time_base          = { 1, 25 },
 
  152       .sar                = { { 16, 15 }, { 64, 45 } },
 
  155       .block_sizes        = block_sizes_dv2550,
 
  157       .audio_min_samples  = { 1896, 1742, 1264 }, 
 
  158       .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 },
 
  159       .audio_shuffle      = dv_audio_shuffle625, },
 
  162       .frame_size         = 480000, 
 
  165       .time_base          = { 1001, 30000 },
 
  169       .sar                = { { 1, 1 }, { 3, 2 } },
 
  172       .block_sizes        = block_sizes_dv100,
 
  174       .audio_min_samples  = { 1580, 1452, 1053 }, 
 
  175       .audio_samples_dist = { 1600, 1602, 1602, 1602, 1602 },  
 
  176       .audio_shuffle      = dv_audio_shuffle525, },
 
  179       .frame_size         = 576000, 
 
  182       .time_base          = { 1, 25 },
 
  186       .sar                = { { 1, 1 }, { 4, 3 } },
 
  189       .block_sizes        = block_sizes_dv100,
 
  191       .audio_min_samples  = { 1896, 1742, 1264 }, 
 
  192       .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 },
 
  193       .audio_shuffle      = dv_audio_shuffle625, },
 
  196       .frame_size         = 240000, 
 
  199       .time_base          = { 1001, 60000 },
 
  203       .sar                = { { 1, 1 }, { 4, 3 } },
 
  206       .block_sizes        = block_sizes_dv100,
 
  208       .audio_min_samples  = { 1580, 1452, 1053 }, 
 
  209       .audio_samples_dist = { 1600, 1602, 1602, 1602, 1602 },  
 
  210       .audio_shuffle      = dv_audio_shuffle525, },
 
  213       .frame_size         = 288000, 
 
  216       .time_base          = { 1, 50 },
 
  220       .sar                = { { 1, 1 }, { 4, 3 } },
 
  223       .block_sizes        = block_sizes_dv100,
 
  225       .audio_min_samples  = { 1896, 1742, 1264 }, 
 
  226       .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 },
 
  227       .audio_shuffle      = dv_audio_shuffle625, },
 
  230       .frame_size         = 144000, 
 
  233       .time_base          = { 1, 25 },
 
  237       .sar                = { { 16, 15 }, { 64, 45 } },
 
  240       .block_sizes        = block_sizes_dv2550,
 
  242       .audio_min_samples  = { 1896, 1742, 1264 }, 
 
  243       .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 },
 
  244       .audio_shuffle      = dv_audio_shuffle625, }
 
  253                "Frame size: %dx%d; pixel format: %s, framerate: %d/%d\n",
 
  262                                        const uint8_t *
frame, 
unsigned buf_size)
 
  265     int i, dsf, stype, pal;
 
  270     dsf   = (
frame[3] & 0x80) >> 7;
 
  271     stype = 
frame[80 * 5 + 48 + 3] & 0x1f;
 
  272     pal   = !!(
frame[80 * 5 + 48 + 3] & 0x20);
 
  275     if ((dsf == 1 && stype == 0 && 
frame[4] & 0x07 ) ||
 
  277         return &dv_profiles[2];
 
  280     if (dsf == 0 && pal == 1 && stype == dv_profiles[1].video_stype && buf_size == dv_profiles[1].
frame_size)
 
  281         return &dv_profiles[1];
 
  284         if (dsf == dv_profiles[
i].dsf && stype == dv_profiles[
i].video_stype)
 
  285             return &dv_profiles[
i];
 
  292     if ((
frame[3] & 0x7f) == 0x3f && 
frame[80 * 5 + 48 + 3] == 0xff)
 
  293         return &dv_profiles[dsf];
 
  300                                        const uint8_t *
frame, 
unsigned buf_size)
 
  323     int invalid_framerate = frame_rate.
num == 0 || frame_rate.
den == 0;
 
  330             if( invalid_framerate || 
av_div_q(dv_profiles[
i].time_base, frame_rate).
num == 1 )
 
  331                 return &dv_profiles[
i];