func: static int decode_header(MPADecodeContext *s, UINT32 header)
  
  {
  
      int sample_rate, frame_size, mpeg25, padding;
  
      int sample_rate_index, bitrate_index;
  
      if (header & (1<<20)) {
  
          s->lsf = (header & (1<<19)) ? 0 : 1;
  
          mpeg25 = 0;
  
      } else {
  
          s->lsf = 1;
  
          mpeg25 = 1;
  
      }
  
      
  
      s->layer = 4 - ((header >> 17) & 3);
  
      /* extract frequency */
  
      sample_rate_index = (header >> 10) & 3;
  
      sample_rate = mpa_freq_tab[sample_rate_index] >> (s->lsf + mpeg25);
  
      if (sample_rate == 0)
  
          return 1;
  
      sample_rate_index += 3 * (s->lsf + mpeg25);
  
      s->sample_rate_index = sample_rate_index;
  
      s->error_protection = ((header >> 16) & 1) ^ 1;
  
  
  
      bitrate_index = (header >> 12) & 0xf;
  
      padding = (header >> 9) & 1;
  
      //extension = (header >> 8) & 1;
  
      s->mode = (header >> 6) & 3;
  
      s->mode_ext = (header >> 4) & 3;
  
      //copyright = (header >> 3) & 1;
  
      //original = (header >> 2) & 1;
  
      //emphasis = header & 3;
  
  
  
      if (s->mode == MPA_MONO)
  
          s->nb_channels = 1;
  
      else
  
          s->nb_channels = 2;
  
      
  
      if (bitrate_index != 0) {
  
          frame_size = mpa_bitrate_tab[s->lsf][s->layer - 1][bitrate_index];
  
          s->bit_rate = frame_size * 1000;
  
          switch(s->layer) {
  
          case 1:
  
              frame_size = (frame_size * 12000) / sample_rate;
  
              frame_size = (frame_size + padding) * 4;
  
              break;
  
          case 2:
  
              frame_size = (frame_size * 144000) / sample_rate;
  
              frame_size += padding;
  
              break;
  
          default:
  
          case 3:
  
              frame_size = (frame_size * 144000) / (sample_rate << s->lsf);
  
              frame_size += padding;
  
              break;
  
          }
  
          s->frame_size = frame_size;
  
      } else {
  
          /* if no frame size computed, signal it */
  
          if (!s->free_format_frame_size)
  
              return 1;
  
          /* free format: compute bitrate and real frame size from the
  
             frame size we extracted by reading the bitstream */
  
          s->frame_size = s->free_format_frame_size;
  
          switch(s->layer) {
  
          case 1:
  
              s->frame_size += padding  * 4;
  
              s->bit_rate = (s->frame_size * sample_rate) / 48000;
  
              break;
  
          case 2:
  
              s->frame_size += padding;
  
              s->bit_rate = (s->frame_size * sample_rate) / 144000;
  
              break;
  
          default:
  
          case 3:
  
              s->frame_size += padding;
  
              s->bit_rate = (s->frame_size * (sample_rate << s->lsf)) / 144000;
  
              break;
  
          }
  
      }
  
      s->sample_rate = sample_rate;
  
      
  
  #if defined(DEBUG)
  
      printf("layer%d, %d Hz, %d kbits/s, ",
  
             s->layer, s->sample_rate, s->bit_rate);
  
      if (s->nb_channels == 2) {
  
          if (s->layer == 3) {
  
              if (s->mode_ext & MODE_EXT_MS_STEREO)
  
                  printf("ms-");
  
              if (s->mode_ext & MODE_EXT_I_STEREO)
  
                  printf("i-");
  
          }
  
          printf("stereo");
  
      } else {
  
          printf("mono");
  
      }
  
      printf("\n");
  
  #endif
  
      return 0;
  
  }
  