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