-#endif /* _MMCAMCORDER_UPLOAD_SAMPLE */
-
- pthread_mutex_init(&(info->play_mutex), NULL);
- pthread_cond_init(&(info->play_cond), NULL);
-
-#ifdef _MMCAMCORDER_UPLOAD_SAMPLE
- /* read sample */
- memset (&(info->sfinfo), 0, sizeof(SF_INFO));
- info->infile = sf_open(info->filename, SFM_READ, &(info->sfinfo));
- if (!(info->infile)) {
- _mmcam_dbg_err("Failed to open sound file");
- goto SOUND_INIT_ERROR;
- }
-#endif /* _MMCAMCORDER_UPLOAD_SAMPLE */
-
- /**
- * Init Pulseaudio thread
- */
- /* create pulseaudio mainloop */
- info->pulse_mainloop = pa_threaded_mainloop_new();
- if (info->pulse_mainloop == NULL) {
- _mmcam_dbg_err("pa_threaded_mainloop_new failed");
- goto SOUND_INIT_ERROR;
- }
-
- /* start PA mainloop */
- ret = pa_threaded_mainloop_start(info->pulse_mainloop);
- if (ret < 0) {
- _mmcam_dbg_err("pa_threaded_mainloop_start failed");
- goto SOUND_INIT_ERROR;
- }
-
- /* lock pulseaudio thread */
- pa_threaded_mainloop_lock(info->pulse_mainloop);
-
- /* get pulseaudio api */
- api = pa_threaded_mainloop_get_api(info->pulse_mainloop);
- if (api == NULL) {
- _mmcam_dbg_err("pa_threaded_mainloop_get_api failed");
- pa_threaded_mainloop_unlock(info->pulse_mainloop);
- goto SOUND_INIT_ERROR;
- }
-
- /* create pulseaudio context */
- info->pulse_context = pa_context_new(api, NULL);
- if (info->pulse_context == NULL) {
- _mmcam_dbg_err("pa_context_new failed");
- pa_threaded_mainloop_unlock(info->pulse_mainloop);
- goto SOUND_INIT_ERROR;
- }
-
- /* set pulseaudio context callback */
- pa_context_set_state_callback(info->pulse_context, __pulseaudio_context_state_cb, info);
-
- if (pa_context_connect(info->pulse_context, NULL, PA_CONTEXT_NOAUTOSPAWN, NULL) < 0) {
- _mmcam_dbg_err("pa_context_connect error");
- }
-
- /* wait READY state of pulse context */
- while (TRUE) {
- pa_context_state_t state = pa_context_get_state(info->pulse_context);
-
- _mmcam_dbg_log("pa context state is now %d", state);
-
- if (!PA_CONTEXT_IS_GOOD (state)) {
- _mmcam_dbg_log("connection failed");
- break;
- }
-
- if (state == PA_CONTEXT_READY) {
- _mmcam_dbg_log("pa context READY");
- break;
- }
-
- /* Wait until the context is ready */
- _mmcam_dbg_log("waiting..................");
- pa_threaded_mainloop_wait(info->pulse_mainloop);
- _mmcam_dbg_log("waiting DONE. check again...");
- }
-
- /* unlock pulseaudio thread */
- pa_threaded_mainloop_unlock(info->pulse_mainloop);
-
-#ifdef _MMCAMCORDER_UPLOAD_SAMPLE
- /**
- * Upload sample
- */
- if (pa_sndfile_read_sample_spec(info->infile, &(info->sample_spec)) < 0) {
- _mmcam_dbg_err("Failed to determine sample specification from file");
- goto SOUND_INIT_ERROR;
- }
-
- info->sample_spec.format = PA_SAMPLE_S16LE;
-
- if (pa_sndfile_read_channel_map(info->infile, &(info->channel_map)) < 0) {
- pa_channel_map_init_extend(&(info->channel_map), info->sample_spec.channels, PA_CHANNEL_MAP_DEFAULT);
-
- if (info->sample_spec.channels > 2) {
- _mmcam_dbg_warn("Failed to determine sample specification from file");
- }
- }
-
- info->sample_length = (size_t)info->sfinfo.frames * pa_frame_size(&(info->sample_spec));
-
- pa_threaded_mainloop_lock(info->pulse_mainloop);