void video_decoder_stop(video_decoder_t *vd) { media_pipe_t *mp = vd->vd_mp; mp_send_cmd_head(mp, &mp->mp_video, MB_CTRL_EXIT); hts_thread_join(&vd->vd_decoder_thread); mp_ref_dec(vd->vd_mp); vd->vd_mp = NULL; }
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; } }