diff --git a/android/hal-audio-aptx.c b/android/hal-audio-aptx.c
index 807d82d..09636b8 100644
--- a/android/hal-audio-aptx.c
+++ b/android/hal-audio-aptx.c
memcpy(&aptx_data->aptx, preset->data, preset->len);
- /* TODO: initialize encoder */
+ aptx_data->enc = calloc(1, aptx_btencsize);
+ if (!aptx_data->enc) {
+ error("APTX: failed to create encoder");
+ free(aptx_data);
+ return false;
+ }
+
+ /* 1 = big-endian, this is what devices are using */
+ aptx_init(aptx_data->enc, 1);
*codec_data = aptx_data;
size_t len, struct media_packet *mp,
size_t mp_data_len, size_t *written)
{
- /* TODO: add encoding */
+ struct aptx_data *aptx_data = (struct aptx_data *) codec_data;
+ const int16_t *ptr = (const void *) buffer;
+ size_t bytes_in = 0;
+ size_t bytes_out = 0;
+
+ while ((len - bytes_in) >= 16 && (mp_data_len - bytes_out) >= 4) {
+ int pcm_l[4], pcm_r[4];
+ int i;
+
+ for (i = 0; i < 4; i++) {
+ pcm_l[i] = ptr[0];
+ pcm_r[i] = ptr[1];
+ ptr += 2;
+ }
+
+ aptx_encode(aptx_data->enc, pcm_l, pcm_r, &mp->data[bytes_out]);
+
+ bytes_in += 16;
+ bytes_out += 4;
+ }
+
+ *written = bytes_out;
- return len;
+ return bytes_in;
}
static bool aptx_update_qos(void *codec_data, uint8_t op)