Lines Matching refs:out
1133 struct stream_out *out = adev->primary_output; in put_echo_reference() local
1141 if (out != NULL && out->usecase == USECASE_AUDIO_PLAYBACK) { in put_echo_reference()
1146 if ((out->echo_reference_generation != prev_generation) || out->standby) in put_echo_reference()
1230 static int get_playback_delay(struct stream_out *out, in get_playback_delay() argument
1239 pcm_device = node_to_item(list_head(&out->pcm_dev_list), in get_playback_delay()
1258 out->config.rate); in get_playback_delay()
2111 void lock_output_stream(struct stream_out *out) in lock_output_stream() argument
2113 pthread_mutex_lock(&out->pre_lock); in lock_output_stream()
2114 pthread_mutex_lock(&out->lock); in lock_output_stream()
2115 pthread_mutex_unlock(&out->pre_lock); in lock_output_stream()
2120 static int send_offload_cmd_l(struct stream_out* out, int command) in send_offload_cmd_l() argument
2127 list_add_tail(&out->offload_cmd_list, &cmd->node); in send_offload_cmd_l()
2128 pthread_cond_signal(&out->offload_cond); in send_offload_cmd_l()
2133 static void stop_compressed_output_l(struct stream_out *out) in stop_compressed_output_l() argument
2135 out->send_new_metadata = 1; in stop_compressed_output_l()
2136 if (out->compr != NULL) { in stop_compressed_output_l()
2137 compress_stop(out->compr); in stop_compressed_output_l()
2138 while (out->offload_thread_blocked) { in stop_compressed_output_l()
2139 pthread_cond_wait(&out->cond, &out->lock); in stop_compressed_output_l()
2146 struct stream_out *out = (struct stream_out *) context; in offload_thread_loop() local
2154 lock_output_stream(out); in offload_thread_loop()
2161 __func__, list_empty(&out->offload_cmd_list), in offload_thread_loop()
2162 out->offload_state); in offload_thread_loop()
2163 if (list_empty(&out->offload_cmd_list)) { in offload_thread_loop()
2165 pthread_cond_wait(&out->offload_cond, &out->lock); in offload_thread_loop()
2170 item = list_head(&out->offload_cmd_list); in offload_thread_loop()
2175 __func__, out->offload_state, cmd->cmd, out->compr); in offload_thread_loop()
2182 if (out->compr == NULL) { in offload_thread_loop()
2184 pthread_cond_signal(&out->cond); in offload_thread_loop()
2187 out->offload_thread_blocked = true; in offload_thread_loop()
2188 pthread_mutex_unlock(&out->lock); in offload_thread_loop()
2192 compress_wait(out->compr, -1); in offload_thread_loop()
2197 compress_next_track(out->compr); in offload_thread_loop()
2198 compress_partial_drain(out->compr); in offload_thread_loop()
2203 compress_drain(out->compr); in offload_thread_loop()
2211 lock_output_stream(out); in offload_thread_loop()
2212 out->offload_thread_blocked = false; in offload_thread_loop()
2213 pthread_cond_signal(&out->cond); in offload_thread_loop()
2215 out->offload_callback(event, NULL, out->offload_cookie); in offload_thread_loop()
2220 pthread_cond_signal(&out->cond); in offload_thread_loop()
2221 while (!list_empty(&out->offload_cmd_list)) { in offload_thread_loop()
2222 item = list_head(&out->offload_cmd_list); in offload_thread_loop()
2226 pthread_mutex_unlock(&out->lock); in offload_thread_loop()
2231 static int create_offload_callback_thread(struct stream_out *out) in create_offload_callback_thread() argument
2233 pthread_cond_init(&out->offload_cond, (const pthread_condattr_t *) NULL); in create_offload_callback_thread()
2234 list_init(&out->offload_cmd_list); in create_offload_callback_thread()
2235 pthread_create(&out->offload_thread, (const pthread_attr_t *) NULL, in create_offload_callback_thread()
2236 offload_thread_loop, out); in create_offload_callback_thread()
2240 static int destroy_offload_callback_thread(struct stream_out *out) in destroy_offload_callback_thread() argument
2242 lock_output_stream(out); in destroy_offload_callback_thread()
2243 send_offload_cmd_l(out, OFFLOAD_CMD_EXIT); in destroy_offload_callback_thread()
2245 pthread_mutex_unlock(&out->lock); in destroy_offload_callback_thread()
2246 pthread_join(out->offload_thread, (void **) NULL); in destroy_offload_callback_thread()
2247 pthread_cond_destroy(&out->offload_cond); in destroy_offload_callback_thread()
2254 struct stream_out *out = (struct stream_out *)usecase->stream; in uc_release_pcm_devices() local
2259 list_for_each_safe(node, next, &out->pcm_dev_list) { in uc_release_pcm_devices()
2272 struct stream_out *out = (struct stream_out *)usecase->stream; in uc_select_pcm_devices() local
2279 list_init(&out->pcm_dev_list); in uc_select_pcm_devices()
2284 list_add_tail(&out->pcm_dev_list, &pcm_device->stream_list_node); in uc_select_pcm_devices()
2287 mixer_card = adev_get_mixer_for_card(out->dev, pcm_profile->card); in uc_select_pcm_devices()
2296 static int out_close_pcm_devices(struct stream_out *out) in out_close_pcm_devices() argument
2300 struct audio_device *adev = out->dev; in out_close_pcm_devices()
2302 list_for_each(node, &out->pcm_dev_list) { in out_close_pcm_devices()
2325 static int out_open_pcm_devices(struct stream_out *out) in out_open_pcm_devices() argument
2331 list_for_each(node, &out->pcm_dev_list) { in out_open_pcm_devices()
2349 if (out->sample_rate != pcm_device->pcm_profile->config.rate) { in out_open_pcm_devices()
2353 out->sample_rate, pcm_device->pcm_profile->config.rate); in out_open_pcm_devices()
2354 ret = create_resampler(out->sample_rate, in out_open_pcm_devices()
2356 audio_channel_count_from_out_mask(out->channel_mask), in out_open_pcm_devices()
2367 out_close_pcm_devices(out); in out_open_pcm_devices()
2371 static int disable_output_path_l(struct stream_out *out) in disable_output_path_l() argument
2373 struct audio_device *adev = out->dev; in disable_output_path_l()
2376 uc_info = get_usecase_from_id(adev, out->usecase); in disable_output_path_l()
2379 __func__, out->usecase); in disable_output_path_l()
2390 static void enable_output_path_l(struct stream_out *out) in enable_output_path_l() argument
2392 struct audio_device *adev = out->dev; in enable_output_path_l()
2396 uc_info->id = out->usecase; in enable_output_path_l()
2398 uc_info->stream = (struct audio_stream *)out; in enable_output_path_l()
2399 uc_info->devices = out->devices; in enable_output_path_l()
2405 select_devices(adev, out->usecase); in enable_output_path_l()
2408 static int stop_output_stream(struct stream_out *out) in stop_output_stream() argument
2411 struct audio_device *adev = out->dev; in stop_output_stream()
2415 out->usecase, use_case_table[out->usecase]); in stop_output_stream()
2417 if (out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD && in stop_output_stream()
2419 adev->offload_fx_stop_output(out->handle); in stop_output_stream()
2421 if (out->offload_state == OFFLOAD_STATE_PAUSED || in stop_output_stream()
2422 out->offload_state == OFFLOAD_STATE_PAUSED_FLUSHED) in stop_output_stream()
2424 out->offload_state = OFFLOAD_STATE_IDLE; in stop_output_stream()
2427 ret = disable_output_path_l(out); in stop_output_stream()
2433 static int start_output_stream(struct stream_out *out) in start_output_stream() argument
2436 struct audio_device *adev = out->dev; in start_output_stream()
2439 __func__, out->usecase, use_case_table[out->usecase], out->devices, out->config.channels); in start_output_stream()
2441 enable_output_path_l(out); in start_output_stream()
2443 if (out->usecase != USECASE_AUDIO_PLAYBACK_OFFLOAD) { in start_output_stream()
2444 out->compr = NULL; in start_output_stream()
2445 ret = out_open_pcm_devices(out); in start_output_stream()
2449 out->echo_reference = NULL; in start_output_stream()
2450 out->echo_reference_generation = adev->echo_reference_generation; in start_output_stream()
2452 out->echo_reference = adev->echo_reference; in start_output_stream()
2455 out->compr = compress_open(COMPRESS_CARD, COMPRESS_DEVICE, in start_output_stream()
2456 COMPRESS_IN, &out->compr_config); in start_output_stream()
2457 if (out->compr && !is_compress_ready(out->compr)) { in start_output_stream()
2458 ALOGE("%s: %s", __func__, compress_get_error(out->compr)); in start_output_stream()
2459 compress_close(out->compr); in start_output_stream()
2460 out->compr = NULL; in start_output_stream()
2464 if (out->offload_callback) in start_output_stream()
2465 compress_nonblock(out->compr, out->non_blocking); in start_output_stream()
2468 adev->offload_fx_start_output(out->handle); in start_output_stream()
2473 stop_output_stream(out); in start_output_stream()
2593 struct stream_out *out = (struct stream_out *)stream; in out_get_sample_rate() local
2595 return out->sample_rate; in out_get_sample_rate()
2607 struct stream_out *out = (struct stream_out *)stream; in out_get_buffer_size() local
2609 if (out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD) { in out_get_buffer_size()
2610 return out->compr_config.fragment_size; in out_get_buffer_size()
2613 return out->config.period_size * in out_get_buffer_size()
2619 struct stream_out *out = (struct stream_out *)stream; in out_get_channels() local
2621 return out->channel_mask; in out_get_channels()
2626 struct stream_out *out = (struct stream_out *)stream; in out_get_format() local
2628 return out->format; in out_get_format()
2638 static int do_out_standby_l(struct stream_out *out) in do_out_standby_l() argument
2640 struct audio_device *adev = out->dev; in do_out_standby_l()
2643 out->standby = true; in do_out_standby_l()
2644 if (out->usecase != USECASE_AUDIO_PLAYBACK_OFFLOAD) { in do_out_standby_l()
2645 out_close_pcm_devices(out); in do_out_standby_l()
2648 if (out->echo_reference != NULL) { in do_out_standby_l()
2649 out->echo_reference->write(out->echo_reference, NULL); in do_out_standby_l()
2650 if (out->echo_reference_generation != adev->echo_reference_generation) { in do_out_standby_l()
2651 ALOGV("%s: release_echo_reference %p", __func__, out->echo_reference); in do_out_standby_l()
2652 release_echo_reference(out->echo_reference); in do_out_standby_l()
2653 out->echo_reference_generation = adev->echo_reference_generation; in do_out_standby_l()
2655 out->echo_reference = NULL; in do_out_standby_l()
2659 stop_compressed_output_l(out); in do_out_standby_l()
2660 out->gapless_mdata.encoder_delay = 0; in do_out_standby_l()
2661 out->gapless_mdata.encoder_padding = 0; in do_out_standby_l()
2662 if (out->compr != NULL) { in do_out_standby_l()
2663 compress_close(out->compr); in do_out_standby_l()
2664 out->compr = NULL; in do_out_standby_l()
2667 status = stop_output_stream(out); in do_out_standby_l()
2674 struct stream_out *out = (struct stream_out *)stream; in out_standby() local
2675 struct audio_device *adev = out->dev; in out_standby()
2678 out->usecase, use_case_table[out->usecase]); in out_standby()
2679 lock_output_stream(out); in out_standby()
2680 if (!out->standby) { in out_standby()
2682 do_out_standby_l(out); in out_standby()
2685 pthread_mutex_unlock(&out->lock); in out_standby()
2698 static int parse_compress_metadata(struct stream_out *out, struct str_parms *parms) in parse_compress_metadata() argument
2704 if (!out || !parms) { in parse_compress_metadata()
2722 out->gapless_mdata = tmp_mdata; in parse_compress_metadata()
2723 out->send_new_metadata = 1; in parse_compress_metadata()
2725 out->gapless_mdata.encoder_delay, out->gapless_mdata.encoder_padding); in parse_compress_metadata()
2733 struct stream_out *out = (struct stream_out *)stream; in out_set_parameters() local
2734 struct audio_device *adev = out->dev; in out_set_parameters()
2749 __func__, out->usecase, use_case_table[out->usecase], kvpairs, out->devices, adev->mode); in out_set_parameters()
2755 lock_output_stream(out); in out_set_parameters()
2758 if (((int)out->devices != val) && (val != 0) && (!out->standby) && in out_set_parameters()
2759 (out->usecase == USECASE_AUDIO_PLAYBACK)) { in out_set_parameters()
2770 out->devices = val; in out_set_parameters()
2772 if (!out->standby) { in out_set_parameters()
2773 uc_info = get_usecase_from_id(adev, out->usecase); in out_set_parameters()
2776 __func__, out->usecase); in out_set_parameters()
2778 list_for_each(node, &out->pcm_dev_list) { in out_set_parameters()
2788 do_out_standby_l(out); in out_set_parameters()
2790 if (out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD) { in out_set_parameters()
2802 select_devices(adev, out->usecase); in out_set_parameters()
2807 (out == adev->primary_output)) { in out_set_parameters()
2810 (out == adev->primary_output)) { in out_set_parameters()
2816 (out == adev->primary_output)) { in out_set_parameters()
2820 pthread_mutex_unlock(&out->lock); in out_set_parameters()
2835 if (out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD) { in out_set_parameters()
2836 parse_compress_metadata(out, parms); in out_set_parameters()
2849 struct stream_out *out = (struct stream_out *)stream; in out_get_parameters() local
2862 while (out->supported_channel_masks[i] != 0) { in out_get_parameters()
2864 if (out_channels_name_to_enum_table[j].value == out->supported_channel_masks[i]) { in out_get_parameters()
2888 struct stream_out *out = (struct stream_out *)stream; in out_get_latency() local
2890 if (out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD) in out_get_latency()
2893 return (out->config.period_count * out->config.period_size * 1000) / in out_get_latency()
2894 (out->config.rate); in out_get_latency()
2900 struct stream_out *out = (struct stream_out *)stream; in out_set_volume() local
2901 struct audio_device *adev = out->dev; in out_set_volume()
2904 if (out->usecase == USECASE_AUDIO_PLAYBACK_MULTI_CH) { in out_set_volume()
2906 out->muted = (left == 0.0f); in out_set_volume()
2908 } else if (out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD) { in out_set_volume()
2982 struct stream_out *out = (struct stream_out *)stream; in out_write() local
2983 struct audio_device *adev = out->dev; in out_write()
2999 lock_output_stream(out); in out_write()
3001 if (out->usecase == USECASE_AUDIO_PLAYBACK && !out->is_fastmixer_affinity_set) { in out_write()
3007 out->is_fastmixer_affinity_set = true; in out_write()
3010 if (out->standby) { in out_write()
3012 pthread_mutex_unlock(&out->lock); in out_write()
3015 lock_output_stream(out); in out_write()
3016 if (!out->standby) { in out_write()
3022 ret = start_output_stream(out); in out_write()
3031 out->standby = false; in out_write()
3052 if (out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD) { in out_write()
3055 if (out->offload_state == OFFLOAD_STATE_PAUSED_FLUSHED) { in out_write()
3058 enable_output_path_l(out); in out_write()
3062 if (out->send_new_metadata) { in out_write()
3064 compress_set_gapless_metadata(out->compr, &out->gapless_mdata); in out_write()
3065 out->send_new_metadata = 0; in out_write()
3068 ret = compress_write(out->compr, buffer, bytes); in out_write()
3071 send_offload_cmd_l(out, OFFLOAD_CMD_WAIT_FOR_BUFFER); in out_write()
3073 if (out->offload_state != OFFLOAD_STATE_PLAYING) { in out_write()
3074 compress_start(out->compr); in out_write()
3075 out->offload_state = OFFLOAD_STATE_PLAYING; in out_write()
3077 pthread_mutex_unlock(&out->lock); in out_write()
3088 != out->echo_reference_generation) { in out_write()
3090 if (out->echo_reference != NULL) { in out_write()
3091 ALOGV("%s: release_echo_reference %p", __func__, out->echo_reference); in out_write()
3092 release_echo_reference(out->echo_reference); in out_write()
3097 out->echo_reference_generation = adev->echo_reference_generation; in out_write()
3098 out->echo_reference = adev->echo_reference; in out_write()
3100 out->echo_reference_generation); in out_write()
3105 if (out->muted) in out_write()
3107 list_for_each(node, &out->pcm_dev_list) { in out_write()
3110 if (bytes * pcm_device->pcm_profile->config.rate / out->sample_rate + frame_size in out_write()
3113 … bytes * pcm_device->pcm_profile->config.rate / out->sample_rate + frame_size; in out_write()
3129 … if (out->echo_reference != NULL && pcm_device->pcm_profile->devices != SND_DEVICE_OUT_SPEAKER) { in out_write()
3134 get_playback_delay(out, out_frames, &b); in out_write()
3135 out->echo_reference->write(out->echo_reference, &b); in out_write()
3139 if (out->devices & AUDIO_DEVICE_OUT_SPEAKER) { in out_write()
3142 … calloc(pcm_frames_to_bytes(pcm_device->pcm, out->config.period_size), in out_write()
3168 for (i = out->config.period_count; i > 0; i--) in out_write()
3171 out->config.period_size)); in out_write()
3200 pthread_mutex_unlock(&out->lock); in out_write()
3219 out->written += bytes / (out->config.channels * sizeof(short)); in out_write()
3223 pthread_mutex_unlock(&out->lock); in out_write()
3226 list_for_each(node, &out->pcm_dev_list) { in out_write()
3231 out_standby(&out->stream.common); in out_write()
3233 out_get_sample_rate(&out->stream.common)); in out_write()
3256 struct stream_out *out = (struct stream_out *)stream; in out_get_render_position() local
3258 if ((out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD) && (dsp_frames != NULL)) { in out_get_render_position()
3259 lock_output_stream(out); in out_get_render_position()
3260 if (out->compr != NULL) { in out_get_render_position()
3261 compress_get_tstamp(out->compr, (unsigned long *)dsp_frames, in out_get_render_position()
3262 &out->sample_rate); in out_get_render_position()
3264 __func__, *dsp_frames, out->sample_rate); in out_get_render_position()
3266 pthread_mutex_unlock(&out->lock); in out_get_render_position()
3297 struct stream_out *out = (struct stream_out *)stream; in out_get_presentation_position() local
3301 lock_output_stream(out); in out_get_presentation_position()
3303 if (out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD) { in out_get_presentation_position()
3304 if (out->compr != NULL) { in out_get_presentation_position()
3305 compress_get_tstamp(out->compr, &dsp_frames, in out_get_presentation_position()
3306 &out->sample_rate); in out_get_presentation_position()
3308 __func__, dsp_frames, out->sample_rate); in out_get_presentation_position()
3316 if (!list_empty(&out->pcm_dev_list)) { in out_get_presentation_position()
3318 struct pcm_device *pcm_device = node_to_item(list_head(&out->pcm_dev_list), in out_get_presentation_position()
3322 size_t kernel_buffer_size = out->config.period_size * out->config.period_count; in out_get_presentation_position()
3323 int64_t signed_frames = out->written - kernel_buffer_size + avail; in out_get_presentation_position()
3327 (render_latency(out->usecase) * out->sample_rate / 1000000LL); in out_get_presentation_position()
3338 pthread_mutex_unlock(&out->lock); in out_get_presentation_position()
3346 struct stream_out *out = (struct stream_out *)stream; in out_set_callback() local
3349 lock_output_stream(out); in out_set_callback()
3350 out->offload_callback = callback; in out_set_callback()
3351 out->offload_cookie = cookie; in out_set_callback()
3352 pthread_mutex_unlock(&out->lock); in out_set_callback()
3358 struct stream_out *out = (struct stream_out *)stream; in out_pause() local
3361 if (out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD) { in out_pause()
3362 lock_output_stream(out); in out_pause()
3363 if (out->compr != NULL && out->offload_state == OFFLOAD_STATE_PLAYING) { in out_pause()
3364 status = compress_pause(out->compr); in out_pause()
3365 out->offload_state = OFFLOAD_STATE_PAUSED; in out_pause()
3366 pthread_mutex_lock(&out->dev->lock); in out_pause()
3367 status = disable_output_path_l(out); in out_pause()
3368 pthread_mutex_unlock(&out->dev->lock); in out_pause()
3370 pthread_mutex_unlock(&out->lock); in out_pause()
3377 struct stream_out *out = (struct stream_out *)stream; in out_resume() local
3380 if (out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD) { in out_resume()
3382 lock_output_stream(out); in out_resume()
3383 if (out->compr != NULL && out->offload_state == OFFLOAD_STATE_PAUSED) { in out_resume()
3384 pthread_mutex_lock(&out->dev->lock); in out_resume()
3385 enable_output_path_l(out); in out_resume()
3386 pthread_mutex_unlock(&out->dev->lock); in out_resume()
3387 status = compress_resume(out->compr); in out_resume()
3388 out->offload_state = OFFLOAD_STATE_PLAYING; in out_resume()
3390 pthread_mutex_unlock(&out->lock); in out_resume()
3397 struct stream_out *out = (struct stream_out *)stream; in out_drain() local
3400 if (out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD) { in out_drain()
3401 lock_output_stream(out); in out_drain()
3403 status = send_offload_cmd_l(out, OFFLOAD_CMD_PARTIAL_DRAIN); in out_drain()
3405 status = send_offload_cmd_l(out, OFFLOAD_CMD_DRAIN); in out_drain()
3406 pthread_mutex_unlock(&out->lock); in out_drain()
3413 struct stream_out *out = (struct stream_out *)stream; in out_flush() local
3415 if (out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD) { in out_flush()
3416 lock_output_stream(out); in out_flush()
3417 if (out->offload_state == OFFLOAD_STATE_PLAYING) { in out_flush()
3418 ALOGE("out_flush() called in wrong state %d", out->offload_state); in out_flush()
3419 pthread_mutex_unlock(&out->lock); in out_flush()
3422 if (out->offload_state == OFFLOAD_STATE_PAUSED) { in out_flush()
3423 stop_compressed_output_l(out); in out_flush()
3424 out->offload_state = OFFLOAD_STATE_PAUSED_FLUSHED; in out_flush()
3426 pthread_mutex_unlock(&out->lock); in out_flush()
3887 struct stream_out *out; in adev_open_output_stream() local
3894 out = (struct stream_out *)calloc(1, sizeof(struct stream_out)); in adev_open_output_stream()
3899 out->flags = flags; in adev_open_output_stream()
3900 out->devices = devices; in adev_open_output_stream()
3901 out->dev = adev; in adev_open_output_stream()
3902 out->format = config->format; in adev_open_output_stream()
3903 out->sample_rate = config->sample_rate; in adev_open_output_stream()
3904 out->channel_mask = AUDIO_CHANNEL_OUT_STEREO; in adev_open_output_stream()
3905 out->supported_channel_masks[0] = AUDIO_CHANNEL_OUT_STEREO; in adev_open_output_stream()
3906 out->handle = handle; in adev_open_output_stream()
3913 out->config = pcm_profile->config; in adev_open_output_stream()
3916 if (out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) { in adev_open_output_stream()
3929 out->compr_config.codec = (struct snd_codec *) in adev_open_output_stream()
3932 out->usecase = USECASE_AUDIO_PLAYBACK_OFFLOAD; in adev_open_output_stream()
3934 out->channel_mask = config->offload_info.channel_mask; in adev_open_output_stream()
3936 out->channel_mask = config->channel_mask; in adev_open_output_stream()
3937 out->format = config->offload_info.format; in adev_open_output_stream()
3938 out->sample_rate = config->offload_info.sample_rate; in adev_open_output_stream()
3940 out->stream.set_callback = out_set_callback; in adev_open_output_stream()
3941 out->stream.pause = out_pause; in adev_open_output_stream()
3942 out->stream.resume = out_resume; in adev_open_output_stream()
3943 out->stream.drain = out_drain; in adev_open_output_stream()
3944 out->stream.flush = out_flush; in adev_open_output_stream()
3946 out->compr_config.codec->id = in adev_open_output_stream()
3948 out->compr_config.fragment_size = COMPRESS_OFFLOAD_FRAGMENT_SIZE; in adev_open_output_stream()
3949 out->compr_config.fragments = COMPRESS_OFFLOAD_NUM_FRAGMENTS; in adev_open_output_stream()
3950 out->compr_config.codec->sample_rate = config->offload_info.sample_rate; in adev_open_output_stream()
3951 out->compr_config.codec->bit_rate = in adev_open_output_stream()
3953 out->compr_config.codec->ch_in = in adev_open_output_stream()
3955 out->compr_config.codec->ch_out = out->compr_config.codec->ch_in; in adev_open_output_stream()
3958 out->non_blocking = 1; in adev_open_output_stream()
3960 out->send_new_metadata = 1; in adev_open_output_stream()
3961 create_offload_callback_thread(out); in adev_open_output_stream()
3962 out->offload_state = OFFLOAD_STATE_IDLE; in adev_open_output_stream()
3967 } else if (out->flags & (AUDIO_OUTPUT_FLAG_DEEP_BUFFER)) { in adev_open_output_stream()
3968 out->usecase = USECASE_AUDIO_PLAYBACK_DEEP_BUFFER; in adev_open_output_stream()
3969 out->config = pcm_config_deep_buffer; in adev_open_output_stream()
3970 out->sample_rate = out->config.rate; in adev_open_output_stream()
3973 out->usecase = USECASE_AUDIO_PLAYBACK; in adev_open_output_stream()
3974 out->sample_rate = out->config.rate; in adev_open_output_stream()
3979 adev->primary_output = out; in adev_open_output_stream()
3989 if (get_usecase_from_id(adev, out->usecase) != NULL) { in adev_open_output_stream()
3990 ALOGE("%s: Usecase (%d) is already present", __func__, out->usecase); in adev_open_output_stream()
3997 out->stream.common.get_sample_rate = out_get_sample_rate; in adev_open_output_stream()
3998 out->stream.common.set_sample_rate = out_set_sample_rate; in adev_open_output_stream()
3999 out->stream.common.get_buffer_size = out_get_buffer_size; in adev_open_output_stream()
4000 out->stream.common.get_channels = out_get_channels; in adev_open_output_stream()
4001 out->stream.common.get_format = out_get_format; in adev_open_output_stream()
4002 out->stream.common.set_format = out_set_format; in adev_open_output_stream()
4003 out->stream.common.standby = out_standby; in adev_open_output_stream()
4004 out->stream.common.dump = out_dump; in adev_open_output_stream()
4005 out->stream.common.set_parameters = out_set_parameters; in adev_open_output_stream()
4006 out->stream.common.get_parameters = out_get_parameters; in adev_open_output_stream()
4007 out->stream.common.add_audio_effect = out_add_audio_effect; in adev_open_output_stream()
4008 out->stream.common.remove_audio_effect = out_remove_audio_effect; in adev_open_output_stream()
4009 out->stream.get_latency = out_get_latency; in adev_open_output_stream()
4010 out->stream.set_volume = out_set_volume; in adev_open_output_stream()
4011 out->stream.write = out_write; in adev_open_output_stream()
4012 out->stream.get_render_position = out_get_render_position; in adev_open_output_stream()
4013 out->stream.get_next_write_timestamp = out_get_next_write_timestamp; in adev_open_output_stream()
4014 out->stream.get_presentation_position = out_get_presentation_position; in adev_open_output_stream()
4016 out->standby = 1; in adev_open_output_stream()
4020 pthread_mutex_init(&out->lock, (const pthread_mutexattr_t *) NULL); in adev_open_output_stream()
4021 pthread_mutex_init(&out->pre_lock, (const pthread_mutexattr_t *) NULL); in adev_open_output_stream()
4022 pthread_cond_init(&out->cond, (const pthread_condattr_t *) NULL); in adev_open_output_stream()
4024 config->format = out->stream.common.get_format(&out->stream.common); in adev_open_output_stream()
4025 config->channel_mask = out->stream.common.get_channels(&out->stream.common); in adev_open_output_stream()
4026 config->sample_rate = out->stream.common.get_sample_rate(&out->stream.common); in adev_open_output_stream()
4028 out->is_fastmixer_affinity_set = false; in adev_open_output_stream()
4030 *stream_out = &out->stream; in adev_open_output_stream()
4035 free(out); in adev_open_output_stream()
4044 struct stream_out *out = (struct stream_out *)stream; in adev_close_output_stream() local
4045 struct audio_device *adev = out->dev; in adev_close_output_stream()
4050 if (out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD) { in adev_close_output_stream()
4051 destroy_offload_callback_thread(out); in adev_close_output_stream()
4053 if (out->compr_config.codec != NULL) in adev_close_output_stream()
4054 free(out->compr_config.codec); in adev_close_output_stream()
4056 pthread_cond_destroy(&out->cond); in adev_close_output_stream()
4057 pthread_mutex_destroy(&out->lock); in adev_close_output_stream()