Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[submodule "libldac"]
path = libldac
url = https://android.googlesource.com/platform/external/libldac
url = https://github.com/open-vela/external_libldac
39 changes: 39 additions & 0 deletions 0001-hack-Try-to-fix-broken-API.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
From d688bd994c25011452657a47ba213073205c0e1c Mon Sep 17 00:00:00 2001
From: EliasofWaffle <eliascontato@protonmail.com>
Date: Sun, 10 May 2026 19:56:48 -0300
Subject: [PATCH] hack: Try to fix broken API

---
libldac/abr/inc/ldacBT_abr.h | 2 +-
libldac/abr/src/ldacBT_abr.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/libldac/abr/inc/ldacBT_abr.h b/libldac/abr/inc/ldacBT_abr.h
index 294e230..735ea67 100644
--- a/libldac/abr/inc/ldacBT_abr.h
+++ b/libldac/abr/inc/ldacBT_abr.h
@@ -89,7 +89,7 @@ typedef struct _ldacbt_abr_param * HANDLE_LDAC_ABR;
* Return value
* HANDLE_LDAC_ABR for success, NULL for failure.
*/
-LDAC_ABR_API HANDLE_LDAC_ABR ldac_ABR_get_handle(const char *libpath);
+LDAC_ABR_API HANDLE_LDAC_ABR ldac_ABR_get_handle(void);

/* Release of LDAC ABR handle.
* Format
diff --git a/libldac/abr/src/ldacBT_abr.c b/libldac/abr/src/ldacBT_abr.c
index 0af6278..682dcf3 100644
--- a/libldac/abr/src/ldacBT_abr.c
+++ b/libldac/abr/src/ldacBT_abr.c
@@ -122,7 +122,7 @@ static const int sizeOfEqmidToBitrateSortedIdTable = (int)(sizeof(aEqmidToAbrQua
/ sizeof(aEqmidToAbrQualityModeID[0]));

/* Get LDAC ABR handle */
-HANDLE_LDAC_ABR ldac_ABR_get_handle(const char *libpath)
+HANDLE_LDAC_ABR ldac_ABR_get_handle(void)
{
HANDLE_LDAC_ABR hLdacAbr;
ABRDBG( "" );
--
2.54.0

35 changes: 30 additions & 5 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.0)
cmake_minimum_required(VERSION 3.0...3.10)
project(libldac
LANGUAGES C
VERSION 2.0.2.3)
VERSION 2.0.3)

set(CMAKE_C_STANDARD 99)

Expand Down Expand Up @@ -32,6 +32,10 @@ add_subdirectory(pkgconfig)
include_directories(libldac/inc)
include_directories(libldac/abr/inc)

execute_process(COMMAND git apply "${CMAKE_SOURCE_DIR}/0001-hack-Try-to-fix-broken-API.patch"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)

# libldacBT_enc
add_library(ldacBT_enc SHARED
libldac/src/ldaclib.c
Expand All @@ -46,12 +50,26 @@ set_target_properties(ldacBT_enc PROPERTIES
PUBLIC_HEADER libldac/inc/ldacBT.h
)

# libldacBT_dec
add_library(ldacBT_dec SHARED
libldac/src/ldaclib.c
libldac/src/ldacBT.c
)

target_link_libraries(ldacBT_dec m)
target_compile_definitions(ldacBT_dec PUBLIC ${LDAC_SOFT_FLOAT_DEFINE})
set_target_properties(ldacBT_dec PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
PUBLIC_HEADER libldac/inc/ldacBT.h
)

# libldacBT_abr
add_library(ldacBT_abr SHARED
libldac/abr/src/ldacBT_abr.c
)

target_link_libraries(ldacBT_abr ldacBT_enc)
target_link_libraries(ldacBT_abr ldacBT_enc ldacBT_dec)
set_target_properties(ldacBT_abr PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
Expand All @@ -60,10 +78,17 @@ set_target_properties(ldacBT_abr PROPERTIES

install(TARGETS
ldacBT_enc
ldacBT_abr
ldacBT_dec
ldacBT_abr
LIBRARY
DESTINATION ${INSTALL_LIBDIR}
PUBLIC_HEADER
DESTINATION ${INSTALL_LDAC_INCLUDEDIR}
)
)


install(FILES
libldacBT_dec.h
DESTINATION ${INSTALL_LDAC_INCLUDEDIR}
)

2 changes: 1 addition & 1 deletion libldac
Submodule libldac updated 67 files
+40 −0 .gitee/ISSUE_TEMPLATE/001_bug_report.yml
+34 −0 .gitee/ISSUE_TEMPLATE/002_feature_request.yml
+22 −0 .gitee/ISSUE_TEMPLATE/003_help.yml
+1 −0 .gitee/ISSUE_TEMPLATE/config.yml
+11 −0 .gitee/PULL_REQUEST_TEMPLATE.md
+1 −0 .github/CODEOWNERS
+60 −0 .github/ISSUE_TEMPLATE/001_bug_report.yml
+55 −0 .github/ISSUE_TEMPLATE/002_feature_request.yml
+47 −0 .github/ISSUE_TEMPLATE/003_help.yml
+1 −0 .github/ISSUE_TEMPLATE/config.yml
+20 −0 .github/PULL_REQUEST_TEMPLATE.md
+14 −0 .github/workflows/checkpatch.yml
+16 −0 .github/workflows/ci.yml
+11 −0 .github/workflows/stale.yml
+2 −0 .gitignore
+0 −37 Android.bp
+0 −0 LICENSE
+9 −0 METADATA
+0 −0 NOTICE
+3 −0 OWNERS
+53 −0 abr/gcc/libldacBT_abr.mk
+9 −15 abr/inc/ldacBT_abr.h
+162 −40 abr/src/ldacBT_abr.c
+110 −0 fuzzer/libldac_encode_fuzzer.cc
+27 −0 fuzzer/ossfuzz.sh
+86 −0 gcc/libldacBT.mk
+55 −0 gcc/testldacBT.mk
+49 −0 gcc/testldacBT_dec.mk
+50 −0 gcc/testldacBT_enc.mk
+142 −13 inc/ldacBT.h
+20 −28 src/bitalloc_ldac.c
+129 −15 src/bitalloc_sub_ldac.c
+168 −0 src/decode_ldac.c
+126 −0 src/dequant_fixp_ldac.c
+101 −0 src/dequant_ldac.c
+5 −13 src/encode_ldac.c
+3 −13 src/fixp_ldac.h
+3 −13 src/func_fixp_ldac.c
+132 −0 src/imdct_fixp_ldac.c
+146 −0 src/imdct_ldac.c
+24 −13 src/ldac.h
+3 −13 src/ldacBT.c
+234 −16 src/ldacBT_api.c
+3 −13 src/ldacBT_ex.h
+106 −16 src/ldacBT_internal.c
+33 −13 src/ldacBT_internal.h
+17 −13 src/ldaclib.c
+18 −14 src/ldaclib.h
+173 −28 src/ldaclib_api.c
+5 −13 src/mdct_fixp_ldac.c
+5 −13 src/mdct_ldac.c
+3 −13 src/memory_ldac.c
+5 −13 src/pack_ldac.c
+55 −13 src/proto_ldac.h
+5 −13 src/quant_fixp_ldac.c
+5 −13 src/quant_ldac.c
+131 −13 src/setpcm_fixp_ldac.c
+164 −13 src/setpcm_ldac.c
+5 −13 src/sigana_fixp_ldac.c
+5 −13 src/sigana_ldac.c
+4 −15 src/struct_ldac.h
+176 −13 src/tables_ldac.c
+102 −13 src/tables_sigproc_fixp_ldac.c
+196 −13 src/tables_sigproc_ldac.c
+596 −0 src/unpack_ldac.c
+1,147 −0 test/main_ldacBt_i.c
+1,300 −0 test/main_ldacBt_o.c
282 changes: 282 additions & 0 deletions libldacBT_dec.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,282 @@
#ifndef __LDACBTDEC_H_
#define __LDACBTDEC_H_



typedef unsigned char undefined;

typedef unsigned char bool;
typedef unsigned char byte;
typedef unsigned int dword;
typedef unsigned char uchar;
typedef unsigned int uint;
typedef unsigned long ulong;
typedef unsigned long long ulonglong;
typedef unsigned char undefined1;
typedef unsigned short undefined2;
typedef unsigned int undefined4;
typedef unsigned long long undefined8;
typedef unsigned short ushort;
typedef unsigned short word;
typedef struct _st_ldacbt_config _st_ldacbt_config, *P_st_ldacbt_config;

typedef struct _st_ldacbt_config * P_LDACBT_CONFIG;

struct _st_ldacbt_config {
int id;
int nfrm_in_pkt;
int frmlen;
int frmlen_1ch;
};

typedef struct _st_ldacbt_eqmid_property _st_ldacbt_eqmid_property, *P_st_ldacbt_eqmid_property;

struct _st_ldacbt_eqmid_property {
int eqmid;
char strModeName[4];
int id_for_2DH5;
};

typedef struct _audio_block_ldac _audio_block_ldac, *P_audio_block_ldac;

typedef struct _audio_channel_ldac _audio_channel_ldac, *P_audio_channel_ldac;

typedef struct _audio_channel_ldac AC;

typedef struct _audio_block_ldac AB;

typedef struct _audio_channel_sub_ldac _audio_channel_sub_ldac, *P_audio_channel_sub_ldac;

typedef struct _audio_channel_sub_ldac ACSUB;

struct _audio_block_ldac {
int blk_type;
int blk_nchs;
int nbands;
int nqus;
int unk1;
int unk2;
int grad_mode;
int grad_qu_l;
int grad_qu_h;
int grad_os_l;
int grad_os_h;
int a_grad[50];
int nadjqus;
int abc_status;
int nbits_ab;
int nbits_band;
int nbits_grad;
int nbits_scfc;
int nbits_spec;
int nbits_avail;
int nbits_used;
int * p_smplrate_id;
int * p_error_code;
AC * ap_ac[2];
};

struct _audio_channel_ldac {
int ich;
int frmana_cnt;
int unk3;
int sfc_mode;
int sfc_bitlen;
int sfc_offset;
int sfc_weight;
int a_idsf[34];
int a_idwl1[34];
int a_idwl2[34];
int a_addwl[34];
int a_tmp[34];
int a_qspec[256];
int a_rspec[256];
AB * p_ab;
ACSUB * p_ascub;
};

struct _audio_channel_sub_ldac {
float a_time[512];
float a_spec[256];
};

typedef union IEEE754_FI IEEE754_FI, *PIEEE754_FI;

union IEEE754_FI {
float f;
int i;
};

typedef struct _config_info_ldac _config_info_ldac, *P_config_info_ldac;

typedef struct _config_info_ldac CFG;

struct _config_info_ldac {
int syncword;
int smplrate_id;
int chconfig_id;
int ch;
int frame_length;
int frame_status;
};

typedef struct _sfinfo_ldac _sfinfo_ldac, *P_sfinfo_ldac;

typedef struct _sfinfo_ldac SFINFO;

struct _sfinfo_ldac {
CFG CFG;
AB * p_ab;
AC * ap_ac[2];
char * p_mempos;
int error_code;
};

enum{
_2_DH1=3,
_2_DH2=4,
_2_DH3=5,
_3_DH1=6,
_3_DH2=7,
_3_DH3=8,
___DH1=0,
___DH2=1,
___DH3=2
};

typedef enum LDAC_SMPL_FMT_T {
LDAC_SMPL_FMT_F32=5,
LDAC_SMPL_FMT_MAX=2147483647,
LDAC_SMPL_FMT_NONE=0,
LDAC_SMPL_FMT_NUM=6,
LDAC_SMPL_FMT_S08=1,
LDAC_SMPL_FMT_S16=2,
LDAC_SMPL_FMT_S24=3,
LDAC_SMPL_FMT_S32=4
} LDAC_SMPL_FMT_T;

typedef struct _handle_ldac_struct _handle_ldac_struct, *P_handle_ldac_struct;

struct _handle_ldac_struct {
int nlnn;
int nbands;
int grad_mode;
int grad_qu_l;
int grad_qu_h;
int grad_os_l;
int grad_os_h;
int abc_status;
int error_code;
SFINFO sfinfo;
};

typedef struct _ldacbt_pcm_ring_buf _ldacbt_pcm_ring_buf, *P_ldacbt_pcm_ring_buf;

typedef struct _ldacbt_pcm_ring_buf LDACBT_PCM_RING_BUF;

struct _ldacbt_pcm_ring_buf {
char buf[6144];
int wp;
int rp;
int nsmpl;
};

typedef struct _ldacbt_transport_frame_buf _ldacbt_transport_frame_buf, *P_ldacbt_transport_frame_buf;

struct _ldacbt_transport_frame_buf {
char buf[1024];
int used;
int nfrm_in;
};

typedef struct _st_ldacbt_handle _st_ldacbt_handle, *P_st_ldacbt_handle;

typedef struct _handle_ldac_struct * HANDLE_LDAC;

typedef enum LDACBT_PROCMODE {
LDACBT_PROCMODE_DECODE=2,
LDACBT_PROCMODE_ENCODE=1,
LDACBT_PROCMODE_UNSET=4294967295
} LDACBT_PROCMODE;

typedef struct _ldacbt_pcm_info _ldacbt_pcm_info, *P_ldacbt_pcm_info;

typedef struct _ldacbt_pcm_info LDACBT_PCM_INFO;

typedef struct _ldacbt_tx_info _ldacbt_tx_info, *P_ldacbt_tx_info;

typedef struct _ldacbt_tx_info LDACBT_TX_INFO;

typedef struct _ldacbt_transport_frame_buf LDACBT_TRANSPORT_FRM_BUF;

typedef enum LDACBT_SMPL_FMT_T {
LDACBT_SMPL_FMT_F32=5,
LDACBT_SMPL_FMT_S16=2,
LDACBT_SMPL_FMT_S24=3,
LDACBT_SMPL_FMT_S32=4
} LDACBT_SMPL_FMT_T;

struct _ldacbt_tx_info {
int mtu;
int tx_size;
int pkt_type;
int pkt_hdr_sz;
int nrfm_in_pkt;
};

struct _ldacbt_pcm_info {
int sf;
int ch;
int wl;
enum LDACBT_SMPL_FMT_T fmt;
};

struct _st_ldacbt_handle {
HANDLE_LDAC hLDAC;
enum LDACBT_PROCMODE proc_mode;
int error_code;
int error_code_api;
LDACBT_PCM_INFO pcm;
LDACBT_TX_INFO tx;
int frm_samples;
int sfid;
int nshift;
int flg_encode_flushed;
int frm_status;
int frmlen;
int frmlen_tx;
int bitrate;
int eqmid;
int tgt_eqmid;
int tgt_nfrm_in_pkt;
int tgt_frmlen;
int stat_alter_op;
int cm;
int cci;
int transport;
int some_code;
LDACBT_TRANSPORT_FRM_BUF ldac_trns_frm_buf;
LDACBT_PCM_RING_BUF pcmring;
char * * pp_pcm;
char * ap_pcm[2];
char a_pcm[4096];
};

typedef struct _st_ldacbt_handle STRUCT_LDACBT_HANDLE;

typedef uchar STREAM;

typedef struct _st_ldacbt_eqmid_property * P_LDACBT_EQMID_PROPERTY;

typedef struct _st_ldacbt_handle * HANDLE_LDAC_BT;

typedef struct _st_ldacbt_eqmid_property LDACBT_EQMID_PROPERTY;

typedef struct _st_ldacbt_config LDACBT_CONFIG;

int ldacBT_decode(HANDLE_LDAC_BT hLdacBT, uchar *p_stream, void *p_pcm, LDACBT_SMPL_FMT_T fmt, int stream_sz, int *used_bytes, int *pcm_sz);
int ldacBT_init_handle_decode(HANDLE_LDAC_BT hLdacBT, int cm, int sf, int nshift, int var1, int var2);
HANDLE_LDAC_BT ldacBT_get_handle(void);
void ldacBT_free_handle(HANDLE_LDAC_BT hLdacBT);

#endif // __LDACBTDEC_H_
Loading