Компилировать программу WebAssembly в зависимости от внешних библиотек Opus и Faac - PullRequest
0 голосов
/ 11 октября 2018

1.I git clone opus и faac.

2.в секунду, я кодирую:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <opus.h>
#include <faac.h>
void Opus2AacInit() {
int err_code = 0;
unsigned long input_samples = 0;

decoder = opus_decoder_create(SAMPLE_RATE, CHANNELS, &err_code);
if ( err_code < 0 ) {
    flag = FALSE;
    DebugPrint("%s Opus2Pcm-> opus_decoder_create err_code < 0, err_code:%d\n", ERROR, err_code);
    return;
}
enc_handle = faacEncOpen(SAMPLE_RATE, CHANNELS, &input_samples, &max_output_bytes);
if ( enc_handle == NULL ) {
    flag = FALSE;
    DebugPrint("%s Opus2AacInit-> hEncoder == NULL, failed\n", ERROR);
    return;
}
pcm_buffer_size = input_samples * PCM_BIT_SIZE / 8;
DebugPrint("%s Opus2AacInit-> input_samples:%lu, max_output_bytest:%lu, pcm_buffer_size:%d\n", INFO, input_samples, max_output_bytes, pcm_buffer_size);
aac_buffer = (unsigned char *)malloc(max_output_bytes);
pcm_buffer = (unsigned char *)malloc(pcm_buffer_size);
enc_configuration = faacEncGetCurrentConfiguration(enc_handle);
enc_configuration->inputFormat = FAAC_INPUT_16BIT;
aac_ret = faacEncSetConfiguration(enc_handle, enc_configuration);
flag = TRUE;
}

вы можете видеть, я использую opus и aac в моем проекте.но у меня есть проблема, когда я выполнил свой проект для использования веб-сборки.

emcc ../hello/aac/opus2aac.c  -s WASM=1 -s "MODULARIZE=1" -s "EXPORT_NAME='Opus2Aac'" -s "BINARYEN_METHOD='native-wasm'" -s "EXPORTED_FUNCTIONS=['_Opus2AacInit', '_Opus2Aac', '_test']" -o ../hello/aac/opus2aac.js -s EXTRA_EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]'

#include <opus.h>
     ^~~~~~~~
1 error generated.
ERROR:root:compiler frontend failed to generate LLVM bitcode, halting

, поэтому я не знаю, как создать две библиотеки для моего проекта с помощью веб-сборки?

спасибо.

1 Ответ

0 голосов
/ 17 октября 2018

Вам нужно будет включить исходный код и файлы заголовков для libopus и faac в соответствующие местоположения на вашем компьютере, как показано ниже:

emcc \
  -o ../hello/aac/opus2aac.js \
  -s WASM=1 -s "MODULARIZE=1" -s "EXPORT_NAME='Opus2Aac'" \
  -s "BINARYEN_METHOD='native-wasm'" \
  -s "EXPORTED_FUNCTIONS=['_Opus2AacInit', '_Opus2Aac', '_test']" \
  -s EXTRA_EXPORTED_RUNTIME_METHODS='["ccall", "cwrap"]' \
  -I "$LIBOPUS_DIR/include" \
  -I "$FAAC_DIR/include" \
  "$LIBOPUS_DIR" \
  "$FAAC_DIR" \
  ../hello/aac/opus2aac.c

Чтобы ускорить процесс во времяразработки, я рекомендую вам скомпилировать libopus и facc отдельно с emcc, а затем включить скомпилированные файлы *.dylib в вашу команду сборки. Я сделал нечто подобное с Opus в этом Makefile

...