Skip to content

Commit 9f1e206

Browse files
anonymix007asoulier
authored andcommitted
feature: Add lc3_encoder_disable_ltpf
LTPF requires a lot of processing power, so disabling it might be required for embedded low-performance devices.
1 parent 1de85e2 commit 9f1e206

File tree

4 files changed

+26
-2
lines changed

4 files changed

+26
-2
lines changed

include/lc3.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,17 @@ LC3_EXPORT lc3_encoder_t lc3_hr_setup_encoder(
355355
LC3_EXPORT lc3_encoder_t lc3_setup_encoder(
356356
int dt_us, int sr_hz, int sr_pcm_hz, void *mem);
357357

358+
/**
359+
* Disable LTPF analysis
360+
* encoder Handle of the encoder
361+
*
362+
* LTPF analysis is known to take a lot of CPU time and work quite bad on
363+
* synthetic signals such as sine waves, so it might be beneficial to
364+
* disable it in such cases.
365+
*/
366+
LC3_EXPORT void lc3_encoder_disable_ltpf(
367+
lc3_encoder_t encoder);
368+
358369
/**
359370
* Encode a frame
360371
* encoder Handle of the encoder

include/lc3_cpp.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,11 @@ class Encoder : public Base<struct lc3_encoder> {
137137
}
138138
}
139139

140+
void DisableLTPF() {
141+
for (auto &s : states)
142+
lc3_encoder_disable_ltpf(s.get());
143+
}
144+
140145
~Encoder() override = default;
141146

142147
// Reset encoder state

include/lc3_private.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ typedef struct lc3_spec_analysis {
113113
} lc3_spec_analysis_t;
114114

115115
struct lc3_encoder {
116+
bool ltpf_bypass;
117+
116118
enum lc3_dt dt;
117119
enum lc3_srate sr, sr_pcm;
118120

src/lc3.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ static void analyze(struct lc3_encoder *encoder,
301301

302302
bool att = lc3_attdet_run(dt, sr_pcm, nbytes, &encoder->attdet, xt);
303303

304-
side->pitch_present =
304+
side->pitch_present = !encoder->ltpf_bypass &&
305305
lc3_ltpf_analyse(dt, sr_pcm, &encoder->ltpf, xt, &side->ltpf);
306306

307307
memmove(xt - nt, xt + (ns-nt), nt * sizeof(*xt));
@@ -313,7 +313,7 @@ static void analyze(struct lc3_encoder *encoder,
313313
lc3_mdct_forward(dt, sr_pcm, sr, xs, xd, xf);
314314

315315
bool nn_flag = lc3_energy_compute(dt, sr, xf, e);
316-
if (nn_flag)
316+
if (nn_flag || encoder->ltpf_bypass)
317317
lc3_ltpf_disable(&side->ltpf);
318318

319319
side->bw = lc3_bwdet_run(dt, sr, e);
@@ -424,6 +424,12 @@ LC3_EXPORT struct lc3_encoder *lc3_setup_encoder(
424424
return lc3_hr_setup_encoder(false, dt_us, sr_hz, sr_pcm_hz, mem);
425425
}
426426

427+
LC3_EXPORT void lc3_encoder_disable_ltpf(
428+
struct lc3_encoder *encoder)
429+
{
430+
encoder->ltpf_bypass = true;
431+
}
432+
427433
/**
428434
* Encode a frame
429435
*/

0 commit comments

Comments
 (0)