11394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov/******************************************************************************
21394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov *
35b790feeeb211c42bf78ca3ae9c26aa30e516765Jakub Pawlowski *  Copyright 2016 The Android Open Source Project
45b790feeeb211c42bf78ca3ae9c26aa30e516765Jakub Pawlowski *  Copyright 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
275ce0116fbf5b530d5b93f11312096eade1021c1ePavlin Radoslavov#include "a2dp_codec_api.h"
28397e5a5d6a6e14779af8431734ff605ccc49b2a7Pavlin Radoslavov#include "osi/include/time.h"
291394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov
30cd02ce9c60da962a7981320b26aada8744718941Pavlin Radoslavov// Loads the A2DP SBC encoder.
31cd02ce9c60da962a7981320b26aada8744718941Pavlin Radoslavov// Return true on success, otherwise false.
32cd02ce9c60da962a7981320b26aada8744718941Pavlin Radoslavovbool A2DP_LoadEncoderSbc(void);
33cd02ce9c60da962a7981320b26aada8744718941Pavlin Radoslavov
34cd02ce9c60da962a7981320b26aada8744718941Pavlin Radoslavov// Unloads the A2DP SBC encoder.
35cd02ce9c60da962a7981320b26aada8744718941Pavlin Radoslavovvoid A2DP_UnloadEncoderSbc(void);
36cd02ce9c60da962a7981320b26aada8744718941Pavlin Radoslavov
371394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// Initialize the A2DP SBC encoder.
385ce0116fbf5b530d5b93f11312096eade1021c1ePavlin Radoslavov// |p_peer_params| contains the A2DP peer information
395ce0116fbf5b530d5b93f11312096eade1021c1ePavlin Radoslavov// The current A2DP codec config is in |a2dp_codec_config|.
405ce0116fbf5b530d5b93f11312096eade1021c1ePavlin Radoslavov// |read_callback| is the callback for reading the input audio data.
415ce0116fbf5b530d5b93f11312096eade1021c1ePavlin Radoslavov// |enqueue_callback| is the callback for enqueueing the encoded audio data.
425ce0116fbf5b530d5b93f11312096eade1021c1ePavlin Radoslavovvoid a2dp_sbc_encoder_init(const tA2DP_ENCODER_INIT_PEER_PARAMS* p_peer_params,
435ce0116fbf5b530d5b93f11312096eade1021c1ePavlin Radoslavov                           A2dpCodecConfig* a2dp_codec_config,
44397e5a5d6a6e14779af8431734ff605ccc49b2a7Pavlin Radoslavov                           a2dp_source_read_callback_t read_callback,
45397e5a5d6a6e14779af8431734ff605ccc49b2a7Pavlin Radoslavov                           a2dp_source_enqueue_callback_t enqueue_callback);
461394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov
471394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// Cleanup the A2DP SBC encoder.
48f66f4e95f2b4bc8d36033f2d65b387e32601fcd8Pavlin Radoslavovvoid a2dp_sbc_encoder_cleanup(void);
491394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov
501394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// Reset the feeding for the A2DP SBC encoder.
51f66f4e95f2b4bc8d36033f2d65b387e32601fcd8Pavlin Radoslavovvoid a2dp_sbc_feeding_reset(void);
521394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov
531394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// Flush the feeding for the A2DP SBC encoder.
54f66f4e95f2b4bc8d36033f2d65b387e32601fcd8Pavlin Radoslavovvoid a2dp_sbc_feeding_flush(void);
551394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov
561394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// Get the A2DP SBC encoder interval (in milliseconds).
57f66f4e95f2b4bc8d36033f2d65b387e32601fcd8Pavlin Radoslavovperiod_ms_t a2dp_sbc_get_encoder_interval_ms(void);
581394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov
591394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// Prepare and send A2DP SBC encoded frames.
601394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov// |timestamp_us| is the current timestamp (in microseconds).
61f66f4e95f2b4bc8d36033f2d65b387e32601fcd8Pavlin Radoslavovvoid a2dp_sbc_send_frames(uint64_t timestamp_us);
621394c197027c0907932a814a786cc033870eb1c9Pavlin Radoslavov
634ed1875cc00071c841068e8bdee07fdcefe5fdf3Sunny Kapdi// Get SBC bitrate
644ed1875cc00071c841068e8bdee07fdcefe5fdf3Sunny Kapdi// Returns |uint32_t| bitrate in bits per second
654ed1875cc00071c841068e8bdee07fdcefe5fdf3Sunny Kapdiuint32_t a2dp_sbc_get_bitrate();
66397e5a5d6a6e14779af8431734ff605ccc49b2a7Pavlin Radoslavov#endif  // A2DP_SBC_ENCODER_H
67