74      5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,
 
   75      5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5,  5, 10,
 
   76     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
 
   77     10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 15
 
   81     3, 3, 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 9
 
   88 static const uint8_t uquad_sign_bits[81] = {
 
   89     0, 1, 1, 1, 2, 2, 1, 2, 2,
 
   90     1, 2, 2, 2, 3, 3, 2, 3, 3,
 
   91     1, 2, 2, 2, 3, 3, 2, 3, 3,
 
   92     1, 2, 2, 2, 3, 3, 2, 3, 3,
 
   93     2, 3, 3, 3, 4, 4, 3, 4, 4,
 
   94     2, 3, 3, 3, 4, 4, 3, 4, 4,
 
   95     1, 2, 2, 2, 3, 3, 2, 3, 3,
 
   96     2, 3, 3, 3, 4, 4, 3, 4, 4,
 
   97     2, 3, 3, 3, 4, 4, 3, 4, 4
 
  100 static const uint8_t upair7_sign_bits[64] = {
 
  101     0, 1, 1, 1, 1, 1, 1, 1,
 
  102     1, 2, 2, 2, 2, 2, 2, 2,
 
  103     1, 2, 2, 2, 2, 2, 2, 2,
 
  104     1, 2, 2, 2, 2, 2, 2, 2,
 
  105     1, 2, 2, 2, 2, 2, 2, 2,
 
  106     1, 2, 2, 2, 2, 2, 2, 2,
 
  107     1, 2, 2, 2, 2, 2, 2, 2,
 
  108     1, 2, 2, 2, 2, 2, 2, 2,
 
  111 static const uint8_t upair12_sign_bits[169] = {
 
  112     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 
  113     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  114     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  115     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  116     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  117     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  118     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  119     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  120     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  121     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  122     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  123     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  124     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
 
  127 static const uint8_t esc_sign_bits[289] = {
 
  128     0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
 
  129     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  130     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  131     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  132     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  133     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  134     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  135     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  136     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  137     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  138     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  139     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  140     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  141     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  142     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  143     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
 
  144     1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
 
  148 #ifndef USE_REALLY_FULL_SEARCH 
  151     float ax, bx, cx, dx;
 
  153     for (i = 0; i < 
size; i += 4) {
 
  177 static float find_max_val(
int group_len, 
int swb_size, 
const float *scaled) {
 
  180     for (w2 = 0; w2 < group_len; w2++) {
 
  181         for (i = 0; i < swb_size; i++) {
 
  182             maxval = 
FFMAX(maxval, scaled[w2*128+i]);
 
  190     float Q34 = sqrtf(Q * sqrtf(Q));
 
  192     qmaxval = maxval * Q34 + 0.4054f;
 
  193     if      (qmaxval ==  0) cb = 0;
 
  194     else if (qmaxval ==  1) cb = 1;
 
  195     else if (qmaxval ==  2) cb = 3;
 
  196     else if (qmaxval <=  4) cb = 5;
 
  197     else if (qmaxval <=  7) cb = 7;
 
  198     else if (qmaxval <= 12) cb = 9;
 
  206 static void quantize_and_encode_band_cost_SQUAD_mips(
struct AACEncContext *
s,
 
  208                                                      const float *scaled, 
int size, 
int scale_idx,
 
  209                                                      int cb, 
const float lambda, 
const float uplim,
 
  214     int qc1, qc2, qc3, qc4;
 
  221     for (i = 0; i < 
size; i += 4) {
 
  223         int *in_int = (
int *)&in[i];
 
  226         qc1 = scaled[i  ] * Q34 + 0.4054f;
 
  227         qc2 = scaled[i+1] * Q34 + 0.4054f;
 
  228         qc3 = scaled[i+2] * Q34 + 0.4054f;
 
  229         qc4 = scaled[i+3] * Q34 + 0.4054f;
 
  233             ".set noreorder                 \n\t" 
  235             "slt    %[qc1], $zero,  %[qc1]  \n\t" 
  236             "slt    %[qc2], $zero,  %[qc2]  \n\t" 
  237             "slt    %[qc3], $zero,  %[qc3]  \n\t" 
  238             "slt    %[qc4], $zero,  %[qc4]  \n\t" 
  239             "lw     %[t0],  0(%[in_int])    \n\t" 
  240             "lw     %[t1],  4(%[in_int])    \n\t" 
  241             "lw     %[t2],  8(%[in_int])    \n\t" 
  242             "lw     %[t3],  12(%[in_int])   \n\t" 
  243             "srl    %[t0],  %[t0],  31      \n\t" 
  244             "srl    %[t1],  %[t1],  31      \n\t" 
  245             "srl    %[t2],  %[t2],  31      \n\t" 
  246             "srl    %[t3],  %[t3],  31      \n\t" 
  247             "subu   %[t4],  $zero,  %[qc1]  \n\t" 
  248             "subu   %[t5],  $zero,  %[qc2]  \n\t" 
  249             "subu   %[t6],  $zero,  %[qc3]  \n\t" 
  250             "subu   %[t7],  $zero,  %[qc4]  \n\t" 
  251             "movn   %[qc1], %[t4],  %[t0]   \n\t" 
  252             "movn   %[qc2], %[t5],  %[t1]   \n\t" 
  253             "movn   %[qc3], %[t6],  %[t2]   \n\t" 
  254             "movn   %[qc4], %[t7],  %[t3]   \n\t" 
  258             : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
  259               [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
  260               [
t0]
"=&r"(
t0), [t1]
"=&r"(t1), [
t2]
"=&r"(
t2), [t3]
"=&r"(t3),
 
  261               [
t4]
"=&r"(
t4), [t5]
"=&r"(t5), [
t6]
"=&r"(
t6), [t7]
"=&r"(t7)
 
  262             : [in_int]
"r"(in_int)
 
  275         put_bits(pb, p_bits[curidx], p_codes[curidx]);
 
  279 static void quantize_and_encode_band_cost_UQUAD_mips(
struct AACEncContext *s,
 
  281                                                      const float *scaled, 
int size, 
int scale_idx,
 
  282                                                      int cb, 
const float lambda, 
const float uplim,
 
  287     int qc1, qc2, qc3, qc4;
 
  294     for (i = 0; i < 
size; i += 4) {
 
  295         int curidx, sign, 
count;
 
  296         int *in_int = (
int *)&in[i];
 
  298         unsigned int v_codes;
 
  301         qc1 = scaled[i  ] * Q34 + 0.4054f;
 
  302         qc2 = scaled[i+1] * Q34 + 0.4054f;
 
  303         qc3 = scaled[i+2] * Q34 + 0.4054f;
 
  304         qc4 = scaled[i+3] * Q34 + 0.4054f;
 
  308             ".set noreorder                         \n\t" 
  310             "ori    %[t4],      $zero,      2       \n\t" 
  311             "ori    %[sign],    $zero,      0       \n\t" 
  312             "slt    %[t0],      %[t4],      %[qc1]  \n\t" 
  313             "slt    %[t1],      %[t4],      %[qc2]  \n\t" 
  314             "slt    %[t2],      %[t4],      %[qc3]  \n\t" 
  315             "slt    %[t3],      %[t4],      %[qc4]  \n\t" 
  316             "movn   %[qc1],     %[t4],      %[t0]   \n\t" 
  317             "movn   %[qc2],     %[t4],      %[t1]   \n\t" 
  318             "movn   %[qc3],     %[t4],      %[t2]   \n\t" 
  319             "movn   %[qc4],     %[t4],      %[t3]   \n\t" 
  320             "lw     %[t0],      0(%[in_int])        \n\t" 
  321             "lw     %[t1],      4(%[in_int])        \n\t" 
  322             "lw     %[t2],      8(%[in_int])        \n\t" 
  323             "lw     %[t3],      12(%[in_int])       \n\t" 
  324             "slt    %[t0],      %[t0],      $zero   \n\t" 
  325             "movn   %[sign],    %[t0],      %[qc1]  \n\t" 
  326             "slt    %[t1],      %[t1],      $zero   \n\t" 
  327             "slt    %[t2],      %[t2],      $zero   \n\t" 
  328             "slt    %[t3],      %[t3],      $zero   \n\t" 
  329             "sll    %[t0],      %[sign],    1       \n\t" 
  330             "or     %[t0],      %[t0],      %[t1]   \n\t" 
  331             "movn   %[sign],    %[t0],      %[qc2]  \n\t" 
  332             "slt    %[t4],      $zero,      %[qc1]  \n\t" 
  333             "slt    %[t1],      $zero,      %[qc2]  \n\t" 
  334             "slt    %[count],   $zero,      %[qc3]  \n\t" 
  335             "sll    %[t0],      %[sign],    1       \n\t" 
  336             "or     %[t0],      %[t0],      %[t2]   \n\t" 
  337             "movn   %[sign],    %[t0],      %[qc3]  \n\t" 
  338             "slt    %[t2],      $zero,      %[qc4]  \n\t" 
  339             "addu   %[count],   %[count],   %[t4]   \n\t" 
  340             "addu   %[count],   %[count],   %[t1]   \n\t" 
  341             "sll    %[t0],      %[sign],    1       \n\t" 
  342             "or     %[t0],      %[t0],      %[t3]   \n\t" 
  343             "movn   %[sign],    %[t0],      %[qc4]  \n\t" 
  344             "addu   %[count],   %[count],   %[t2]   \n\t" 
  348             : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
  349               [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
  350               [sign]
"=&r"(sign), [count]
"=&r"(count),
 
  351               [
t0]
"=&r"(
t0), [t1]
"=&r"(t1), [
t2]
"=&r"(
t2), [t3]
"=&r"(t3),
 
  353             : [in_int]
"r"(in_int)
 
  365         v_codes = (p_codes[curidx] << 
count) | (sign & ((1 << count) - 1));
 
  366         v_bits  = p_bits[curidx] + 
count;
 
  371 static void quantize_and_encode_band_cost_SPAIR_mips(
struct AACEncContext *s,
 
  373                                                      const float *scaled, 
int size, 
int scale_idx,
 
  374                                                      int cb, 
const float lambda, 
const float uplim,
 
  379     int qc1, qc2, qc3, qc4;
 
  386     for (i = 0; i < 
size; i += 4) {
 
  388         int *in_int = (
int *)&in[i];
 
  390         unsigned int v_codes;
 
  393         qc1 = scaled[i  ] * Q34 + 0.4054f;
 
  394         qc2 = scaled[i+1] * Q34 + 0.4054f;
 
  395         qc3 = scaled[i+2] * Q34 + 0.4054f;
 
  396         qc4 = scaled[i+3] * Q34 + 0.4054f;
 
  400             ".set noreorder                 \n\t" 
  402             "ori    %[t4],  $zero,  4       \n\t" 
  403             "slt    %[t0],  %[t4],  %[qc1]  \n\t" 
  404             "slt    %[t1],  %[t4],  %[qc2]  \n\t" 
  405             "slt    %[t2],  %[t4],  %[qc3]  \n\t" 
  406             "slt    %[t3],  %[t4],  %[qc4]  \n\t" 
  407             "movn   %[qc1], %[t4],  %[t0]   \n\t" 
  408             "movn   %[qc2], %[t4],  %[t1]   \n\t" 
  409             "movn   %[qc3], %[t4],  %[t2]   \n\t" 
  410             "movn   %[qc4], %[t4],  %[t3]   \n\t" 
  411             "lw     %[t0],  0(%[in_int])    \n\t" 
  412             "lw     %[t1],  4(%[in_int])    \n\t" 
  413             "lw     %[t2],  8(%[in_int])    \n\t" 
  414             "lw     %[t3],  12(%[in_int])   \n\t" 
  415             "srl    %[t0],  %[t0],  31      \n\t" 
  416             "srl    %[t1],  %[t1],  31      \n\t" 
  417             "srl    %[t2],  %[t2],  31      \n\t" 
  418             "srl    %[t3],  %[t3],  31      \n\t" 
  419             "subu   %[t4],  $zero,  %[qc1]  \n\t" 
  420             "subu   %[t5],  $zero,  %[qc2]  \n\t" 
  421             "subu   %[t6],  $zero,  %[qc3]  \n\t" 
  422             "subu   %[t7],  $zero,  %[qc4]  \n\t" 
  423             "movn   %[qc1], %[t4],  %[t0]   \n\t" 
  424             "movn   %[qc2], %[t5],  %[t1]   \n\t" 
  425             "movn   %[qc3], %[t6],  %[t2]   \n\t" 
  426             "movn   %[qc4], %[t7],  %[t3]   \n\t" 
  430             : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
  431               [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
  432               [
t0]
"=&r"(
t0), [t1]
"=&r"(t1), [
t2]
"=&r"(
t2), [t3]
"=&r"(t3),
 
  433               [
t4]
"=&r"(
t4), [t5]
"=&r"(t5), [
t6]
"=&r"(
t6), [t7]
"=&r"(t7)
 
  434             : [in_int]
"r"(in_int)
 
  444         v_codes = (p_codes[curidx] << p_bits[curidx2]) | (p_codes[curidx2]);
 
  445         v_bits  = p_bits[curidx] + p_bits[curidx2];
 
  450 static void quantize_and_encode_band_cost_UPAIR7_mips(
struct AACEncContext *s,
 
  452                                                       const float *scaled, 
int size, 
int scale_idx,
 
  453                                                       int cb, 
const float lambda, 
const float uplim,
 
  458     int qc1, qc2, qc3, qc4;
 
  465     for (i = 0; i < 
size; i += 4) {
 
  466         int curidx, sign1, count1, sign2, count2;
 
  467         int *in_int = (
int *)&in[i];
 
  469         unsigned int v_codes;
 
  472         qc1 = scaled[i  ] * Q34 + 0.4054f;
 
  473         qc2 = scaled[i+1] * Q34 + 0.4054f;
 
  474         qc3 = scaled[i+2] * Q34 + 0.4054f;
 
  475         qc4 = scaled[i+3] * Q34 + 0.4054f;
 
  479             ".set noreorder                         \n\t" 
  481             "ori    %[t4],      $zero,      7       \n\t" 
  482             "ori    %[sign1],   $zero,      0       \n\t" 
  483             "ori    %[sign2],   $zero,      0       \n\t" 
  484             "slt    %[t0],      %[t4],      %[qc1]  \n\t" 
  485             "slt    %[t1],      %[t4],      %[qc2]  \n\t" 
  486             "slt    %[t2],      %[t4],      %[qc3]  \n\t" 
  487             "slt    %[t3],      %[t4],      %[qc4]  \n\t" 
  488             "movn   %[qc1],     %[t4],      %[t0]   \n\t" 
  489             "movn   %[qc2],     %[t4],      %[t1]   \n\t" 
  490             "movn   %[qc3],     %[t4],      %[t2]   \n\t" 
  491             "movn   %[qc4],     %[t4],      %[t3]   \n\t" 
  492             "lw     %[t0],      0(%[in_int])        \n\t" 
  493             "lw     %[t1],      4(%[in_int])        \n\t" 
  494             "lw     %[t2],      8(%[in_int])        \n\t" 
  495             "lw     %[t3],      12(%[in_int])       \n\t" 
  496             "slt    %[t0],      %[t0],      $zero   \n\t" 
  497             "movn   %[sign1],   %[t0],      %[qc1]  \n\t" 
  498             "slt    %[t2],      %[t2],      $zero   \n\t" 
  499             "movn   %[sign2],   %[t2],      %[qc3]  \n\t" 
  500             "slt    %[t1],      %[t1],      $zero   \n\t" 
  501             "sll    %[t0],      %[sign1],   1       \n\t" 
  502             "or     %[t0],      %[t0],      %[t1]   \n\t" 
  503             "movn   %[sign1],   %[t0],      %[qc2]  \n\t" 
  504             "slt    %[t3],      %[t3],      $zero   \n\t" 
  505             "sll    %[t0],      %[sign2],   1       \n\t" 
  506             "or     %[t0],      %[t0],      %[t3]   \n\t" 
  507             "movn   %[sign2],   %[t0],      %[qc4]  \n\t" 
  508             "slt    %[count1],  $zero,      %[qc1]  \n\t" 
  509             "slt    %[t1],      $zero,      %[qc2]  \n\t" 
  510             "slt    %[count2],  $zero,      %[qc3]  \n\t" 
  511             "slt    %[t2],      $zero,      %[qc4]  \n\t" 
  512             "addu   %[count1],  %[count1],  %[t1]   \n\t" 
  513             "addu   %[count2],  %[count2],  %[t2]   \n\t" 
  517             : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
  518               [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
  519               [sign1]
"=&r"(sign1), [count1]
"=&r"(count1),
 
  520               [sign2]
"=&r"(sign2), [count2]
"=&r"(count2),
 
  521               [
t0]
"=&r"(
t0), [t1]
"=&r"(t1), [
t2]
"=&r"(
t2), [t3]
"=&r"(t3),
 
  523             : [in_int]
"r"(in_int)
 
  524             : 
"t0", 
"t1", 
"t2", 
"t3", 
"t4",
 
  531         v_codes = (p_codes[curidx] << count1) | sign1;
 
  532         v_bits  = p_bits[curidx] + count1;
 
  538         v_codes = (p_codes[curidx] << count2) | sign2;
 
  539         v_bits  = p_bits[curidx] + count2;
 
  544 static void quantize_and_encode_band_cost_UPAIR12_mips(
struct AACEncContext *s,
 
  546                                                        const float *scaled, 
int size, 
int scale_idx,
 
  547                                                        int cb, 
const float lambda, 
const float uplim,
 
  552     int qc1, qc2, qc3, qc4;
 
  559     for (i = 0; i < 
size; i += 4) {
 
  560         int curidx, sign1, count1, sign2, count2;
 
  561         int *in_int = (
int *)&in[i];
 
  563         unsigned int v_codes;
 
  566         qc1 = scaled[i  ] * Q34 + 0.4054f;
 
  567         qc2 = scaled[i+1] * Q34 + 0.4054f;
 
  568         qc3 = scaled[i+2] * Q34 + 0.4054f;
 
  569         qc4 = scaled[i+3] * Q34 + 0.4054f;
 
  573             ".set noreorder                         \n\t" 
  575             "ori    %[t4],      $zero,      12      \n\t" 
  576             "ori    %[sign1],   $zero,      0       \n\t" 
  577             "ori    %[sign2],   $zero,      0       \n\t" 
  578             "slt    %[t0],      %[t4],      %[qc1]  \n\t" 
  579             "slt    %[t1],      %[t4],      %[qc2]  \n\t" 
  580             "slt    %[t2],      %[t4],      %[qc3]  \n\t" 
  581             "slt    %[t3],      %[t4],      %[qc4]  \n\t" 
  582             "movn   %[qc1],     %[t4],      %[t0]   \n\t" 
  583             "movn   %[qc2],     %[t4],      %[t1]   \n\t" 
  584             "movn   %[qc3],     %[t4],      %[t2]   \n\t" 
  585             "movn   %[qc4],     %[t4],      %[t3]   \n\t" 
  586             "lw     %[t0],      0(%[in_int])        \n\t" 
  587             "lw     %[t1],      4(%[in_int])        \n\t" 
  588             "lw     %[t2],      8(%[in_int])        \n\t" 
  589             "lw     %[t3],      12(%[in_int])       \n\t" 
  590             "slt    %[t0],      %[t0],      $zero   \n\t" 
  591             "movn   %[sign1],   %[t0],      %[qc1]  \n\t" 
  592             "slt    %[t2],      %[t2],      $zero   \n\t" 
  593             "movn   %[sign2],   %[t2],      %[qc3]  \n\t" 
  594             "slt    %[t1],      %[t1],      $zero   \n\t" 
  595             "sll    %[t0],      %[sign1],   1       \n\t" 
  596             "or     %[t0],      %[t0],      %[t1]   \n\t" 
  597             "movn   %[sign1],   %[t0],      %[qc2]  \n\t" 
  598             "slt    %[t3],      %[t3],      $zero   \n\t" 
  599             "sll    %[t0],      %[sign2],   1       \n\t" 
  600             "or     %[t0],      %[t0],      %[t3]   \n\t" 
  601             "movn   %[sign2],   %[t0],      %[qc4]  \n\t" 
  602             "slt    %[count1],  $zero,      %[qc1]  \n\t" 
  603             "slt    %[t1],      $zero,      %[qc2]  \n\t" 
  604             "slt    %[count2],  $zero,      %[qc3]  \n\t" 
  605             "slt    %[t2],      $zero,      %[qc4]  \n\t" 
  606             "addu   %[count1],  %[count1],  %[t1]   \n\t" 
  607             "addu   %[count2],  %[count2],  %[t2]   \n\t" 
  611             : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
  612               [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
  613               [sign1]
"=&r"(sign1), [count1]
"=&r"(count1),
 
  614               [sign2]
"=&r"(sign2), [count2]
"=&r"(count2),
 
  615               [
t0]
"=&r"(
t0), [t1]
"=&r"(t1), [
t2]
"=&r"(
t2), [t3]
"=&r"(t3),
 
  617             : [in_int]
"r"(in_int)
 
  624         v_codes = (p_codes[curidx] << count1) | sign1;
 
  625         v_bits  = p_bits[curidx] + count1;
 
  631         v_codes = (p_codes[curidx] << count2) | sign2;
 
  632         v_bits  = p_bits[curidx] + count2;
 
  637 static void quantize_and_encode_band_cost_ESC_mips(
struct AACEncContext *s,
 
  639                                                    const float *scaled, 
int size, 
int scale_idx,
 
  640                                                    int cb, 
const float lambda, 
const float uplim,
 
  645     int qc1, qc2, qc3, qc4;
 
  655         for (i = 0; i < 
size; i += 4) {
 
  656             int curidx, curidx2, sign1, count1, sign2, count2;
 
  657             int *in_int = (
int *)&in[i];
 
  659             unsigned int v_codes;
 
  662             qc1 = scaled[i  ] * Q34 + 0.4054f;
 
  663             qc2 = scaled[i+1] * Q34 + 0.4054f;
 
  664             qc3 = scaled[i+2] * Q34 + 0.4054f;
 
  665             qc4 = scaled[i+3] * Q34 + 0.4054f;
 
  669                 ".set noreorder                             \n\t" 
  671                 "ori        %[t4],      $zero,      16      \n\t" 
  672                 "ori        %[sign1],   $zero,      0       \n\t" 
  673                 "ori        %[sign2],   $zero,      0       \n\t" 
  674                 "slt        %[t0],      %[t4],      %[qc1]  \n\t" 
  675                 "slt        %[t1],      %[t4],      %[qc2]  \n\t" 
  676                 "slt        %[t2],      %[t4],      %[qc3]  \n\t" 
  677                 "slt        %[t3],      %[t4],      %[qc4]  \n\t" 
  678                 "movn       %[qc1],     %[t4],      %[t0]   \n\t" 
  679                 "movn       %[qc2],     %[t4],      %[t1]   \n\t" 
  680                 "movn       %[qc3],     %[t4],      %[t2]   \n\t" 
  681                 "movn       %[qc4],     %[t4],      %[t3]   \n\t" 
  682                 "lw         %[t0],      0(%[in_int])        \n\t" 
  683                 "lw         %[t1],      4(%[in_int])        \n\t" 
  684                 "lw         %[t2],      8(%[in_int])        \n\t" 
  685                 "lw         %[t3],      12(%[in_int])       \n\t" 
  686                 "slt        %[t0],      %[t0],      $zero   \n\t" 
  687                 "movn       %[sign1],   %[t0],      %[qc1]  \n\t" 
  688                 "slt        %[t2],      %[t2],      $zero   \n\t" 
  689                 "movn       %[sign2],   %[t2],      %[qc3]  \n\t" 
  690                 "slt        %[t1],      %[t1],      $zero   \n\t" 
  691                 "sll        %[t0],      %[sign1],   1       \n\t" 
  692                 "or         %[t0],      %[t0],      %[t1]   \n\t" 
  693                 "movn       %[sign1],   %[t0],      %[qc2]  \n\t" 
  694                 "slt        %[t3],      %[t3],      $zero   \n\t" 
  695                 "sll        %[t0],      %[sign2],   1       \n\t" 
  696                 "or         %[t0],      %[t0],      %[t3]   \n\t" 
  697                 "movn       %[sign2],   %[t0],      %[qc4]  \n\t" 
  698                 "slt        %[count1],  $zero,      %[qc1]  \n\t" 
  699                 "slt        %[t1],      $zero,      %[qc2]  \n\t" 
  700                 "slt        %[count2],  $zero,      %[qc3]  \n\t" 
  701                 "slt        %[t2],      $zero,      %[qc4]  \n\t" 
  702                 "addu       %[count1],  %[count1],  %[t1]   \n\t" 
  703                 "addu       %[count2],  %[count2],  %[t2]   \n\t" 
  707                 : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
  708                   [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
  709                   [sign1]
"=&r"(sign1), [count1]
"=&r"(count1),
 
  710                   [sign2]
"=&r"(sign2), [count2]
"=&r"(count2),
 
  711                   [
t0]
"=&r"(
t0), [t1]
"=&r"(t1), [
t2]
"=&r"(
t2), [t3]
"=&r"(t3),
 
  713                 : [in_int]
"r"(in_int)
 
  722             v_codes = (p_codes[curidx] << count1) | sign1;
 
  723             v_bits  = p_bits[curidx] + count1;
 
  726             v_codes = (p_codes[curidx2] << count2) | sign2;
 
  727             v_bits  = p_bits[curidx2] + count2;
 
  731         for (i = 0; i < 
size; i += 4) {
 
  732             int curidx, curidx2, sign1, count1, sign2, count2;
 
  733             int *in_int = (
int *)&in[i];
 
  735             unsigned int v_codes;
 
  739             qc1 = scaled[i  ] * Q34 + 0.4054f;
 
  740             qc2 = scaled[i+1] * Q34 + 0.4054f;
 
  741             qc3 = scaled[i+2] * Q34 + 0.4054f;
 
  742             qc4 = scaled[i+3] * Q34 + 0.4054f;
 
  746                 ".set noreorder                             \n\t" 
  748                 "ori        %[t4],      $zero,      16      \n\t" 
  749                 "ori        %[sign1],   $zero,      0       \n\t" 
  750                 "ori        %[sign2],   $zero,      0       \n\t" 
  751                 "shll_s.w   %[c1],      %[qc1],     18      \n\t" 
  752                 "shll_s.w   %[c2],      %[qc2],     18      \n\t" 
  753                 "shll_s.w   %[c3],      %[qc3],     18      \n\t" 
  754                 "shll_s.w   %[c4],      %[qc4],     18      \n\t" 
  755                 "srl        %[c1],      %[c1],      18      \n\t" 
  756                 "srl        %[c2],      %[c2],      18      \n\t" 
  757                 "srl        %[c3],      %[c3],      18      \n\t" 
  758                 "srl        %[c4],      %[c4],      18      \n\t" 
  759                 "slt        %[t0],      %[t4],      %[qc1]  \n\t" 
  760                 "slt        %[t1],      %[t4],      %[qc2]  \n\t" 
  761                 "slt        %[t2],      %[t4],      %[qc3]  \n\t" 
  762                 "slt        %[t3],      %[t4],      %[qc4]  \n\t" 
  763                 "movn       %[qc1],     %[t4],      %[t0]   \n\t" 
  764                 "movn       %[qc2],     %[t4],      %[t1]   \n\t" 
  765                 "movn       %[qc3],     %[t4],      %[t2]   \n\t" 
  766                 "movn       %[qc4],     %[t4],      %[t3]   \n\t" 
  767                 "lw         %[t0],      0(%[in_int])        \n\t" 
  768                 "lw         %[t1],      4(%[in_int])        \n\t" 
  769                 "lw         %[t2],      8(%[in_int])        \n\t" 
  770                 "lw         %[t3],      12(%[in_int])       \n\t" 
  771                 "slt        %[t0],      %[t0],      $zero   \n\t" 
  772                 "movn       %[sign1],   %[t0],      %[qc1]  \n\t" 
  773                 "slt        %[t2],      %[t2],      $zero   \n\t" 
  774                 "movn       %[sign2],   %[t2],      %[qc3]  \n\t" 
  775                 "slt        %[t1],      %[t1],      $zero   \n\t" 
  776                 "sll        %[t0],      %[sign1],   1       \n\t" 
  777                 "or         %[t0],      %[t0],      %[t1]   \n\t" 
  778                 "movn       %[sign1],   %[t0],      %[qc2]  \n\t" 
  779                 "slt        %[t3],      %[t3],      $zero   \n\t" 
  780                 "sll        %[t0],      %[sign2],   1       \n\t" 
  781                 "or         %[t0],      %[t0],      %[t3]   \n\t" 
  782                 "movn       %[sign2],   %[t0],      %[qc4]  \n\t" 
  783                 "slt        %[count1],  $zero,      %[qc1]  \n\t" 
  784                 "slt        %[t1],      $zero,      %[qc2]  \n\t" 
  785                 "slt        %[count2],  $zero,      %[qc3]  \n\t" 
  786                 "slt        %[t2],      $zero,      %[qc4]  \n\t" 
  787                 "addu       %[count1],  %[count1],  %[t1]   \n\t" 
  788                 "addu       %[count2],  %[count2],  %[t2]   \n\t" 
  792                 : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
  793                   [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
  794                   [sign1]
"=&r"(sign1), [count1]
"=&r"(count1),
 
  795                   [sign2]
"=&r"(sign2), [count2]
"=&r"(count2),
 
  796                   [
c1]
"=&r"(
c1), [c2]
"=&r"(c2),
 
  797                   [c3]
"=&r"(c3), [c4]
"=&r"(c4),
 
  798                   [
t0]
"=&r"(
t0), [t1]
"=&r"(t1), [
t2]
"=&r"(
t2), [t3]
"=&r"(t3),
 
  800                 : [in_int]
"r"(in_int)
 
  810             v_codes = (p_codes[curidx] << count1) | sign1;
 
  811             v_bits  = p_bits[curidx] + count1;
 
  814             if (p_vectors[curidx*2  ] == 64.0f) {
 
  816                 v_codes = (((1 << (len - 3)) - 2) << len) | (c1 & ((1 << 
len) - 1));
 
  819             if (p_vectors[curidx*2+1] == 64.0f) {
 
  821                 v_codes = (((1 << (len - 3)) - 2) << len) | (c2 & ((1 << 
len) - 1));
 
  825             v_codes = (p_codes[curidx2] << count2) | sign2;
 
  826             v_bits  = p_bits[curidx2] + count2;
 
  829             if (p_vectors[curidx2*2  ] == 64.0f) {
 
  831                 v_codes = (((1 << (len - 3)) - 2) << len) | (c3 & ((1 << 
len) - 1));
 
  834             if (p_vectors[curidx2*2+1] == 64.0f) {
 
  836                 v_codes = (((1 << (len - 3)) - 2) << len) | (c4 & ((1 << 
len) - 1));
 
  845                                                          const float *scaled, 
int size, 
int scale_idx,
 
  846                                                          int cb, 
const float lambda, 
const float uplim,
 
  849     quantize_and_encode_band_cost_SQUAD_mips,
 
  850     quantize_and_encode_band_cost_SQUAD_mips,
 
  851     quantize_and_encode_band_cost_UQUAD_mips,
 
  852     quantize_and_encode_band_cost_UQUAD_mips,
 
  853     quantize_and_encode_band_cost_SPAIR_mips,
 
  854     quantize_and_encode_band_cost_SPAIR_mips,
 
  855     quantize_and_encode_band_cost_UPAIR7_mips,
 
  856     quantize_and_encode_band_cost_UPAIR7_mips,
 
  857     quantize_and_encode_band_cost_UPAIR12_mips,
 
  858     quantize_and_encode_band_cost_UPAIR12_mips,
 
  859     quantize_and_encode_band_cost_ESC_mips,
 
  862 #define quantize_and_encode_band_cost(                                  \ 
  863                                 s, pb, in, scaled, size, scale_idx, cb, \ 
  864                                 lambda, uplim, bits)                    \ 
  865     quantize_and_encode_band_cost_arr[cb](                              \ 
  866                                 s, pb, in, scaled, size, scale_idx, cb, \ 
  870                                           const float *in, 
int size, 
int scale_idx,
 
  871                                           int cb, 
const float lambda)
 
  880 static float get_band_numbits_ZERO_mips(
struct AACEncContext *s,
 
  882                                         const float *scaled, 
int size, 
int scale_idx,
 
  883                                         int cb, 
const float lambda, 
const float uplim,
 
  889 static float get_band_numbits_SQUAD_mips(
struct AACEncContext *s,
 
  891                                          const float *scaled, 
int size, 
int scale_idx,
 
  892                                          int cb, 
const float lambda, 
const float uplim,
 
  897     int qc1, qc2, qc3, qc4;
 
  902     for (i = 0; i < 
size; i += 4) {
 
  904         int *in_int = (
int *)&in[i];
 
  907         qc1 = scaled[i  ] * Q34 + 0.4054f;
 
  908         qc2 = scaled[i+1] * Q34 + 0.4054f;
 
  909         qc3 = scaled[i+2] * Q34 + 0.4054f;
 
  910         qc4 = scaled[i+3] * Q34 + 0.4054f;
 
  914             ".set noreorder                 \n\t" 
  916             "slt    %[qc1], $zero,  %[qc1]  \n\t" 
  917             "slt    %[qc2], $zero,  %[qc2]  \n\t" 
  918             "slt    %[qc3], $zero,  %[qc3]  \n\t" 
  919             "slt    %[qc4], $zero,  %[qc4]  \n\t" 
  920             "lw     %[t0],  0(%[in_int])    \n\t" 
  921             "lw     %[t1],  4(%[in_int])    \n\t" 
  922             "lw     %[t2],  8(%[in_int])    \n\t" 
  923             "lw     %[t3],  12(%[in_int])   \n\t" 
  924             "srl    %[t0],  %[t0],  31      \n\t" 
  925             "srl    %[t1],  %[t1],  31      \n\t" 
  926             "srl    %[t2],  %[t2],  31      \n\t" 
  927             "srl    %[t3],  %[t3],  31      \n\t" 
  928             "subu   %[t4],  $zero,  %[qc1]  \n\t" 
  929             "subu   %[t5],  $zero,  %[qc2]  \n\t" 
  930             "subu   %[t6],  $zero,  %[qc3]  \n\t" 
  931             "subu   %[t7],  $zero,  %[qc4]  \n\t" 
  932             "movn   %[qc1], %[t4],  %[t0]   \n\t" 
  933             "movn   %[qc2], %[t5],  %[t1]   \n\t" 
  934             "movn   %[qc3], %[t6],  %[t2]   \n\t" 
  935             "movn   %[qc4], %[t7],  %[t3]   \n\t" 
  939             : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
  940               [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
  941               [
t0]
"=&r"(
t0), [t1]
"=&r"(t1), [
t2]
"=&r"(
t2), [t3]
"=&r"(t3),
 
  942               [
t4]
"=&r"(
t4), [t5]
"=&r"(t5), [
t6]
"=&r"(
t6), [t7]
"=&r"(t7)
 
  943             : [in_int]
"r"(in_int)
 
  956         curbits += p_bits[curidx];
 
  961 static float get_band_numbits_UQUAD_mips(
struct AACEncContext *s,
 
  963                                          const float *scaled, 
int size, 
int scale_idx,
 
  964                                          int cb, 
const float lambda, 
const float uplim,
 
  970     int qc1, qc2, qc3, qc4;
 
  974     for (i = 0; i < 
size; i += 4) {
 
  978         qc1 = scaled[i  ] * Q34 + 0.4054f;
 
  979         qc2 = scaled[i+1] * Q34 + 0.4054f;
 
  980         qc3 = scaled[i+2] * Q34 + 0.4054f;
 
  981         qc4 = scaled[i+3] * Q34 + 0.4054f;
 
  985             ".set noreorder                 \n\t" 
  987             "ori    %[t4],  $zero,  2       \n\t" 
  988             "slt    %[t0],  %[t4],  %[qc1]  \n\t" 
  989             "slt    %[t1],  %[t4],  %[qc2]  \n\t" 
  990             "slt    %[t2],  %[t4],  %[qc3]  \n\t" 
  991             "slt    %[t3],  %[t4],  %[qc4]  \n\t" 
  992             "movn   %[qc1], %[t4],  %[t0]   \n\t" 
  993             "movn   %[qc2], %[t4],  %[t1]   \n\t" 
  994             "movn   %[qc3], %[t4],  %[t2]   \n\t" 
  995             "movn   %[qc4], %[t4],  %[t3]   \n\t" 
  999             : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
 1000               [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
 1001               [
t0]
"=&r"(
t0), [t1]
"=&r"(t1), [
t2]
"=&r"(
t2), [t3]
"=&r"(t3),
 
 1013         curbits += p_bits[curidx];
 
 1014         curbits += uquad_sign_bits[curidx];
 
 1019 static float get_band_numbits_SPAIR_mips(
struct AACEncContext *s,
 
 1021                                          const float *scaled, 
int size, 
int scale_idx,
 
 1022                                          int cb, 
const float lambda, 
const float uplim,
 
 1027     int qc1, qc2, qc3, qc4;
 
 1032     for (i = 0; i < 
size; i += 4) {
 
 1033         int curidx, curidx2;
 
 1034         int *in_int = (
int *)&in[i];
 
 1037         qc1 = scaled[i  ] * Q34 + 0.4054f;
 
 1038         qc2 = scaled[i+1] * Q34 + 0.4054f;
 
 1039         qc3 = scaled[i+2] * Q34 + 0.4054f;
 
 1040         qc4 = scaled[i+3] * Q34 + 0.4054f;
 
 1044             ".set noreorder                 \n\t" 
 1046             "ori    %[t4],  $zero,  4       \n\t" 
 1047             "slt    %[t0],  %[t4],  %[qc1]  \n\t" 
 1048             "slt    %[t1],  %[t4],  %[qc2]  \n\t" 
 1049             "slt    %[t2],  %[t4],  %[qc3]  \n\t" 
 1050             "slt    %[t3],  %[t4],  %[qc4]  \n\t" 
 1051             "movn   %[qc1], %[t4],  %[t0]   \n\t" 
 1052             "movn   %[qc2], %[t4],  %[t1]   \n\t" 
 1053             "movn   %[qc3], %[t4],  %[t2]   \n\t" 
 1054             "movn   %[qc4], %[t4],  %[t3]   \n\t" 
 1055             "lw     %[t0],  0(%[in_int])    \n\t" 
 1056             "lw     %[t1],  4(%[in_int])    \n\t" 
 1057             "lw     %[t2],  8(%[in_int])    \n\t" 
 1058             "lw     %[t3],  12(%[in_int])   \n\t" 
 1059             "srl    %[t0],  %[t0],  31      \n\t" 
 1060             "srl    %[t1],  %[t1],  31      \n\t" 
 1061             "srl    %[t2],  %[t2],  31      \n\t" 
 1062             "srl    %[t3],  %[t3],  31      \n\t" 
 1063             "subu   %[t4],  $zero,  %[qc1]  \n\t" 
 1064             "subu   %[t5],  $zero,  %[qc2]  \n\t" 
 1065             "subu   %[t6],  $zero,  %[qc3]  \n\t" 
 1066             "subu   %[t7],  $zero,  %[qc4]  \n\t" 
 1067             "movn   %[qc1], %[t4],  %[t0]   \n\t" 
 1068             "movn   %[qc2], %[t5],  %[t1]   \n\t" 
 1069             "movn   %[qc3], %[t6],  %[t2]   \n\t" 
 1070             "movn   %[qc4], %[t7],  %[t3]   \n\t" 
 1074             : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
 1075               [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
 1076               [
t0]
"=&r"(
t0), [t1]
"=&r"(t1), [
t2]
"=&r"(
t2), [t3]
"=&r"(t3),
 
 1077               [
t4]
"=&r"(
t4), [t5]
"=&r"(t5), [
t6]
"=&r"(
t6), [t7]
"=&r"(t7)
 
 1078             : [in_int]
"r"(in_int)
 
 1086         curidx2 += qc4 + 40;
 
 1088         curbits += p_bits[curidx] + p_bits[curidx2];
 
 1093 static float get_band_numbits_UPAIR7_mips(
struct AACEncContext *s,
 
 1095                                           const float *scaled, 
int size, 
int scale_idx,
 
 1096                                           int cb, 
const float lambda, 
const float uplim,
 
 1101     int qc1, qc2, qc3, qc4;
 
 1106     for (i = 0; i < 
size; i += 4) {
 
 1107         int curidx, curidx2;
 
 1110         qc1 = scaled[i  ] * Q34 + 0.4054f;
 
 1111         qc2 = scaled[i+1] * Q34 + 0.4054f;
 
 1112         qc3 = scaled[i+2] * Q34 + 0.4054f;
 
 1113         qc4 = scaled[i+3] * Q34 + 0.4054f;
 
 1117             ".set noreorder                 \n\t" 
 1119             "ori    %[t4],  $zero,  7       \n\t" 
 1120             "slt    %[t0],  %[t4],  %[qc1]  \n\t" 
 1121             "slt    %[t1],  %[t4],  %[qc2]  \n\t" 
 1122             "slt    %[t2],  %[t4],  %[qc3]  \n\t" 
 1123             "slt    %[t3],  %[t4],  %[qc4]  \n\t" 
 1124             "movn   %[qc1], %[t4],  %[t0]   \n\t" 
 1125             "movn   %[qc2], %[t4],  %[t1]   \n\t" 
 1126             "movn   %[qc3], %[t4],  %[t2]   \n\t" 
 1127             "movn   %[qc4], %[t4],  %[t3]   \n\t" 
 1131             : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
 1132               [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
 1133               [
t0]
"=&r"(
t0), [t1]
"=&r"(t1), [
t2]
"=&r"(
t2), [t3]
"=&r"(t3),
 
 1143         curbits += p_bits[curidx] +
 
 1144                    upair7_sign_bits[curidx] +
 
 1146                    upair7_sign_bits[curidx2];
 
 1151 static float get_band_numbits_UPAIR12_mips(
struct AACEncContext *s,
 
 1153                                            const float *scaled, 
int size, 
int scale_idx,
 
 1154                                            int cb, 
const float lambda, 
const float uplim,
 
 1159     int qc1, qc2, qc3, qc4;
 
 1164     for (i = 0; i < 
size; i += 4) {
 
 1165         int curidx, curidx2;
 
 1168         qc1 = scaled[i  ] * Q34 + 0.4054f;
 
 1169         qc2 = scaled[i+1] * Q34 + 0.4054f;
 
 1170         qc3 = scaled[i+2] * Q34 + 0.4054f;
 
 1171         qc4 = scaled[i+3] * Q34 + 0.4054f;
 
 1175             ".set noreorder                 \n\t" 
 1177             "ori    %[t4],  $zero,  12      \n\t" 
 1178             "slt    %[t0],  %[t4],  %[qc1]  \n\t" 
 1179             "slt    %[t1],  %[t4],  %[qc2]  \n\t" 
 1180             "slt    %[t2],  %[t4],  %[qc3]  \n\t" 
 1181             "slt    %[t3],  %[t4],  %[qc4]  \n\t" 
 1182             "movn   %[qc1], %[t4],  %[t0]   \n\t" 
 1183             "movn   %[qc2], %[t4],  %[t1]   \n\t" 
 1184             "movn   %[qc3], %[t4],  %[t2]   \n\t" 
 1185             "movn   %[qc4], %[t4],  %[t3]   \n\t" 
 1189             : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
 1190               [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
 1191               [
t0]
"=&r"(
t0), [t1]
"=&r"(t1), [
t2]
"=&r"(
t2), [t3]
"=&r"(t3),
 
 1201         curbits += p_bits[curidx] +
 
 1203                    upair12_sign_bits[curidx] +
 
 1204                    upair12_sign_bits[curidx2];
 
 1209 static float get_band_numbits_ESC_mips(
struct AACEncContext *s,
 
 1211                                        const float *scaled, 
int size, 
int scale_idx,
 
 1212                                        int cb, 
const float lambda, 
const float uplim,
 
 1217     int qc1, qc2, qc3, qc4;
 
 1222     for (i = 0; i < 
size; i += 4) {
 
 1223         int curidx, curidx2;
 
 1224         int cond0, cond1, cond2, cond3;
 
 1228         qc1 = scaled[i  ] * Q34 + 0.4054f;
 
 1229         qc2 = scaled[i+1] * Q34 + 0.4054f;
 
 1230         qc3 = scaled[i+2] * Q34 + 0.4054f;
 
 1231         qc4 = scaled[i+3] * Q34 + 0.4054f;
 
 1235             ".set noreorder                             \n\t" 
 1237             "ori        %[t4],      $zero,  15          \n\t" 
 1238             "ori        %[t5],      $zero,  16          \n\t" 
 1239             "shll_s.w   %[c1],      %[qc1], 18          \n\t" 
 1240             "shll_s.w   %[c2],      %[qc2], 18          \n\t" 
 1241             "shll_s.w   %[c3],      %[qc3], 18          \n\t" 
 1242             "shll_s.w   %[c4],      %[qc4], 18          \n\t" 
 1243             "srl        %[c1],      %[c1],  18          \n\t" 
 1244             "srl        %[c2],      %[c2],  18          \n\t" 
 1245             "srl        %[c3],      %[c3],  18          \n\t" 
 1246             "srl        %[c4],      %[c4],  18          \n\t" 
 1247             "slt        %[cond0],   %[t4],  %[qc1]      \n\t" 
 1248             "slt        %[cond1],   %[t4],  %[qc2]      \n\t" 
 1249             "slt        %[cond2],   %[t4],  %[qc3]      \n\t" 
 1250             "slt        %[cond3],   %[t4],  %[qc4]      \n\t" 
 1251             "movn       %[qc1],     %[t5],  %[cond0]    \n\t" 
 1252             "movn       %[qc2],     %[t5],  %[cond1]    \n\t" 
 1253             "movn       %[qc3],     %[t5],  %[cond2]    \n\t" 
 1254             "movn       %[qc4],     %[t5],  %[cond3]    \n\t" 
 1255             "ori        %[t5],      $zero,  31          \n\t" 
 1256             "clz        %[c1],      %[c1]               \n\t" 
 1257             "clz        %[c2],      %[c2]               \n\t" 
 1258             "clz        %[c3],      %[c3]               \n\t" 
 1259             "clz        %[c4],      %[c4]               \n\t" 
 1260             "subu       %[c1],      %[t5],  %[c1]       \n\t" 
 1261             "subu       %[c2],      %[t5],  %[c2]       \n\t" 
 1262             "subu       %[c3],      %[t5],  %[c3]       \n\t" 
 1263             "subu       %[c4],      %[t5],  %[c4]       \n\t" 
 1264             "sll        %[c1],      %[c1],  1           \n\t" 
 1265             "sll        %[c2],      %[c2],  1           \n\t" 
 1266             "sll        %[c3],      %[c3],  1           \n\t" 
 1267             "sll        %[c4],      %[c4],  1           \n\t" 
 1268             "addiu      %[c1],      %[c1],  -3          \n\t" 
 1269             "addiu      %[c2],      %[c2],  -3          \n\t" 
 1270             "addiu      %[c3],      %[c3],  -3          \n\t" 
 1271             "addiu      %[c4],      %[c4],  -3          \n\t" 
 1272             "subu       %[cond0],   $zero,  %[cond0]    \n\t" 
 1273             "subu       %[cond1],   $zero,  %[cond1]    \n\t" 
 1274             "subu       %[cond2],   $zero,  %[cond2]    \n\t" 
 1275             "subu       %[cond3],   $zero,  %[cond3]    \n\t" 
 1276             "and        %[c1],      %[c1],  %[cond0]    \n\t" 
 1277             "and        %[c2],      %[c2],  %[cond1]    \n\t" 
 1278             "and        %[c3],      %[c3],  %[cond2]    \n\t" 
 1279             "and        %[c4],      %[c4],  %[cond3]    \n\t" 
 1283             : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
 1284               [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
 1285               [cond0]
"=&r"(cond0), [cond1]
"=&r"(cond1),
 
 1286               [cond2]
"=&r"(cond2), [cond3]
"=&r"(cond3),
 
 1287               [
c1]
"=&r"(
c1), [c2]
"=&r"(c2),
 
 1288               [c3]
"=&r"(c3), [c4]
"=&r"(c4),
 
 1289               [
t4]
"=&r"(
t4), [t5]
"=&r"(t5)
 
 1298         curbits += p_bits[curidx];
 
 1299         curbits += esc_sign_bits[curidx];
 
 1300         curbits += p_bits[curidx2];
 
 1301         curbits += esc_sign_bits[curidx2];
 
 1311 static float (*
const get_band_numbits_arr[])(
struct AACEncContext *
s,
 
 1313                                              const float *scaled, 
int size, 
int scale_idx,
 
 1314                                              int cb, 
const float lambda, 
const float uplim,
 
 1316     get_band_numbits_ZERO_mips,
 
 1317     get_band_numbits_SQUAD_mips,
 
 1318     get_band_numbits_SQUAD_mips,
 
 1319     get_band_numbits_UQUAD_mips,
 
 1320     get_band_numbits_UQUAD_mips,
 
 1321     get_band_numbits_SPAIR_mips,
 
 1322     get_band_numbits_SPAIR_mips,
 
 1323     get_band_numbits_UPAIR7_mips,
 
 1324     get_band_numbits_UPAIR7_mips,
 
 1325     get_band_numbits_UPAIR12_mips,
 
 1326     get_band_numbits_UPAIR12_mips,
 
 1327     get_band_numbits_ESC_mips,
 
 1330 #define get_band_numbits(                                  \ 
 1331                                 s, pb, in, scaled, size, scale_idx, cb, \ 
 1332                                 lambda, uplim, bits)                    \ 
 1333     get_band_numbits_arr[cb](                              \ 
 1334                                 s, pb, in, scaled, size, scale_idx, cb, \ 
 1335                                 lambda, uplim, bits) 
 1337 static float quantize_band_cost_bits(
struct AACEncContext *s, 
const float *in,
 
 1338                                      const float *scaled, 
int size, 
int scale_idx,
 
 1339                                      int cb, 
const float lambda, 
const float uplim,
 
 1342     return get_band_numbits(s, 
NULL, in, scaled, size, scale_idx, cb, lambda, uplim, bits);
 
 1349 static float get_band_cost_ZERO_mips(
struct AACEncContext *s,
 
 1351                                      const float *scaled, 
int size, 
int scale_idx,
 
 1352                                      int cb, 
const float lambda, 
const float uplim,
 
 1358     for (i = 0; i < 
size; i += 4) {
 
 1359         cost += in[i  ] * in[i  ];
 
 1360         cost += in[i+1] * in[i+1];
 
 1361         cost += in[i+2] * in[i+2];
 
 1362         cost += in[i+3] * in[i+3];
 
 1369 static float get_band_cost_SQUAD_mips(
struct AACEncContext *s,
 
 1371                                       const float *scaled, 
int size, 
int scale_idx,
 
 1372                                       int cb, 
const float lambda, 
const float uplim,
 
 1379     int qc1, qc2, qc3, qc4;
 
 1385     for (i = 0; i < 
size; i += 4) {
 
 1388         int   *in_int = (
int   *)&in[i];
 
 1389         float *in_pos = (
float *)&in[i];
 
 1390         float di0, di1, di2, di3;
 
 1393         qc1 = scaled[i  ] * Q34 + 0.4054f;
 
 1394         qc2 = scaled[i+1] * Q34 + 0.4054f;
 
 1395         qc3 = scaled[i+2] * Q34 + 0.4054f;
 
 1396         qc4 = scaled[i+3] * Q34 + 0.4054f;
 
 1400             ".set noreorder                             \n\t" 
 1402             "slt        %[qc1], $zero,  %[qc1]          \n\t" 
 1403             "slt        %[qc2], $zero,  %[qc2]          \n\t" 
 1404             "slt        %[qc3], $zero,  %[qc3]          \n\t" 
 1405             "slt        %[qc4], $zero,  %[qc4]          \n\t" 
 1406             "lw         %[t0],  0(%[in_int])            \n\t" 
 1407             "lw         %[t1],  4(%[in_int])            \n\t" 
 1408             "lw         %[t2],  8(%[in_int])            \n\t" 
 1409             "lw         %[t3],  12(%[in_int])           \n\t" 
 1410             "srl        %[t0],  %[t0],  31              \n\t" 
 1411             "srl        %[t1],  %[t1],  31              \n\t" 
 1412             "srl        %[t2],  %[t2],  31              \n\t" 
 1413             "srl        %[t3],  %[t3],  31              \n\t" 
 1414             "subu       %[t4],  $zero,  %[qc1]          \n\t" 
 1415             "subu       %[t5],  $zero,  %[qc2]          \n\t" 
 1416             "subu       %[t6],  $zero,  %[qc3]          \n\t" 
 1417             "subu       %[t7],  $zero,  %[qc4]          \n\t" 
 1418             "movn       %[qc1], %[t4],  %[t0]           \n\t" 
 1419             "movn       %[qc2], %[t5],  %[t1]           \n\t" 
 1420             "movn       %[qc3], %[t6],  %[t2]           \n\t" 
 1421             "movn       %[qc4], %[t7],  %[t3]           \n\t" 
 1425             : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
 1426               [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
 1427               [
t0]
"=&r"(
t0), [t1]
"=&r"(t1), [
t2]
"=&r"(
t2), [t3]
"=&r"(t3),
 
 1428               [
t4]
"=&r"(
t4), [t5]
"=&r"(t5), [
t6]
"=&r"(
t6), [t7]
"=&r"(t7)
 
 1429             : [in_int]
"r"(in_int)
 
 1442         curbits += p_bits[curidx];
 
 1443         vec     = &p_codes[curidx*4];
 
 1447             ".set noreorder                             \n\t" 
 1449             "lwc1       $f0,    0(%[in_pos])            \n\t" 
 1450             "lwc1       $f1,    0(%[vec])               \n\t" 
 1451             "lwc1       $f2,    4(%[in_pos])            \n\t" 
 1452             "lwc1       $f3,    4(%[vec])               \n\t" 
 1453             "lwc1       $f4,    8(%[in_pos])            \n\t" 
 1454             "lwc1       $f5,    8(%[vec])               \n\t" 
 1455             "lwc1       $f6,    12(%[in_pos])           \n\t" 
 1456             "lwc1       $f7,    12(%[vec])              \n\t" 
 1457             "nmsub.s    %[di0], $f0,    $f1,    %[IQ]   \n\t" 
 1458             "nmsub.s    %[di1], $f2,    $f3,    %[IQ]   \n\t" 
 1459             "nmsub.s    %[di2], $f4,    $f5,    %[IQ]   \n\t" 
 1460             "nmsub.s    %[di3], $f6,    $f7,    %[IQ]   \n\t" 
 1464             : [di0]
"=&f"(di0), [di1]
"=&f"(di1),
 
 1465               [di2]
"=&f"(di2), [di3]
"=&f"(di3)
 
 1466             : [in_pos]
"r"(in_pos), [vec]
"r"(vec),
 
 1468             : 
"$f0", 
"$f1", 
"$f2", 
"$f3",
 
 1469               "$f4", 
"$f5", 
"$f6", 
"$f7",
 
 1473         cost += di0 * di0 + di1 * di1
 
 1474                 + di2 * di2 + di3 * di3;
 
 1479     return cost * lambda + curbits;
 
 1482 static float get_band_cost_UQUAD_mips(
struct AACEncContext *s,
 
 1484                                       const float *scaled, 
int size, 
int scale_idx,
 
 1485                                       int cb, 
const float lambda, 
const float uplim,
 
 1493     int qc1, qc2, qc3, qc4;
 
 1498     for (i = 0; i < 
size; i += 4) {
 
 1501         float *in_pos = (
float *)&in[i];
 
 1502         float di0, di1, di2, di3;
 
 1505         qc1 = scaled[i  ] * Q34 + 0.4054f;
 
 1506         qc2 = scaled[i+1] * Q34 + 0.4054f;
 
 1507         qc3 = scaled[i+2] * Q34 + 0.4054f;
 
 1508         qc4 = scaled[i+3] * Q34 + 0.4054f;
 
 1512             ".set noreorder                             \n\t" 
 1514             "ori        %[t4],  $zero,  2               \n\t" 
 1515             "slt        %[t0],  %[t4],  %[qc1]          \n\t" 
 1516             "slt        %[t1],  %[t4],  %[qc2]          \n\t" 
 1517             "slt        %[t2],  %[t4],  %[qc3]          \n\t" 
 1518             "slt        %[t3],  %[t4],  %[qc4]          \n\t" 
 1519             "movn       %[qc1], %[t4],  %[t0]           \n\t" 
 1520             "movn       %[qc2], %[t4],  %[t1]           \n\t" 
 1521             "movn       %[qc3], %[t4],  %[t2]           \n\t" 
 1522             "movn       %[qc4], %[t4],  %[t3]           \n\t" 
 1526             : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
 1527               [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
 1528               [
t0]
"=&r"(
t0), [t1]
"=&r"(t1), [
t2]
"=&r"(
t2), [t3]
"=&r"(t3),
 
 1540         curbits += p_bits[curidx];
 
 1541         curbits += uquad_sign_bits[curidx];
 
 1542         vec     = &p_codes[curidx*4];
 
 1546             ".set noreorder                             \n\t" 
 1548             "lwc1       %[di0], 0(%[in_pos])            \n\t" 
 1549             "lwc1       %[di1], 4(%[in_pos])            \n\t" 
 1550             "lwc1       %[di2], 8(%[in_pos])            \n\t" 
 1551             "lwc1       %[di3], 12(%[in_pos])           \n\t" 
 1552             "abs.s      %[di0], %[di0]                  \n\t" 
 1553             "abs.s      %[di1], %[di1]                  \n\t" 
 1554             "abs.s      %[di2], %[di2]                  \n\t" 
 1555             "abs.s      %[di3], %[di3]                  \n\t" 
 1556             "lwc1       $f0,    0(%[vec])               \n\t" 
 1557             "lwc1       $f1,    4(%[vec])               \n\t" 
 1558             "lwc1       $f2,    8(%[vec])               \n\t" 
 1559             "lwc1       $f3,    12(%[vec])              \n\t" 
 1560             "nmsub.s    %[di0], %[di0], $f0,    %[IQ]   \n\t" 
 1561             "nmsub.s    %[di1], %[di1], $f1,    %[IQ]   \n\t" 
 1562             "nmsub.s    %[di2], %[di2], $f2,    %[IQ]   \n\t" 
 1563             "nmsub.s    %[di3], %[di3], $f3,    %[IQ]   \n\t" 
 1567             : [di0]
"=&f"(di0), [di1]
"=&f"(di1),
 
 1568               [di2]
"=&f"(di2), [di3]
"=&f"(di3)
 
 1569             : [in_pos]
"r"(in_pos), [vec]
"r"(vec),
 
 1571             : 
"$f0", 
"$f1", 
"$f2", 
"$f3",
 
 1575         cost += di0 * di0 + di1 * di1
 
 1576                 + di2 * di2 + di3 * di3;
 
 1581     return cost * lambda + curbits;
 
 1584 static float get_band_cost_SPAIR_mips(
struct AACEncContext *s,
 
 1586                                       const float *scaled, 
int size, 
int scale_idx,
 
 1587                                       int cb, 
const float lambda, 
const float uplim,
 
 1594     int qc1, qc2, qc3, qc4;
 
 1600     for (i = 0; i < 
size; i += 4) {
 
 1601         const float *vec, *vec2;
 
 1602         int curidx, curidx2;
 
 1603         int   *in_int = (
int   *)&in[i];
 
 1604         float *in_pos = (
float *)&in[i];
 
 1605         float di0, di1, di2, di3;
 
 1608         qc1 = scaled[i  ] * Q34 + 0.4054f;
 
 1609         qc2 = scaled[i+1] * Q34 + 0.4054f;
 
 1610         qc3 = scaled[i+2] * Q34 + 0.4054f;
 
 1611         qc4 = scaled[i+3] * Q34 + 0.4054f;
 
 1615             ".set noreorder                             \n\t" 
 1617             "ori        %[t4],  $zero,  4               \n\t" 
 1618             "slt        %[t0],  %[t4],  %[qc1]          \n\t" 
 1619             "slt        %[t1],  %[t4],  %[qc2]          \n\t" 
 1620             "slt        %[t2],  %[t4],  %[qc3]          \n\t" 
 1621             "slt        %[t3],  %[t4],  %[qc4]          \n\t" 
 1622             "movn       %[qc1], %[t4],  %[t0]           \n\t" 
 1623             "movn       %[qc2], %[t4],  %[t1]           \n\t" 
 1624             "movn       %[qc3], %[t4],  %[t2]           \n\t" 
 1625             "movn       %[qc4], %[t4],  %[t3]           \n\t" 
 1626             "lw         %[t0],  0(%[in_int])            \n\t" 
 1627             "lw         %[t1],  4(%[in_int])            \n\t" 
 1628             "lw         %[t2],  8(%[in_int])            \n\t" 
 1629             "lw         %[t3],  12(%[in_int])           \n\t" 
 1630             "srl        %[t0],  %[t0],  31              \n\t" 
 1631             "srl        %[t1],  %[t1],  31              \n\t" 
 1632             "srl        %[t2],  %[t2],  31              \n\t" 
 1633             "srl        %[t3],  %[t3],  31              \n\t" 
 1634             "subu       %[t4],  $zero,  %[qc1]          \n\t" 
 1635             "subu       %[t5],  $zero,  %[qc2]          \n\t" 
 1636             "subu       %[t6],  $zero,  %[qc3]          \n\t" 
 1637             "subu       %[t7],  $zero,  %[qc4]          \n\t" 
 1638             "movn       %[qc1], %[t4],  %[t0]           \n\t" 
 1639             "movn       %[qc2], %[t5],  %[t1]           \n\t" 
 1640             "movn       %[qc3], %[t6],  %[t2]           \n\t" 
 1641             "movn       %[qc4], %[t7],  %[t3]           \n\t" 
 1645             : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
 1646               [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
 1647               [
t0]
"=&r"(
t0), [t1]
"=&r"(t1), [
t2]
"=&r"(
t2), [t3]
"=&r"(t3),
 
 1648               [
t4]
"=&r"(
t4), [t5]
"=&r"(t5), [
t6]
"=&r"(
t6), [t7]
"=&r"(t7)
 
 1649             : [in_int]
"r"(in_int)
 
 1657         curidx2 += qc4 + 40;
 
 1659         curbits += p_bits[curidx];
 
 1660         curbits += p_bits[curidx2];
 
 1662         vec     = &p_codes[curidx*2];
 
 1663         vec2    = &p_codes[curidx2*2];
 
 1667             ".set noreorder                             \n\t" 
 1669             "lwc1       $f0,    0(%[in_pos])            \n\t" 
 1670             "lwc1       $f1,    0(%[vec])               \n\t" 
 1671             "lwc1       $f2,    4(%[in_pos])            \n\t" 
 1672             "lwc1       $f3,    4(%[vec])               \n\t" 
 1673             "lwc1       $f4,    8(%[in_pos])            \n\t" 
 1674             "lwc1       $f5,    0(%[vec2])              \n\t" 
 1675             "lwc1       $f6,    12(%[in_pos])           \n\t" 
 1676             "lwc1       $f7,    4(%[vec2])              \n\t" 
 1677             "nmsub.s    %[di0], $f0,    $f1,    %[IQ]   \n\t" 
 1678             "nmsub.s    %[di1], $f2,    $f3,    %[IQ]   \n\t" 
 1679             "nmsub.s    %[di2], $f4,    $f5,    %[IQ]   \n\t" 
 1680             "nmsub.s    %[di3], $f6,    $f7,    %[IQ]   \n\t" 
 1684             : [di0]
"=&f"(di0), [di1]
"=&f"(di1),
 
 1685               [di2]
"=&f"(di2), [di3]
"=&f"(di3)
 
 1686             : [in_pos]
"r"(in_pos), [vec]
"r"(vec),
 
 1687               [vec2]
"r"(vec2), [IQ]
"f"(IQ)
 
 1688             : 
"$f0", 
"$f1", 
"$f2", 
"$f3",
 
 1689               "$f4", 
"$f5", 
"$f6", 
"$f7",
 
 1693         cost += di0 * di0 + di1 * di1
 
 1694                 + di2 * di2 + di3 * di3;
 
 1699     return cost * lambda + curbits;
 
 1702 static float get_band_cost_UPAIR7_mips(
struct AACEncContext *s,
 
 1704                                        const float *scaled, 
int size, 
int scale_idx,
 
 1705                                        int cb, 
const float lambda, 
const float uplim,
 
 1712     int qc1, qc2, qc3, qc4;
 
 1718     for (i = 0; i < 
size; i += 4) {
 
 1719         const float *vec, *vec2;
 
 1720         int curidx, curidx2, sign1, count1, sign2, count2;
 
 1721         int   *in_int = (
int   *)&in[i];
 
 1722         float *in_pos = (
float *)&in[i];
 
 1723         float di0, di1, di2, di3;
 
 1726         qc1 = scaled[i  ] * Q34 + 0.4054f;
 
 1727         qc2 = scaled[i+1] * Q34 + 0.4054f;
 
 1728         qc3 = scaled[i+2] * Q34 + 0.4054f;
 
 1729         qc4 = scaled[i+3] * Q34 + 0.4054f;
 
 1733             ".set noreorder                                     \n\t" 
 1735             "ori        %[t4],      $zero,      7               \n\t" 
 1736             "ori        %[sign1],   $zero,      0               \n\t" 
 1737             "ori        %[sign2],   $zero,      0               \n\t" 
 1738             "slt        %[t0],      %[t4],      %[qc1]          \n\t" 
 1739             "slt        %[t1],      %[t4],      %[qc2]          \n\t" 
 1740             "slt        %[t2],      %[t4],      %[qc3]          \n\t" 
 1741             "slt        %[t3],      %[t4],      %[qc4]          \n\t" 
 1742             "movn       %[qc1],     %[t4],      %[t0]           \n\t" 
 1743             "movn       %[qc2],     %[t4],      %[t1]           \n\t" 
 1744             "movn       %[qc3],     %[t4],      %[t2]           \n\t" 
 1745             "movn       %[qc4],     %[t4],      %[t3]           \n\t" 
 1746             "lw         %[t0],      0(%[in_int])                \n\t" 
 1747             "lw         %[t1],      4(%[in_int])                \n\t" 
 1748             "lw         %[t2],      8(%[in_int])                \n\t" 
 1749             "lw         %[t3],      12(%[in_int])               \n\t" 
 1750             "slt        %[t0],      %[t0],      $zero           \n\t" 
 1751             "movn       %[sign1],   %[t0],      %[qc1]          \n\t" 
 1752             "slt        %[t2],      %[t2],      $zero           \n\t" 
 1753             "movn       %[sign2],   %[t2],      %[qc3]          \n\t" 
 1754             "slt        %[t1],      %[t1],      $zero           \n\t" 
 1755             "sll        %[t0],      %[sign1],   1               \n\t" 
 1756             "or         %[t0],      %[t0],      %[t1]           \n\t" 
 1757             "movn       %[sign1],   %[t0],      %[qc2]          \n\t" 
 1758             "slt        %[t3],      %[t3],      $zero           \n\t" 
 1759             "sll        %[t0],      %[sign2],   1               \n\t" 
 1760             "or         %[t0],      %[t0],      %[t3]           \n\t" 
 1761             "movn       %[sign2],   %[t0],      %[qc4]          \n\t" 
 1762             "slt        %[count1],  $zero,      %[qc1]          \n\t" 
 1763             "slt        %[t1],      $zero,      %[qc2]          \n\t" 
 1764             "slt        %[count2],  $zero,      %[qc3]          \n\t" 
 1765             "slt        %[t2],      $zero,      %[qc4]          \n\t" 
 1766             "addu       %[count1],  %[count1],  %[t1]           \n\t" 
 1767             "addu       %[count2],  %[count2],  %[t2]           \n\t" 
 1771             : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
 1772               [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
 1773               [sign1]
"=&r"(sign1), [count1]
"=&r"(count1),
 
 1774               [sign2]
"=&r"(sign2), [count2]
"=&r"(count2),
 
 1775               [
t0]
"=&r"(
t0), [t1]
"=&r"(t1), [
t2]
"=&r"(
t2), [t3]
"=&r"(t3),
 
 1777             : [in_int]
"r"(in_int)
 
 1787         curbits += p_bits[curidx];
 
 1788         curbits += upair7_sign_bits[curidx];
 
 1789         vec     = &p_codes[curidx*2];
 
 1791         curbits += p_bits[curidx2];
 
 1792         curbits += upair7_sign_bits[curidx2];
 
 1793         vec2    = &p_codes[curidx2*2];
 
 1797             ".set noreorder                                     \n\t" 
 1799             "lwc1       %[di0],     0(%[in_pos])                \n\t" 
 1800             "lwc1       %[di1],     4(%[in_pos])                \n\t" 
 1801             "lwc1       %[di2],     8(%[in_pos])                \n\t" 
 1802             "lwc1       %[di3],     12(%[in_pos])               \n\t" 
 1803             "abs.s      %[di0],     %[di0]                      \n\t" 
 1804             "abs.s      %[di1],     %[di1]                      \n\t" 
 1805             "abs.s      %[di2],     %[di2]                      \n\t" 
 1806             "abs.s      %[di3],     %[di3]                      \n\t" 
 1807             "lwc1       $f0,        0(%[vec])                   \n\t" 
 1808             "lwc1       $f1,        4(%[vec])                   \n\t" 
 1809             "lwc1       $f2,        0(%[vec2])                  \n\t" 
 1810             "lwc1       $f3,        4(%[vec2])                  \n\t" 
 1811             "nmsub.s    %[di0],     %[di0],     $f0,    %[IQ]   \n\t" 
 1812             "nmsub.s    %[di1],     %[di1],     $f1,    %[IQ]   \n\t" 
 1813             "nmsub.s    %[di2],     %[di2],     $f2,    %[IQ]   \n\t" 
 1814             "nmsub.s    %[di3],     %[di3],     $f3,    %[IQ]   \n\t" 
 1818             : [di0]
"=&f"(di0), [di1]
"=&f"(di1),
 
 1819               [di2]
"=&f"(di2), [di3]
"=&f"(di3)
 
 1820             : [in_pos]
"r"(in_pos), [vec]
"r"(vec),
 
 1821               [vec2]
"r"(vec2), [IQ]
"f"(IQ)
 
 1822             : 
"$f0", 
"$f1", 
"$f2", 
"$f3",
 
 1826         cost += di0 * di0 + di1 * di1
 
 1827                 + di2 * di2 + di3 * di3;
 
 1832     return cost * lambda + curbits;
 
 1835 static float get_band_cost_UPAIR12_mips(
struct AACEncContext *s,
 
 1837                                         const float *scaled, 
int size, 
int scale_idx,
 
 1838                                         int cb, 
const float lambda, 
const float uplim,
 
 1845     int qc1, qc2, qc3, qc4;
 
 1851     for (i = 0; i < 
size; i += 4) {
 
 1852         const float *vec, *vec2;
 
 1853         int curidx, curidx2;
 
 1854         int sign1, count1, sign2, count2;
 
 1855         int   *in_int = (
int   *)&in[i];
 
 1856         float *in_pos = (
float *)&in[i];
 
 1857         float di0, di1, di2, di3;
 
 1860         qc1 = scaled[i  ] * Q34 + 0.4054f;
 
 1861         qc2 = scaled[i+1] * Q34 + 0.4054f;
 
 1862         qc3 = scaled[i+2] * Q34 + 0.4054f;
 
 1863         qc4 = scaled[i+3] * Q34 + 0.4054f;
 
 1867             ".set noreorder                                     \n\t" 
 1869             "ori        %[t4],      $zero,      12              \n\t" 
 1870             "ori        %[sign1],   $zero,      0               \n\t" 
 1871             "ori        %[sign2],   $zero,      0               \n\t" 
 1872             "slt        %[t0],      %[t4],      %[qc1]          \n\t" 
 1873             "slt        %[t1],      %[t4],      %[qc2]          \n\t" 
 1874             "slt        %[t2],      %[t4],      %[qc3]          \n\t" 
 1875             "slt        %[t3],      %[t4],      %[qc4]          \n\t" 
 1876             "movn       %[qc1],     %[t4],      %[t0]           \n\t" 
 1877             "movn       %[qc2],     %[t4],      %[t1]           \n\t" 
 1878             "movn       %[qc3],     %[t4],      %[t2]           \n\t" 
 1879             "movn       %[qc4],     %[t4],      %[t3]           \n\t" 
 1880             "lw         %[t0],      0(%[in_int])                \n\t" 
 1881             "lw         %[t1],      4(%[in_int])                \n\t" 
 1882             "lw         %[t2],      8(%[in_int])                \n\t" 
 1883             "lw         %[t3],      12(%[in_int])               \n\t" 
 1884             "slt        %[t0],      %[t0],      $zero           \n\t" 
 1885             "movn       %[sign1],   %[t0],      %[qc1]          \n\t" 
 1886             "slt        %[t2],      %[t2],      $zero           \n\t" 
 1887             "movn       %[sign2],   %[t2],      %[qc3]          \n\t" 
 1888             "slt        %[t1],      %[t1],      $zero           \n\t" 
 1889             "sll        %[t0],      %[sign1],   1               \n\t" 
 1890             "or         %[t0],      %[t0],      %[t1]           \n\t" 
 1891             "movn       %[sign1],   %[t0],      %[qc2]          \n\t" 
 1892             "slt        %[t3],      %[t3],      $zero           \n\t" 
 1893             "sll        %[t0],      %[sign2],   1               \n\t" 
 1894             "or         %[t0],      %[t0],      %[t3]           \n\t" 
 1895             "movn       %[sign2],   %[t0],      %[qc4]          \n\t" 
 1896             "slt        %[count1],  $zero,      %[qc1]          \n\t" 
 1897             "slt        %[t1],      $zero,      %[qc2]          \n\t" 
 1898             "slt        %[count2],  $zero,      %[qc3]          \n\t" 
 1899             "slt        %[t2],      $zero,      %[qc4]          \n\t" 
 1900             "addu       %[count1],  %[count1],  %[t1]           \n\t" 
 1901             "addu       %[count2],  %[count2],  %[t2]           \n\t" 
 1905             : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
 1906               [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
 1907               [sign1]
"=&r"(sign1), [count1]
"=&r"(count1),
 
 1908               [sign2]
"=&r"(sign2), [count2]
"=&r"(count2),
 
 1909               [
t0]
"=&r"(
t0), [t1]
"=&r"(t1), [
t2]
"=&r"(
t2), [t3]
"=&r"(t3),
 
 1911             : [in_int]
"r"(in_int)
 
 1921         curbits += p_bits[curidx];
 
 1922         curbits += p_bits[curidx2];
 
 1923         curbits += upair12_sign_bits[curidx];
 
 1924         curbits += upair12_sign_bits[curidx2];
 
 1925         vec     = &p_codes[curidx*2];
 
 1926         vec2    = &p_codes[curidx2*2];
 
 1930             ".set noreorder                                     \n\t" 
 1932             "lwc1       %[di0],     0(%[in_pos])                \n\t" 
 1933             "lwc1       %[di1],     4(%[in_pos])                \n\t" 
 1934             "lwc1       %[di2],     8(%[in_pos])                \n\t" 
 1935             "lwc1       %[di3],     12(%[in_pos])               \n\t" 
 1936             "abs.s      %[di0],     %[di0]                      \n\t" 
 1937             "abs.s      %[di1],     %[di1]                      \n\t" 
 1938             "abs.s      %[di2],     %[di2]                      \n\t" 
 1939             "abs.s      %[di3],     %[di3]                      \n\t" 
 1940             "lwc1       $f0,        0(%[vec])                   \n\t" 
 1941             "lwc1       $f1,        4(%[vec])                   \n\t" 
 1942             "lwc1       $f2,        0(%[vec2])                  \n\t" 
 1943             "lwc1       $f3,        4(%[vec2])                  \n\t" 
 1944             "nmsub.s    %[di0],     %[di0],     $f0,    %[IQ]   \n\t" 
 1945             "nmsub.s    %[di1],     %[di1],     $f1,    %[IQ]   \n\t" 
 1946             "nmsub.s    %[di2],     %[di2],     $f2,    %[IQ]   \n\t" 
 1947             "nmsub.s    %[di3],     %[di3],     $f3,    %[IQ]   \n\t" 
 1951             : [di0]
"=&f"(di0), [di1]
"=&f"(di1),
 
 1952               [di2]
"=&f"(di2), [di3]
"=&f"(di3)
 
 1953             : [in_pos]
"r"(in_pos), [vec]
"r"(vec),
 
 1954               [vec2]
"r"(vec2), [IQ]
"f"(IQ)
 
 1955             : 
"$f0", 
"$f1", 
"$f2", 
"$f3",
 
 1959         cost += di0 * di0 + di1 * di1
 
 1960                 + di2 * di2 + di3 * di3;
 
 1965     return cost * lambda + curbits;
 
 1968 static float get_band_cost_ESC_mips(
struct AACEncContext *s,
 
 1970                                     const float *scaled, 
int size, 
int scale_idx,
 
 1971                                     int cb, 
const float lambda, 
const float uplim,
 
 1976     const float CLIPPED_ESCAPE = 165140.0f * IQ;
 
 1979     int qc1, qc2, qc3, qc4;
 
 1985     for (i = 0; i < 
size; i += 4) {
 
 1986         const float *vec, *vec2;
 
 1987         int curidx, curidx2;
 
 1989         float di1, di2, di3, di4;
 
 1990         int cond0, cond1, cond2, cond3;
 
 1994         qc1 = scaled[i  ] * Q34 + 0.4054f;
 
 1995         qc2 = scaled[i+1] * Q34 + 0.4054f;
 
 1996         qc3 = scaled[i+2] * Q34 + 0.4054f;
 
 1997         qc4 = scaled[i+3] * Q34 + 0.4054f;
 
 2001             ".set noreorder                             \n\t" 
 2003             "ori        %[t6],      $zero,  15          \n\t" 
 2004             "ori        %[t7],      $zero,  16          \n\t" 
 2005             "shll_s.w   %[c1],      %[qc1], 18          \n\t" 
 2006             "shll_s.w   %[c2],      %[qc2], 18          \n\t" 
 2007             "shll_s.w   %[c3],      %[qc3], 18          \n\t" 
 2008             "shll_s.w   %[c4],      %[qc4], 18          \n\t" 
 2009             "srl        %[c1],      %[c1],  18          \n\t" 
 2010             "srl        %[c2],      %[c2],  18          \n\t" 
 2011             "srl        %[c3],      %[c3],  18          \n\t" 
 2012             "srl        %[c4],      %[c4],  18          \n\t" 
 2013             "slt        %[cond0],   %[t6],  %[qc1]      \n\t" 
 2014             "slt        %[cond1],   %[t6],  %[qc2]      \n\t" 
 2015             "slt        %[cond2],   %[t6],  %[qc3]      \n\t" 
 2016             "slt        %[cond3],   %[t6],  %[qc4]      \n\t" 
 2017             "movn       %[qc1],     %[t7],  %[cond0]    \n\t" 
 2018             "movn       %[qc2],     %[t7],  %[cond1]    \n\t" 
 2019             "movn       %[qc3],     %[t7],  %[cond2]    \n\t" 
 2020             "movn       %[qc4],     %[t7],  %[cond3]    \n\t" 
 2024             : [qc1]
"+r"(qc1), [qc2]
"+r"(qc2),
 
 2025               [qc3]
"+r"(qc3), [qc4]
"+r"(qc4),
 
 2026               [cond0]
"=&r"(cond0), [cond1]
"=&r"(cond1),
 
 2027               [cond2]
"=&r"(cond2), [cond3]
"=&r"(cond3),
 
 2028               [
c1]
"=&r"(
c1), [c2]
"=&r"(c2),
 
 2029               [c3]
"=&r"(c3), [c4]
"=&r"(c4),
 
 2030               [
t6]
"=&r"(
t6), [t7]
"=&r"(t7)
 
 2039         curbits += p_bits[curidx];
 
 2040         curbits += esc_sign_bits[curidx];
 
 2041         vec     = &p_codes[curidx*2];
 
 2043         curbits += p_bits[curidx2];
 
 2044         curbits += esc_sign_bits[curidx2];
 
 2045         vec2     = &p_codes[curidx2*2];
 
 2047         curbits += (
av_log2(c1) * 2 - 3) & (-cond0);
 
 2048         curbits += (
av_log2(c2) * 2 - 3) & (-cond1);
 
 2049         curbits += (
av_log2(c3) * 2 - 3) & (-cond2);
 
 2050         curbits += (
av_log2(c4) * 2 - 3) & (-cond3);
 
 2053         t2 = fabsf(in[i+1]);
 
 2054         t3 = fabsf(in[i+2]);
 
 2055         t4 = fabsf(in[i+3]);
 
 2058             if (t1 >= CLIPPED_ESCAPE) {
 
 2059                 di1 = t1 - CLIPPED_ESCAPE;
 
 2061                 di1 = t1 - c1 * 
cbrtf(c1) * IQ;
 
 2064             di1 = t1 - vec[0] * IQ;
 
 2067             if (t2 >= CLIPPED_ESCAPE) {
 
 2068                 di2 = t2 - CLIPPED_ESCAPE;
 
 2070                 di2 = t2 - c2 * 
cbrtf(c2) * IQ;
 
 2073             di2 = t2 - vec[1] * IQ;
 
 2076             if (t3 >= CLIPPED_ESCAPE) {
 
 2077                 di3 = t3 - CLIPPED_ESCAPE;
 
 2079                 di3 = t3 - c3 * 
cbrtf(c3) * IQ;
 
 2082             di3 = t3 - vec2[0] * IQ;
 
 2085             if (t4 >= CLIPPED_ESCAPE) {
 
 2086                 di4 = t4 - CLIPPED_ESCAPE;
 
 2088                 di4 = t4 - c4 * 
cbrtf(c4) * IQ;
 
 2091             di4 = t4 - vec2[1]*IQ;
 
 2093         cost += di1 * di1 + di2 * di2
 
 2094                 + di3 * di3 + di4 * di4;
 
 2099     return cost * lambda + curbits;
 
 2102 static float (*
const get_band_cost_arr[])(
struct AACEncContext *
s,
 
 2104                                           const float *scaled, 
int size, 
int scale_idx,
 
 2105                                           int cb, 
const float lambda, 
const float uplim,
 
 2107     get_band_cost_ZERO_mips,
 
 2108     get_band_cost_SQUAD_mips,
 
 2109     get_band_cost_SQUAD_mips,
 
 2110     get_band_cost_UQUAD_mips,
 
 2111     get_band_cost_UQUAD_mips,
 
 2112     get_band_cost_SPAIR_mips,
 
 2113     get_band_cost_SPAIR_mips,
 
 2114     get_band_cost_UPAIR7_mips,
 
 2115     get_band_cost_UPAIR7_mips,
 
 2116     get_band_cost_UPAIR12_mips,
 
 2117     get_band_cost_UPAIR12_mips,
 
 2118     get_band_cost_ESC_mips,
 
 2121 #define get_band_cost(                                  \ 
 2122                                 s, pb, in, scaled, size, scale_idx, cb, \ 
 2123                                 lambda, uplim, bits)                    \ 
 2124     get_band_cost_arr[cb](                              \ 
 2125                                 s, pb, in, scaled, size, scale_idx, cb, \ 
 2126                                 lambda, uplim, bits) 
 2129                                 const float *scaled, 
int size, 
int scale_idx,
 
 2130                                 int cb, 
const float lambda, 
const float uplim,
 
 2133     return get_band_cost(s, 
NULL, in, scaled, size, scale_idx, cb, lambda, uplim, bits);
 
 2136 static void search_for_quantizers_twoloop_mips(
AVCodecContext *avctx,
 
 2141     int start = 0, i, w, w2, 
g;
 
 2143     float dists[128] = { 0 }, uplims[128];
 
 2145     int fflag, minscaler;
 
 2150     destbits = 
FFMIN(destbits, 5800);
 
 2159                     sce->
zeroes[(w+w2)*16+g] = 1;
 
 2164             uplims[w*16+
g] = uplim *512;
 
 2167                 minthr = 
FFMIN(minthr, uplim);
 
 2173             if (sce->
zeroes[w*16+g]) {
 
 2196         minscaler = sce->
sf_idx[0];
 
 2197         qstep = its ? 1 : 32;
 
 2212                         if (sce->
zeroes[w*16+g] || sce->
sf_idx[w*16+g] >= 218) {
 
 2216                         minscaler = 
FFMIN(minscaler, sce->
sf_idx[w*16+g]);
 
 2220                             bits += quantize_band_cost_bits(s, coefs + w2*128,
 
 2248                         if (sce->
zeroes[w*16+g] || sce->
sf_idx[w*16+g] >= 218) {
 
 2252                         minscaler = 
FFMIN(minscaler, sce->
sf_idx[w*16+g]);
 
 2266                         dists[w*16+
g] = dist - 
bits;
 
 2276             if (tbits > destbits) {
 
 2277                 for (i = 0; i < 128; i++)
 
 2278                     if (sce->
sf_idx[i] < 218 - qstep)
 
 2281                 for (i = 0; i < 128; i++)
 
 2282                     if (sce->
sf_idx[i] > 60 - qstep)
 
 2286             if (!qstep && tbits > destbits*1.02 && sce->
sf_idx[0] < 217)
 
 2294                 int prevsc = sce->
sf_idx[w*16+
g];
 
 2295                 if (dists[w*16+g] > uplims[w*16+g] && sce->
sf_idx[w*16+g] > 60) {
 
 2303                 if (sce->
sf_idx[w*16+g] != prevsc)
 
 2309     } 
while (fflag && its < 10);
 
 2315     int start = 0, i, w, w2, 
g;
 
 2316     float M[128], 
S[128];
 
 2325                 float dist1 = 0.0f, dist2 = 0.0f;
 
 2332                         M[i  ] = (sce0->
coeffs[start+w2*128+i  ]
 
 2333                                 + sce1->
coeffs[start+w2*128+i  ]) * 0.5;
 
 2334                         M[i+1] = (sce0->
coeffs[start+w2*128+i+1]
 
 2335                                 + sce1->
coeffs[start+w2*128+i+1]) * 0.5;
 
 2336                         M[i+2] = (sce0->
coeffs[start+w2*128+i+2]
 
 2337                                 + sce1->
coeffs[start+w2*128+i+2]) * 0.5;
 
 2338                         M[i+3] = (sce0->
coeffs[start+w2*128+i+3]
 
 2339                                 + sce1->
coeffs[start+w2*128+i+3]) * 0.5;
 
 2342                                 - sce1->
coeffs[start+w2*128+i  ];
 
 2344                                 - sce1->
coeffs[start+w2*128+i+1];
 
 2346                                 - sce1->
coeffs[start+w2*128+i+2];
 
 2348                                 - sce1->
coeffs[start+w2*128+i+3];
 
 2357                                                 sce0->
sf_idx[(w+w2)*16+g],
 
 2363                                                 sce1->
sf_idx[(w+w2)*16+g],
 
 2369                                                 sce0->
sf_idx[(w+w2)*16+g],
 
 2375                                                 sce1->
sf_idx[(w+w2)*16+g],
 
 2379                 cpe->
ms_mask[w*16+
g] = dist2 < dist1;
 
 2388                                        int win, 
int group_len, 
const float lambda)
 
 2395     const int run_esc  = (1 << 
run_bits) - 1;
 
 2396     int idx, ppos, 
count;
 
 2397     int stackrun[120], stackcb[120], stack_len;
 
 2403     for (cb = 0; cb < 12; cb++) {
 
 2404         path[0][
cb].
cost     = run_bits+4;
 
 2406         path[0][
cb].
run      = 0;
 
 2408     for (swb = 0; swb < max_sfb; swb++) {
 
 2410         if (sce->
zeroes[win*16 + swb]) {
 
 2411             float cost_stay_here = path[swb][0].
cost;
 
 2412             float cost_get_here  = next_minbits + run_bits + 4;
 
 2416             if (cost_get_here < cost_stay_here) {
 
 2417                 path[swb+1][0].
prev_idx = next_mincb;
 
 2418                 path[swb+1][0].
cost     = cost_get_here;
 
 2419                 path[swb+1][0].
run      = 1;
 
 2422                 path[swb+1][0].
cost     = cost_stay_here;
 
 2423                 path[swb+1][0].
run      = path[swb][0].
run + 1;
 
 2425             next_minbits = path[swb+1][0].
cost;
 
 2427             for (cb = 1; cb < 12; cb++) {
 
 2428                 path[swb+1][
cb].
cost = 61450;
 
 2430                 path[swb+1][
cb].
run = 0;
 
 2433             float minbits = next_minbits;
 
 2434             int mincb = next_mincb;
 
 2435             int startcb = sce->
band_type[win*16+swb];
 
 2438             for (cb = 0; cb < startcb; cb++) {
 
 2439                 path[swb+1][
cb].
cost = 61450;
 
 2441                 path[swb+1][
cb].
run = 0;
 
 2443             for (cb = startcb; cb < 12; cb++) {
 
 2444                 float cost_stay_here, cost_get_here;
 
 2446                 for (w = 0; w < group_len; w++) {
 
 2447                     bits += quantize_band_cost_bits(s, sce->
coeffs + start + w*128,
 
 2448                                                     s->
scoefs + start + w*128, size,
 
 2449                                                     sce->
sf_idx[(win+w)*16+swb], cb,
 
 2453                 cost_get_here  = minbits            + bits + run_bits + 4;
 
 2457                 if (cost_get_here < cost_stay_here) {
 
 2459                     path[swb+1][
cb].
cost     = cost_get_here;
 
 2460                     path[swb+1][
cb].
run      = 1;
 
 2463                     path[swb+1][
cb].
cost     = cost_stay_here;
 
 2466                 if (path[swb+1][cb].cost < next_minbits) {
 
 2467                     next_minbits = path[swb+1][
cb].
cost;
 
 2477     for (cb = 1; cb < 12; cb++)
 
 2478         if (path[max_sfb][cb].cost < path[max_sfb][idx].cost)
 
 2484         stackrun[stack_len] = path[ppos][
cb].
run;
 
 2485         stackcb [stack_len] = 
cb;
 
 2487         ppos -= path[ppos][
cb].
run;
 
 2492     for (i = stack_len - 1; i >= 0; i--) {
 
 2494         count = stackrun[i];
 
 2495         memset(sce->
zeroes + win*16 + start, !stackcb[i], count);
 
 2496         for (j = 0; j < 
count; j++) {
 
 2500         while (count >= run_esc) {
 
static const uint8_t run_value_bits_long[64]
bits needed to code codebook run value for long windows 
 
void(* search_for_ms)(struct AACEncContext *s, ChannelElement *cpe, const float lambda)
 
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit 
 
#define SCALE_DIFF_ZERO
codebook index corresponding to zero scalefactor indices difference 
 
FFPsyBand psy_bands[PSY_MAX_BANDS]
channel bands information 
 
static const uint8_t run_value_bits_short[16]
bits needed to code codebook run value for short windows 
 
static int find_min_book(float maxval, int sf)
 
#define SCALE_MAX_DIFF
maximum scalefactor difference allowed by standard 
 
AACCoefficientsEncoder * coder
 
int common_window
Set if channels share a common 'IndividualChannelStream' in bitstream. 
 
#define quantize_and_encode_band_cost(s, pb, in, scaled, size, scale_idx, cb, lambda, uplim, bits)
 
int prev_idx
pointer to the previous path point 
 
uint8_t ms_mask[128]
Set if mid/side stereo is used for each scalefactor window band. 
 
static double cb(void *priv, double x, double y)
 
AACEncOptions options
encoding options 
 
void(* quantize_and_encode_band)(struct AACEncContext *s, PutBitContext *pb, const float *in, int size, int scale_idx, int cb, const float lambda)
 
SingleChannelElement ch[2]
 
const uint8_t ff_aac_scalefactor_bits[121]
 
static const uint8_t run_bits[7][16]
 
void ff_aac_coder_init_mips(AACEncContext *c)
 
single band psychoacoustic information 
 
float coeffs[1024]
coefficients for IMDCT, maybe processed 
 
uint8_t max_sfb
number of scalefactor bands per group 
 
int num_swb
number of scalefactor window bands 
 
Libavcodec external API header. 
 
static float quantize_band_cost(struct AACEncContext *s, const float *in, const float *scaled, int size, int scale_idx, int cb, const float lambda, const float uplim, int *bits)
 
void(* search_for_quantizers)(AVCodecContext *avctx, struct AACEncContext *s, SingleChannelElement *sce, const float lambda)
 
const float *const ff_aac_codebook_vectors[]
 
#define POW_SF2_ZERO
ff_aac_pow2sf_tab index corresponding to pow(2, 0); 
 
#define SCALE_DIV_512
scalefactor difference that corresponds to scale difference in 512 times 
 
int bit_rate
the average bitrate 
 
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code. 
 
const uint8_t *const ff_aac_spectral_bits[11]
 
typedef void(APIENTRY *FF_PFNGLACTIVETEXTUREPROC)(GLenum texture)
 
AAC definitions and structures. 
 
static void abs_pow34_v(float *out, const float *in, const int size)
 
float ff_aac_pow34sf_tab[428]
 
int sample_rate
samples per second 
 
main external API structure. 
 
IndividualChannelStream ics
 
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31))))#defineSET_CONV_FUNC_GROUP(ofmt, ifmt) staticvoidset_generic_function(AudioConvert *ac){}voidff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, intsample_rate, intapply_map){AudioConvert *ac;intin_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) returnNULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt)>2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);returnNULL;}returnac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}elseif(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;elseac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);returnac;}intff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){intuse_generic=1;intlen=in->nb_samples;intp;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%dsamples-audio_convert:%sto%s(dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));returnff_convert_dither(ac-> in
 
void(* encode_window_bands_info)(struct AACEncContext *s, SingleChannelElement *sce, int win, int group_len, const float lambda)
 
static av_always_inline float cbrtf(float x)
 
structure used in optimal codebook search 
 
Replacements for frequently missing libm functions. 
 
const uint8_t * swb_sizes
table of scalefactor band sizes for a particular window 
 
static float(*const quantize_and_encode_band_cost_arr[])(struct AACEncContext *s, PutBitContext *pb, const float *in, const float *scaled, int size, int scale_idx, int cb, const float lambda, const float uplim, int *bits)
 
uint8_t zeroes[128]
band is not coded (used by encoder) 
 
int sf_idx[128]
scalefactor indices (used by encoder) 
 
#define SCALE_ONE_POS
scalefactor index that corresponds to scale=1.0 
 
Single Channel Element - used for both SCE and LFE elements. 
 
ChannelElement * cpe
channel elements 
 
float ff_aac_pow2sf_tab[428]
 
static float find_max_val(int group_len, int swb_size, const float *scaled)
 
channel element - generic struct for SCE/CPE/CCE/LFE 
 
const uint16_t *const ff_aac_spectral_codes[11]
 
int channels
number of audio channels 
 
FFPsyChannel * ch
single channel information 
 
enum BandType band_type[128]
band types 
 
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31))))#defineSET_CONV_FUNC_GROUP(ofmt, ifmt) staticvoidset_generic_function(AudioConvert *ac){}voidff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, intsample_rate, intapply_map){AudioConvert *ac;intin_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) returnNULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt)>2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);returnNULL;}returnac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}elseif(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;elseac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);returnac;}intff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){intuse_generic=1;intlen=in->nb_samples;intp;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%dsamples-audio_convert:%sto%s(dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));returnff_convert_dither(ac-> out
 
static const uint8_t *const run_value_bits[2]
 
float scoefs[1024]
scaled coefficients