Example #1
0
static gint64
xmms_mp4_seek (xmms_xform_t *xform, gint64 samples, xmms_xform_seek_mode_t whence, xmms_error_t *err)
{
	int32_t toskip, sampleid_candidate;
	xmms_mp4_data_t *data;

	g_return_val_if_fail (whence == XMMS_XFORM_SEEK_SET, -1);
	g_return_val_if_fail (xform, -1);

	data = xmms_xform_private_data_get (xform);
	g_return_val_if_fail (data, FALSE);

	sampleid_candidate = mp4ff_find_sample(data->mp4ff, data->track, samples, &toskip);

	if (sampleid_candidate < 0) {
		return -1;
	}

	data->sampleid = sampleid_candidate;
	data->buffer_length = 0;

	g_string_erase (data->outbuf, 0, -1);

	return samples-toskip;
}
Example #2
0
CAMLprim value ocaml_faad_mp4_seek(value m, value track, value offset)
{
  CAMLparam1(m);
  CAMLlocal1(ret);
  int32_t toskip = 0;
  mp4_t *mp = Mp4_val(m);
  int t = Int_val(track);

  caml_enter_blocking_section();
  int sample = mp4ff_find_sample(mp->ff,t,(int64_t)(Int_val(offset)),&toskip);
  caml_leave_blocking_section();

  ret = caml_alloc_tuple(2);
  Field(ret,0) = Val_int(sample);
  Field(ret,1) = Val_int(toskip);

  CAMLreturn(ret);
}
Example #3
0
FXbool MP4Reader::seek(FXdouble pos){
  FXint f = mp4ff_find_sample(handle,track,pos*stream_length,NULL);
  if (f>=0) frame=f;
  return true;
  }
Example #4
0
int32_t mp4ff_find_sample_use_offsets(const mp4ff_t *f, const int32_t track, const int64_t offset,int32_t * toskip)
{
	return mp4ff_find_sample(f,track,offset + mp4ff_get_sample_offset(f,track,0),toskip);
}