/*
 * call-seq:
 *    decode_headers_for(buffer)
 *
 * Decode the mp3 headers for +buffer+.
 */
static VALUE decode_headers_for(VALUE self, VALUE rb_buffer)
{
  int enc_delay;
  int enc_padding;
  mp3data_struct * mp3data;

  unsigned char * buf = (unsigned char *)StringValuePtr(rb_buffer);
  int len = NUM2INT(rb_funcall(rb_buffer, rb_intern("length"), 0));
  short int pcm_l[1152], pcm_r[1152];

  VALUE rb_mp3data = rb_funcall(self, rb_intern("mp3data"), 0);
  Data_Get_Struct(rb_mp3data, mp3data_struct, mp3data);

  int ret = lame_decode1_headersB(buf,
                                  len,
                                  pcm_l,
                                  pcm_r,
                                  mp3data,
                                  &enc_delay,
                                  &enc_padding
  );

  if(ret == -1)
    rb_raise(rb_eRuntimeError, "Decode headers failed.\n");

  return rb_mp3data;
}