示例#1
0
文件: omx.c 项目: Ezio-PS/movian
static void
omx_mp_init(media_pipe_t *mp)
{
  if(!(mp->mp_flags & MP_VIDEO))
    return;

  mp->mp_seek_initiate   = omx_mp_begin_seek;
  mp->mp_seek_audio_done = omx_mp_seek_audio_done;
  mp->mp_seek_video_done = omx_mp_seek_video_done;
  mp->mp_hold_changed    = omx_mp_hold_changed;
  mp->mp_clock_setup     = omx_mp_clock_setup;


  omx_clk_t *clk = calloc(1, sizeof(omx_clk_t));
  TAILQ_INIT(&clk->q);
  clk->mp = mp;
  clk->c = omx_component_create("OMX.broadcom.clock", &mp->mp_mutex, NULL);
  hts_cond_init(&clk->cond, &mp->mp_mutex);
  mp->mp_extra = clk;

  omx_set_state(clk->c, OMX_StateIdle);

  omx_clk_do(clk, OMX_CLK_INIT, 1);

  hts_thread_create_joinable("omxclkctrl", &clk->tid, omx_clk_thread, clk,
			     THREAD_PRIO_DEMUXER);
}
示例#2
0
video_decoder_t *
video_decoder_create(media_pipe_t *mp, vd_frame_deliver_t *frame_delivery,
		     void *opaque)
{
  video_decoder_t *vd = calloc(1, sizeof(video_decoder_t));

  vd->vd_frame_deliver = frame_delivery;
  vd->vd_opaque = opaque;

  mp_ref_inc(mp);
  vd->vd_mp = mp;

  vd_init_timings(vd);

#ifdef CONFIG_DVD
  dvdspu_decoder_init(vd);
#endif

  TAILQ_INIT(&vd->vd_overlay_queue);
  hts_mutex_init(&vd->vd_overlay_mutex);

  hts_thread_create_joinable("video decoder", 
			     &vd->vd_decoder_thread, vd_thread, vd,
			     THREAD_PRIO_NORMAL);
  
  return vd;
}
示例#3
0
文件: omx.c 项目: kshostak/showtime
static void
omx_mp_init(media_pipe_t *mp)
{
  if(!(mp->mp_flags & MP_VIDEO))
    return;

#if 0
  if(0) {
    mp->mp_seek_initiate = omx_mp_begin_seek;
    mp->mp_seek_audio_done = omx_mp_seek_audio_done;
    mp->mp_seek_video_done = omx_mp_seek_video_done;
  }
#endif

  mp->mp_hold_changed = omx_mp_hold_changed;


  omx_clk_t *clk = calloc(1, sizeof(omx_clk_t));
  TAILQ_INIT(&clk->q);
  clk->mp = mp;
  clk->c = omx_component_create("OMX.broadcom.clock", &mp->mp_mutex, NULL);
  hts_cond_init(&clk->cond, &mp->mp_mutex);
  mp->mp_extra = clk;

  omx_set_state(clk->c, OMX_StateIdle);
#if 0
  OMX_TIME_CONFIG_CLOCKSTATETYPE cstate;
  OMX_INIT_STRUCTURE(cstate);
  cstate.eState = OMX_TIME_ClockStateWaitingForStartTime;
  cstate.nWaitMask = 1;
  omxchk(OMX_SetParameter(c->oc_handle,
			  OMX_IndexConfigTimeClockState, &cstate));

  OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE refClock;
  OMX_INIT_STRUCTURE(refClock);
  refClock.eClock = OMX_TIME_RefClockAudio;
  //  refClock.eClock = OMX_TIME_RefClockVideo;
  // refClock.eClock = OMX_TIME_RefClockNone;
#else
  OMX_TIME_CONFIG_CLOCKSTATETYPE cstate;
  OMX_INIT_STRUCTURE(cstate);
  cstate.eState = OMX_TIME_ClockStateRunning;
  omxchk(OMX_SetParameter(clk->c->oc_handle,
			  OMX_IndexConfigTimeClockState, &cstate));

  OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE refClock;
  OMX_INIT_STRUCTURE(refClock);
  refClock.eClock = OMX_TIME_RefClockAudio;
#endif

  omxchk(OMX_SetConfig(clk->c->oc_handle,
		       OMX_IndexConfigTimeActiveRefClock, &refClock));

  omx_set_state(clk->c, OMX_StateExecuting);

  hts_thread_create_joinable("omxclkctrl", &clk->tid, omx_clk_thread, clk,
			     THREAD_PRIO_DEMUXER);
}
示例#4
0
文件: audio.c 项目: Allba/showtime
void
audio_init(void)
{
  audio_fifo_init(&af0, 16000, 8000);

  htsmsg_t *m = htsmsg_store_load("audio/current");
  if(m == NULL)
    m = htsmsg_create_map();

  audio_mastervol_init();

  audio_settings_root =
    settings_add_dir(NULL, _p("Audio output"), "sound", NULL,
		     _p("Select audio output device and related configurations"),
		     "settings:audio");
  
  audio_settings_current_device = 
    settings_create_multiopt(audio_settings_root, "currentdevice", 
			     _p("Current output device"), 0);
  
  TAILQ_INIT(&audio_modes);

#ifdef CONFIG_LIBOGC
  audio_wii_init();
#endif

#if PS3
  audio_ps3_init();
#endif

  int have_pulse_audio  __attribute__((unused)) = 0;

#ifdef CONFIG_LIBPULSE
  have_pulse_audio |= audio_pa_init();
#endif

#ifdef CONFIG_LIBASOUND
  audio_alsa_init(have_pulse_audio);
#endif

#ifdef CONFIG_COREAUDIO
  audio_coreaudio_init();
#endif

  audio_dummy_init();


  settings_multiopt_initiate(audio_settings_current_device,
			     audio_change_output_device, NULL, NULL,
			     m, settings_generic_save_settings,
			     (void *)"audio/current");

  audio_run = 1;
  hts_thread_create_joinable("audio output", &audio_thread_id, 
			     audio_output_thread, NULL, THREAD_PRIO_HIGH);
}
示例#5
0
video_playback_t *
video_playback_create(media_pipe_t *mp)
{
  video_playback_t *vp = calloc(1, sizeof(video_playback_t));
  vp->vp_mp = mp;
  hts_thread_create_joinable("video player", 
			     &vp->vp_thread, video_player_idle, vp,
			     THREAD_PRIO_NORMAL);
  return vp;
}
示例#6
0
/**
 * Create an audio decoder pipeline.
 *
 * Called from media.c
 */
audio_decoder_t *
audio_decoder_create(media_pipe_t *mp)
{
  audio_decoder_t *ad;

  ad = calloc(1, sizeof(audio_decoder_t));
  ad->ad_mp = mp;
  ad->ad_outbuf = halloc(AVCODEC_MAX_AUDIO_FRAME_SIZE * 2);

  TAILQ_INIT(&ad->ad_hold_queue);

  hts_thread_create_joinable("audio decoder", &ad->ad_tid, ad_thread, ad,
			     THREAD_PRIO_HIGH);
  return ad;
}
示例#7
0
video_decoder_t *
video_decoder_create(media_pipe_t *mp)
{
  video_decoder_t *vd = calloc(1, sizeof(video_decoder_t));

  vd->vd_mp = mp_retain(mp);

  vd_init_timings(vd);

  hts_thread_create_joinable("video decoder", 
			     &vd->vd_decoder_thread, vd_thread, vd,
			     THREAD_PRIO_VIDEO);
  
  return vd;
}
示例#8
0
struct audio_decoder *
audio_decoder_create(struct media_pipe *mp)
{
  const audio_class_t *ac = audio_class;

  audio_decoder_t *ad = calloc(1, ac->ac_alloc_size);
  ad->ad_mp = mp;
  ad->ad_ac = ac;

  ad->ad_tile_size = 1024;
  ad->ad_frame = avcodec_alloc_frame();
  ad->ad_pts = AV_NOPTS_VALUE;
  ad->ad_epoch = 0;

  hts_thread_create_joinable("audio decoder", &ad->ad_tid,
                             audio_decode_thread, ad, THREAD_PRIO_HIGH);
  return ad;
}
示例#9
0
static void
enable_test_thread(int on)
{
  if(!generator_tid == !on)
    return;

  if(on) {
    assert(gen_mp == NULL);

    gen_mp = mp_create("testsignal", MP_PRIMABLE);
    hts_thread_create_joinable("audiotest", &generator_tid,
			       test_generator_thread, gen_mp,
			       THREAD_PRIO_DEMUXER);
  } else {
    event_t *e = event_create_type(EVENT_EXIT);
    mp_enqueue_event(gen_mp, e);
    event_release(e);
    hts_thread_join(&generator_tid);
    mp_shutdown(gen_mp);
    mp_ref_dec(gen_mp);
    gen_mp = NULL;
    generator_tid = 0;
  }
}