153a5a1b3Sopenharmony_ci/*** 253a5a1b3Sopenharmony_ci This file is part of PulseAudio. 353a5a1b3Sopenharmony_ci 453a5a1b3Sopenharmony_ci Copyright (C) 2020 Asymptotic <sanchayan@asymptotic.io> 553a5a1b3Sopenharmony_ci 653a5a1b3Sopenharmony_ci PulseAudio is free software; you can redistribute it and/or modify 753a5a1b3Sopenharmony_ci it under the terms of the GNU Lesser General Public License as 853a5a1b3Sopenharmony_ci published by the Free Software Foundation; either version 2.1 of the 953a5a1b3Sopenharmony_ci License, or (at your option) any later version. 1053a5a1b3Sopenharmony_ci 1153a5a1b3Sopenharmony_ci PulseAudio is distributed in the hope that it will be useful, but 1253a5a1b3Sopenharmony_ci WITHOUT ANY WARRANTY; without even the implied warranty of 1353a5a1b3Sopenharmony_ci MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1453a5a1b3Sopenharmony_ci General Public License for more details. 1553a5a1b3Sopenharmony_ci 1653a5a1b3Sopenharmony_ci You should have received a copy of the GNU Lesser General Public 1753a5a1b3Sopenharmony_ci License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>. 1853a5a1b3Sopenharmony_ci***/ 1953a5a1b3Sopenharmony_ci 2053a5a1b3Sopenharmony_ci#include <gst/gst.h> 2153a5a1b3Sopenharmony_ci#include <gst/app/gstappsrc.h> 2253a5a1b3Sopenharmony_ci#include <gst/app/gstappsink.h> 2353a5a1b3Sopenharmony_ci#include <gst/base/gstadapter.h> 2453a5a1b3Sopenharmony_ci#include <pulsecore/fdsem.h> 2553a5a1b3Sopenharmony_ci 2653a5a1b3Sopenharmony_cienum a2dp_codec_type { 2753a5a1b3Sopenharmony_ci AAC = 0, 2853a5a1b3Sopenharmony_ci APTX, 2953a5a1b3Sopenharmony_ci APTX_HD, 3053a5a1b3Sopenharmony_ci LDAC_EQMID_HQ, 3153a5a1b3Sopenharmony_ci LDAC_EQMID_SQ, 3253a5a1b3Sopenharmony_ci LDAC_EQMID_MQ 3353a5a1b3Sopenharmony_ci}; 3453a5a1b3Sopenharmony_ci 3553a5a1b3Sopenharmony_cistruct gst_info { 3653a5a1b3Sopenharmony_ci pa_core *core; 3753a5a1b3Sopenharmony_ci pa_sample_spec *ss; 3853a5a1b3Sopenharmony_ci enum a2dp_codec_type codec_type; 3953a5a1b3Sopenharmony_ci union { 4053a5a1b3Sopenharmony_ci const a2dp_aac_t *aac_config; 4153a5a1b3Sopenharmony_ci const a2dp_aptx_t *aptx_config; 4253a5a1b3Sopenharmony_ci const a2dp_aptx_hd_t *aptx_hd_config; 4353a5a1b3Sopenharmony_ci const a2dp_ldac_t *ldac_config; 4453a5a1b3Sopenharmony_ci } a2dp_codec_t; 4553a5a1b3Sopenharmony_ci 4653a5a1b3Sopenharmony_ci /* The appsink element that accumulates encoded/decoded buffers */ 4753a5a1b3Sopenharmony_ci GstElement *app_sink; 4853a5a1b3Sopenharmony_ci GstElement *bin; 4953a5a1b3Sopenharmony_ci /* The sink pad to push to-be-encoded/decoded buffers into */ 5053a5a1b3Sopenharmony_ci GstPad *pad_sink; 5153a5a1b3Sopenharmony_ci 5253a5a1b3Sopenharmony_ci uint16_t seq_num; 5353a5a1b3Sopenharmony_ci}; 5453a5a1b3Sopenharmony_ci 5553a5a1b3Sopenharmony_cibool gst_codec_init(struct gst_info *info, bool for_encoding, GstElement *transcoder); 5653a5a1b3Sopenharmony_cisize_t gst_transcode_buffer(void *codec_info, uint32_t timestamp, const uint8_t *input_buffer, size_t input_size, uint8_t *output_buffer, size_t output_size, size_t *processed); 5753a5a1b3Sopenharmony_civoid gst_codec_deinit(void *codec_info); 58