a2dp_sbc_encoder.h revision cd02ce9c60da962a7981320b26aada8744718941
11394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov/****************************************************************************** 21394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov * 31394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov * Copyright (C) 2016 The Android Open Source Project 41394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov * Copyright (C) 2009-2012 Broadcom Corporation 51394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov * 61394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov * Licensed under the Apache License, Version 2.0 (the "License"); 71394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov * you may not use this file except in compliance with the License. 81394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov * You may obtain a copy of the License at: 91394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov * 101394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov * http://www.apache.org/licenses/LICENSE-2.0 111394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov * 121394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov * Unless required by applicable law or agreed to in writing, software 131394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov * distributed under the License is distributed on an "AS IS" BASIS, 141394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 151394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov * See the License for the specific language governing permissions and 161394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov * limitations under the License. 171394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov * 181394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov ******************************************************************************/ 191394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov 201394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// 211394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// Interface to the A2DP SBC Encoder 221394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// 231394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov 24f66f4e95f2b4bc8d36033f2d65b387e32601fcd8Pavlin Radoslavov#ifndef A2DP_SBC_ENCODER_H 25f66f4e95f2b4bc8d36033f2d65b387e32601fcd8Pavlin Radoslavov#define A2DP_SBC_ENCODER_H 261394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov 27f66f4e95f2b4bc8d36033f2d65b387e32601fcd8Pavlin Radoslavov#include "a2dp_api.h" 28397e5a5d6a6e14779af8431734ff605ccc49b2a7Pavlin Radoslavov#include "osi/include/time.h" 291394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov 301394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov#ifdef __cplusplus 311394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavovextern "C" { 321394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov#endif 331394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov 34cd02ce9c60da962a7981320b26aada8744718941Pavlin Radoslavov// Loads the A2DP SBC encoder. 35cd02ce9c60da962a7981320b26aada8744718941Pavlin Radoslavov// Return true on success, otherwise false. 36cd02ce9c60da962a7981320b26aada8744718941Pavlin Radoslavovbool A2DP_LoadEncoderSbc(void); 37cd02ce9c60da962a7981320b26aada8744718941Pavlin Radoslavov 38cd02ce9c60da962a7981320b26aada8744718941Pavlin Radoslavov// Unloads the A2DP SBC encoder. 39cd02ce9c60da962a7981320b26aada8744718941Pavlin Radoslavovvoid A2DP_UnloadEncoderSbc(void); 40cd02ce9c60da962a7981320b26aada8744718941Pavlin Radoslavov 411394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// Initialize the A2DP SBC encoder. 421394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// If |is_peer_edr| is true, the A2DP peer device supports EDR. 431394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// If |peer_supports_3mbps| is true, the A2DP peer device supports 3Mbps EDR. 441394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// The encoder initialization parameters are in |p_init_params|. 451394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// |enqueue_callback} is the callback for enqueueing the encoded audio data. 46f66f4e95f2b4bc8d36033f2d65b387e32601fcd8Pavlin Radoslavovvoid a2dp_sbc_encoder_init(bool is_peer_edr, bool peer_supports_3mbps, 47397e5a5d6a6e14779af8431734ff605ccc49b2a7Pavlin Radoslavov const tA2DP_ENCODER_INIT_PARAMS* p_init_params, 48397e5a5d6a6e14779af8431734ff605ccc49b2a7Pavlin Radoslavov a2dp_source_read_callback_t read_callback, 49397e5a5d6a6e14779af8431734ff605ccc49b2a7Pavlin Radoslavov a2dp_source_enqueue_callback_t enqueue_callback); 501394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov 511394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// Cleanup the A2DP SBC encoder. 52f66f4e95f2b4bc8d36033f2d65b387e32601fcd8Pavlin Radoslavovvoid a2dp_sbc_encoder_cleanup(void); 531394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov 541394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// Initialize the feeding for the A2DP SBC encoder. 551394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// The feeding initialization parameters are in |p_feeding_params|. 56397e5a5d6a6e14779af8431734ff605ccc49b2a7Pavlin Radoslavovvoid a2dp_sbc_feeding_init(const tA2DP_FEEDING_PARAMS* p_feeding_params); 571394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov 581394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// Reset the feeding for the A2DP SBC encoder. 59f66f4e95f2b4bc8d36033f2d65b387e32601fcd8Pavlin Radoslavovvoid a2dp_sbc_feeding_reset(void); 601394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov 611394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// Flush the feeding for the A2DP SBC encoder. 62f66f4e95f2b4bc8d36033f2d65b387e32601fcd8Pavlin Radoslavovvoid a2dp_sbc_feeding_flush(void); 631394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov 641394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// Get the A2DP SBC encoder interval (in milliseconds). 65f66f4e95f2b4bc8d36033f2d65b387e32601fcd8Pavlin Radoslavovperiod_ms_t a2dp_sbc_get_encoder_interval_ms(void); 661394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov 671394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// Prepare and send A2DP SBC encoded frames. 681394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// |timestamp_us| is the current timestamp (in microseconds). 69f66f4e95f2b4bc8d36033f2d65b387e32601fcd8Pavlin Radoslavovvoid a2dp_sbc_send_frames(uint64_t timestamp_us); 701394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov 71dd5ed02cf206ce724f3405b85aeac482cd2ece6dPavlin Radoslavov// Dump SBC codec-related statistics. 72dd5ed02cf206ce724f3405b85aeac482cd2ece6dPavlin Radoslavov// |fd| is the file descriptor to use to dump the statistics information 73dd5ed02cf206ce724f3405b85aeac482cd2ece6dPavlin Radoslavov// in user-friendly test format. 74f66f4e95f2b4bc8d36033f2d65b387e32601fcd8Pavlin Radoslavovvoid a2dp_sbc_debug_codec_dump(int fd); 75dd5ed02cf206ce724f3405b85aeac482cd2ece6dPavlin Radoslavov 761394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov#ifdef __cplusplus 771394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov} 781394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov#endif 791394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov 80397e5a5d6a6e14779af8431734ff605ccc49b2a7Pavlin Radoslavov#endif // A2DP_SBC_ENCODER_H 81