示例#1
0
文件: gau.c 项目: dazzlex27/S3DGE
gau_SampleSourceLoop* gau_sample_source_create_loop(ga_SampleSource* in_sampleSrc)
{
  gau_SampleSourceLoop* ret = gcX_ops->allocFunc(sizeof(gau_SampleSourceLoop));
  gau_SampleSourceLoopContext* ctx = &ret->context;
  gc_int32 sampleSize;
  ga_sample_source_init(&ret->sampleSrc);
  ga_sample_source_acquire(in_sampleSrc);
  ga_sample_source_format(in_sampleSrc, &ret->sampleSrc.format);
  sampleSize = ga_format_sampleSize(&ret->sampleSrc.format);
  ctx->triggerSample = -1;
  ctx->targetSample = -1;
  ctx->loopCount = 0;
  ctx->loopMutex = gc_mutex_create();
  ctx->innerSrc = in_sampleSrc;
  ctx->sampleSize = sampleSize;
  ret->sampleSrc.flags = ga_sample_source_flags(in_sampleSrc);
  ret->sampleSrc.flags |= GA_FLAG_THREADSAFE;
  assert(ret->sampleSrc.flags & GA_FLAG_SEEKABLE);
  ret->sampleSrc.readFunc = &gauX_sample_source_loop_read;
  ret->sampleSrc.endFunc = &gauX_sample_source_loop_end;
  ret->sampleSrc.readyFunc = &gauX_sample_source_loop_ready;
  ret->sampleSrc.seekFunc = &gauX_sample_source_loop_seek;
  ret->sampleSrc.tellFunc = &gauX_sample_source_loop_tell;
  ret->sampleSrc.closeFunc = &gauX_sample_source_loop_close;
  return ret;
}
示例#2
0
文件: ga.c 项目: Botyto/Core
ga_Handle* ga_handle_create(ga_Mixer* in_mixer,
                            ga_SampleSource* in_sampleSrc)
{
  ga_Handle* h = (ga_Handle*)gcX_ops->allocFunc(sizeof(ga_Handle));
  ga_sample_source_acquire(in_sampleSrc);
  h->sampleSrc = in_sampleSrc;
  h->finished = 0;
  gaX_handle_init(h, in_mixer);

  gc_mutex_lock(in_mixer->mixMutex);
  gc_list_link(&in_mixer->mixList, &h->mixLink, h);
  gc_mutex_unlock(in_mixer->mixMutex);

  gc_mutex_lock(in_mixer->dispatchMutex);
  gc_list_link(&in_mixer->dispatchList, &h->dispatchLink, h);
  gc_mutex_unlock(in_mixer->dispatchMutex);

  return h;
}
示例#3
0
/* Stream */
ga_BufferedStream* ga_stream_create(ga_StreamManager* in_mgr, ga_SampleSource* in_sampleSrc, gc_int32 in_bufferSize)
{
  ga_BufferedStream* ret = gcX_ops->allocFunc(sizeof(ga_BufferedStream));
  ret->refCount = 1;
  ret->refMutex = gc_mutex_create();
  ga_sample_source_acquire(in_sampleSrc);
  ga_sample_source_format(in_sampleSrc, &ret->format);
  gc_list_head(&ret->tellJumps);
  ret->innerSrc = in_sampleSrc;
  ret->nextSample = 0;
  ret->seek = 0;
  ret->tell = 0;
  ret->end = 0;
  ret->bufferSize = in_bufferSize;
  ret->flags = ga_sample_source_flags(in_sampleSrc);
  assert(ret->flags & GA_FLAG_THREADSAFE);
  ret->produceMutex = gc_mutex_create();
  ret->seekMutex = gc_mutex_create();
  ret->readMutex = gc_mutex_create();
  ret->buffer = gc_buffer_create(in_bufferSize);
  ret->streamLink = (gc_Link*)gaX_stream_manager_add(in_mgr, ret);
  return ret;
}