The "GR-PEACH_Audio_Playback_7InchLCD_Sample" is a sample code that can provides high-resolution audio playback of FLAC format files. It also allows the user to audio-playback control functions such as play, pause, and stop by manipulating key switches.
Dependencies: GR-PEACH_video R_BSP TLV320_RBSP USBHost_custom
Fork of GR-PEACH_Audio_Playback_Sample by
Note
For a sample program of without LCD Board, please refer to GR-PEACH_Audio_Playback_Sample.
Introduction
The "GR-PEACH_Audio_Playback_7InchLCD_Sample" is a sample code that can provides high-resolution audio playback of FLAC format files. It also allows the user to audio-playback control functions such as play, pause, and stop by manipulating key switches.
1. Overview of the Sample Code
1.1 Software Block Diagram
Figure 1.1 shows the software block diagram.
1.2 Pin Definitions
Table 1.1 shows the pins used in this sample code.
2. Sample Code Operating Environment
In order to operate this sample code, GR-PEACH, Audio Camera Shield and 7.1 inch LCD Shield must be needed. For details on Audio Camera Shield and 7.1 inch LCD Shield, please refer to the following links, respectively:
- Audio Camera Shield
https://developer.mbed.org/teams/Renesas/wiki/Audio_Camera-shield - 7.1 inch LCD Shield
https://developer.mbed.org/teams/Renesas/wiki/LCD-shield
In this section, it is described that how board is configured and to control audio playback via command line and touch screen.
2.1 Operating Environment
Figure 2.1 shows the overview of the operating environment for this sample code.
Figure 2.2 and 2.3 show how to configure GR-PEACH, Audio Camera Shield and 7.1 inch LCD shield when using USB0 and USB1, respectively.
Table 2.1 lists the overview of Graphical User Interface (GUI) of this sample code.
2.2 List of User Operations
Table 2.2 shows the relationship among Audio Playback, Command Line and Onboard Switch.
3. Function Outline
Table 3.1, 3.2 and 3.3 shows the overview of functions implemented in this sample code.
3.1 Playback Control
This sample program supports the operation "play", "pause", "stop", "play next song" and "play previous song".
3.2 Trick Play Control
In order to enable/disable Repeat Mode, user need to type "repeat" on command line or click the corresponding icon shown in Table 2.2. By derault, Repeat Mode is enabled. When Repeat Mode is enabled, the first song is played back after the playback of the last song is finished. Otherwise, the playback is shopped when finishing to play back the last song.
3.3 How to see Song Information
The information of the song being played back can be seen by typing playinfo on command line. Table 3.4 lists the items user can see on the terminal.
3.4 How to analyze the folder structure in USB stick
In this sample code, the folder structure in USB stick is analyzed in the breadth-first order. Table 3.5 shows how the files in USB stick are numbered.
4.Others
4.1 Serial Communication Setting
With respect to the default serial communication related setting on mbed, please refer to the follwing link:
https://developer.mbed.org/teams/Renesas/wiki/GR-PEACH-Getting-Started#install-the-usb-serial-communication
Please set up the terminal software you would like to use on your PC in consideration of the above. For example, 9600 should be specified for the baud rate on the terminal in order to control this sample via command line.
4.2 Necessary modification when using GCC ARM Embedded
If you would like to use GCC ARM Embedded, you must revise the following linker script incorporated in mbed OS 5 package as follows:
- Linker Script to be modified
$(PROJECT_ROOT)/mbed-os/targets/TARGET_RENESAS/TARGET_RZ_A1H/device/TOOLCHAIN_GCC_ARM/RZA1H.ld
Please note that $(PROJECT_ROOT) in the above denotes the root directory of this sample code
- Before Modification
RZA1H.ld
/* Linker script for mbed RZ_A1H */
/* Linker script to configure memory regions. */
MEMORY
{
ROM (rx) : ORIGIN = 0x00000000, LENGTH = 0x02000000
BOOT_LOADER (rx) : ORIGIN = 0x18000000, LENGTH = 0x00004000
SFLASH (rx) : ORIGIN = 0x18004000, LENGTH = 0x07FFC000
L_TTB (rw) : ORIGIN = 0x20000000, LENGTH = 0x00004000
RAM (rwx) : ORIGIN = 0x20020000, LENGTH = 0x00700000
RAM_NC (rwx) : ORIGIN = 0x20900000, LENGTH = 0x00100000
}
(snip)
- After Modification
RZA1H.ld
/* Linker script for mbed RZ_A1H */
/* Linker script to configure memory regions. */
MEMORY
{
ROM (rx) : ORIGIN = 0x00000000, LENGTH = 0x02000000
BOOT_LOADER (rx) : ORIGIN = 0x18000000, LENGTH = 0x00004000
SFLASH (rx) : ORIGIN = 0x18004000, LENGTH = 0x07FFC000
L_TTB (rw) : ORIGIN = 0x20000000, LENGTH = 0x00004000
RAM (rwx) : ORIGIN = 0x20020000, LENGTH = 0x00180000
RAM_NC (rwx) : ORIGIN = 0x20200000, LENGTH = 0x00680000
}
(snip)
flac/src/libFLAC/include/private/lpc.h@0:ee40da884cfc, 2015-10-16 (annotated)
- Committer:
- dkato
- Date:
- Fri Oct 16 04:28:07 2015 +0000
- Revision:
- 0:ee40da884cfc
first commit
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| dkato | 0:ee40da884cfc | 1 | /* libFLAC - Free Lossless Audio Codec library |
| dkato | 0:ee40da884cfc | 2 | * Copyright (C) 2000-2009 Josh Coalson |
| dkato | 0:ee40da884cfc | 3 | * Copyright (C) 2011-2014 Xiph.Org Foundation |
| dkato | 0:ee40da884cfc | 4 | * |
| dkato | 0:ee40da884cfc | 5 | * Redistribution and use in source and binary forms, with or without |
| dkato | 0:ee40da884cfc | 6 | * modification, are permitted provided that the following conditions |
| dkato | 0:ee40da884cfc | 7 | * are met: |
| dkato | 0:ee40da884cfc | 8 | * |
| dkato | 0:ee40da884cfc | 9 | * - Redistributions of source code must retain the above copyright |
| dkato | 0:ee40da884cfc | 10 | * notice, this list of conditions and the following disclaimer. |
| dkato | 0:ee40da884cfc | 11 | * |
| dkato | 0:ee40da884cfc | 12 | * - Redistributions in binary form must reproduce the above copyright |
| dkato | 0:ee40da884cfc | 13 | * notice, this list of conditions and the following disclaimer in the |
| dkato | 0:ee40da884cfc | 14 | * documentation and/or other materials provided with the distribution. |
| dkato | 0:ee40da884cfc | 15 | * |
| dkato | 0:ee40da884cfc | 16 | * - Neither the name of the Xiph.org Foundation nor the names of its |
| dkato | 0:ee40da884cfc | 17 | * contributors may be used to endorse or promote products derived from |
| dkato | 0:ee40da884cfc | 18 | * this software without specific prior written permission. |
| dkato | 0:ee40da884cfc | 19 | * |
| dkato | 0:ee40da884cfc | 20 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| dkato | 0:ee40da884cfc | 21 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| dkato | 0:ee40da884cfc | 22 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| dkato | 0:ee40da884cfc | 23 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR |
| dkato | 0:ee40da884cfc | 24 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| dkato | 0:ee40da884cfc | 25 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| dkato | 0:ee40da884cfc | 26 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| dkato | 0:ee40da884cfc | 27 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
| dkato | 0:ee40da884cfc | 28 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
| dkato | 0:ee40da884cfc | 29 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| dkato | 0:ee40da884cfc | 30 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| dkato | 0:ee40da884cfc | 31 | */ |
| dkato | 0:ee40da884cfc | 32 | |
| dkato | 0:ee40da884cfc | 33 | #ifndef FLAC__PRIVATE__LPC_H |
| dkato | 0:ee40da884cfc | 34 | #define FLAC__PRIVATE__LPC_H |
| dkato | 0:ee40da884cfc | 35 | |
| dkato | 0:ee40da884cfc | 36 | #ifdef HAVE_CONFIG_H |
| dkato | 0:ee40da884cfc | 37 | #include <config.h> |
| dkato | 0:ee40da884cfc | 38 | #endif |
| dkato | 0:ee40da884cfc | 39 | |
| dkato | 0:ee40da884cfc | 40 | #include "private/cpu.h" |
| dkato | 0:ee40da884cfc | 41 | #include "private/float.h" |
| dkato | 0:ee40da884cfc | 42 | #include "FLAC/format.h" |
| dkato | 0:ee40da884cfc | 43 | |
| dkato | 0:ee40da884cfc | 44 | #ifndef FLAC__INTEGER_ONLY_LIBRARY |
| dkato | 0:ee40da884cfc | 45 | |
| dkato | 0:ee40da884cfc | 46 | /* |
| dkato | 0:ee40da884cfc | 47 | * FLAC__lpc_window_data() |
| dkato | 0:ee40da884cfc | 48 | * -------------------------------------------------------------------- |
| dkato | 0:ee40da884cfc | 49 | * Applies the given window to the data. |
| dkato | 0:ee40da884cfc | 50 | * OPT: asm implementation |
| dkato | 0:ee40da884cfc | 51 | * |
| dkato | 0:ee40da884cfc | 52 | * IN in[0,data_len-1] |
| dkato | 0:ee40da884cfc | 53 | * IN window[0,data_len-1] |
| dkato | 0:ee40da884cfc | 54 | * OUT out[0,lag-1] |
| dkato | 0:ee40da884cfc | 55 | * IN data_len |
| dkato | 0:ee40da884cfc | 56 | */ |
| dkato | 0:ee40da884cfc | 57 | void FLAC__lpc_window_data(const FLAC__int32 in[], const FLAC__real window[], FLAC__real out[], unsigned data_len); |
| dkato | 0:ee40da884cfc | 58 | |
| dkato | 0:ee40da884cfc | 59 | /* |
| dkato | 0:ee40da884cfc | 60 | * FLAC__lpc_compute_autocorrelation() |
| dkato | 0:ee40da884cfc | 61 | * -------------------------------------------------------------------- |
| dkato | 0:ee40da884cfc | 62 | * Compute the autocorrelation for lags between 0 and lag-1. |
| dkato | 0:ee40da884cfc | 63 | * Assumes data[] outside of [0,data_len-1] == 0. |
| dkato | 0:ee40da884cfc | 64 | * Asserts that lag > 0. |
| dkato | 0:ee40da884cfc | 65 | * |
| dkato | 0:ee40da884cfc | 66 | * IN data[0,data_len-1] |
| dkato | 0:ee40da884cfc | 67 | * IN data_len |
| dkato | 0:ee40da884cfc | 68 | * IN 0 < lag <= data_len |
| dkato | 0:ee40da884cfc | 69 | * OUT autoc[0,lag-1] |
| dkato | 0:ee40da884cfc | 70 | */ |
| dkato | 0:ee40da884cfc | 71 | void FLAC__lpc_compute_autocorrelation(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]); |
| dkato | 0:ee40da884cfc | 72 | #ifndef FLAC__NO_ASM |
| dkato | 0:ee40da884cfc | 73 | # ifdef FLAC__CPU_IA32 |
| dkato | 0:ee40da884cfc | 74 | # ifdef FLAC__HAS_NASM |
| dkato | 0:ee40da884cfc | 75 | void FLAC__lpc_compute_autocorrelation_asm_ia32(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]); |
| dkato | 0:ee40da884cfc | 76 | void FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_4(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]); |
| dkato | 0:ee40da884cfc | 77 | void FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_8(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]); |
| dkato | 0:ee40da884cfc | 78 | void FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_12(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]); |
| dkato | 0:ee40da884cfc | 79 | void FLAC__lpc_compute_autocorrelation_asm_ia32_sse_lag_16(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]); |
| dkato | 0:ee40da884cfc | 80 | # endif |
| dkato | 0:ee40da884cfc | 81 | # endif |
| dkato | 0:ee40da884cfc | 82 | # if (defined FLAC__CPU_IA32 || defined FLAC__CPU_X86_64) && defined FLAC__HAS_X86INTRIN |
| dkato | 0:ee40da884cfc | 83 | # ifdef FLAC__SSE_SUPPORTED |
| dkato | 0:ee40da884cfc | 84 | void FLAC__lpc_compute_autocorrelation_intrin_sse_lag_4(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]); |
| dkato | 0:ee40da884cfc | 85 | void FLAC__lpc_compute_autocorrelation_intrin_sse_lag_8(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]); |
| dkato | 0:ee40da884cfc | 86 | void FLAC__lpc_compute_autocorrelation_intrin_sse_lag_12(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]); |
| dkato | 0:ee40da884cfc | 87 | void FLAC__lpc_compute_autocorrelation_intrin_sse_lag_16(const FLAC__real data[], unsigned data_len, unsigned lag, FLAC__real autoc[]); |
| dkato | 0:ee40da884cfc | 88 | # endif |
| dkato | 0:ee40da884cfc | 89 | # endif |
| dkato | 0:ee40da884cfc | 90 | #endif |
| dkato | 0:ee40da884cfc | 91 | |
| dkato | 0:ee40da884cfc | 92 | /* |
| dkato | 0:ee40da884cfc | 93 | * FLAC__lpc_compute_lp_coefficients() |
| dkato | 0:ee40da884cfc | 94 | * -------------------------------------------------------------------- |
| dkato | 0:ee40da884cfc | 95 | * Computes LP coefficients for orders 1..max_order. |
| dkato | 0:ee40da884cfc | 96 | * Do not call if autoc[0] == 0.0. This means the signal is zero |
| dkato | 0:ee40da884cfc | 97 | * and there is no point in calculating a predictor. |
| dkato | 0:ee40da884cfc | 98 | * |
| dkato | 0:ee40da884cfc | 99 | * IN autoc[0,max_order] autocorrelation values |
| dkato | 0:ee40da884cfc | 100 | * IN 0 < max_order <= FLAC__MAX_LPC_ORDER max LP order to compute |
| dkato | 0:ee40da884cfc | 101 | * OUT lp_coeff[0,max_order-1][0,max_order-1] LP coefficients for each order |
| dkato | 0:ee40da884cfc | 102 | * *** IMPORTANT: |
| dkato | 0:ee40da884cfc | 103 | * *** lp_coeff[0,max_order-1][max_order,FLAC__MAX_LPC_ORDER-1] are untouched |
| dkato | 0:ee40da884cfc | 104 | * OUT error[0,max_order-1] error for each order (more |
| dkato | 0:ee40da884cfc | 105 | * specifically, the variance of |
| dkato | 0:ee40da884cfc | 106 | * the error signal times # of |
| dkato | 0:ee40da884cfc | 107 | * samples in the signal) |
| dkato | 0:ee40da884cfc | 108 | * |
| dkato | 0:ee40da884cfc | 109 | * Example: if max_order is 9, the LP coefficients for order 9 will be |
| dkato | 0:ee40da884cfc | 110 | * in lp_coeff[8][0,8], the LP coefficients for order 8 will be |
| dkato | 0:ee40da884cfc | 111 | * in lp_coeff[7][0,7], etc. |
| dkato | 0:ee40da884cfc | 112 | */ |
| dkato | 0:ee40da884cfc | 113 | void FLAC__lpc_compute_lp_coefficients(const FLAC__real autoc[], unsigned *max_order, FLAC__real lp_coeff[][FLAC__MAX_LPC_ORDER], FLAC__double error[]); |
| dkato | 0:ee40da884cfc | 114 | |
| dkato | 0:ee40da884cfc | 115 | /* |
| dkato | 0:ee40da884cfc | 116 | * FLAC__lpc_quantize_coefficients() |
| dkato | 0:ee40da884cfc | 117 | * -------------------------------------------------------------------- |
| dkato | 0:ee40da884cfc | 118 | * Quantizes the LP coefficients. NOTE: precision + bits_per_sample |
| dkato | 0:ee40da884cfc | 119 | * must be less than 32 (sizeof(FLAC__int32)*8). |
| dkato | 0:ee40da884cfc | 120 | * |
| dkato | 0:ee40da884cfc | 121 | * IN lp_coeff[0,order-1] LP coefficients |
| dkato | 0:ee40da884cfc | 122 | * IN order LP order |
| dkato | 0:ee40da884cfc | 123 | * IN FLAC__MIN_QLP_COEFF_PRECISION < precision |
| dkato | 0:ee40da884cfc | 124 | * desired precision (in bits, including sign |
| dkato | 0:ee40da884cfc | 125 | * bit) of largest coefficient |
| dkato | 0:ee40da884cfc | 126 | * OUT qlp_coeff[0,order-1] quantized coefficients |
| dkato | 0:ee40da884cfc | 127 | * OUT shift # of bits to shift right to get approximated |
| dkato | 0:ee40da884cfc | 128 | * LP coefficients. NOTE: could be negative. |
| dkato | 0:ee40da884cfc | 129 | * RETURN 0 => quantization OK |
| dkato | 0:ee40da884cfc | 130 | * 1 => coefficients require too much shifting for *shift to |
| dkato | 0:ee40da884cfc | 131 | * fit in the LPC subframe header. 'shift' is unset. |
| dkato | 0:ee40da884cfc | 132 | * 2 => coefficients are all zero, which is bad. 'shift' is |
| dkato | 0:ee40da884cfc | 133 | * unset. |
| dkato | 0:ee40da884cfc | 134 | */ |
| dkato | 0:ee40da884cfc | 135 | int FLAC__lpc_quantize_coefficients(const FLAC__real lp_coeff[], unsigned order, unsigned precision, FLAC__int32 qlp_coeff[], int *shift); |
| dkato | 0:ee40da884cfc | 136 | |
| dkato | 0:ee40da884cfc | 137 | /* |
| dkato | 0:ee40da884cfc | 138 | * FLAC__lpc_compute_residual_from_qlp_coefficients() |
| dkato | 0:ee40da884cfc | 139 | * -------------------------------------------------------------------- |
| dkato | 0:ee40da884cfc | 140 | * Compute the residual signal obtained from sutracting the predicted |
| dkato | 0:ee40da884cfc | 141 | * signal from the original. |
| dkato | 0:ee40da884cfc | 142 | * |
| dkato | 0:ee40da884cfc | 143 | * IN data[-order,data_len-1] original signal (NOTE THE INDICES!) |
| dkato | 0:ee40da884cfc | 144 | * IN data_len length of original signal |
| dkato | 0:ee40da884cfc | 145 | * IN qlp_coeff[0,order-1] quantized LP coefficients |
| dkato | 0:ee40da884cfc | 146 | * IN order > 0 LP order |
| dkato | 0:ee40da884cfc | 147 | * IN lp_quantization quantization of LP coefficients in bits |
| dkato | 0:ee40da884cfc | 148 | * OUT residual[0,data_len-1] residual signal |
| dkato | 0:ee40da884cfc | 149 | */ |
| dkato | 0:ee40da884cfc | 150 | void FLAC__lpc_compute_residual_from_qlp_coefficients(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); |
| dkato | 0:ee40da884cfc | 151 | void FLAC__lpc_compute_residual_from_qlp_coefficients_wide(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); |
| dkato | 0:ee40da884cfc | 152 | #ifndef FLAC__NO_ASM |
| dkato | 0:ee40da884cfc | 153 | # ifdef FLAC__CPU_IA32 |
| dkato | 0:ee40da884cfc | 154 | # ifdef FLAC__HAS_NASM |
| dkato | 0:ee40da884cfc | 155 | void FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); |
| dkato | 0:ee40da884cfc | 156 | void FLAC__lpc_compute_residual_from_qlp_coefficients_asm_ia32_mmx(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); |
| dkato | 0:ee40da884cfc | 157 | void FLAC__lpc_compute_residual_from_qlp_coefficients_wide_asm_ia32(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); |
| dkato | 0:ee40da884cfc | 158 | # endif |
| dkato | 0:ee40da884cfc | 159 | # endif |
| dkato | 0:ee40da884cfc | 160 | # if (defined FLAC__CPU_IA32 || defined FLAC__CPU_X86_64) && defined FLAC__HAS_X86INTRIN |
| dkato | 0:ee40da884cfc | 161 | # ifdef FLAC__SSE2_SUPPORTED |
| dkato | 0:ee40da884cfc | 162 | void FLAC__lpc_compute_residual_from_qlp_coefficients_16_intrin_sse2(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); |
| dkato | 0:ee40da884cfc | 163 | void FLAC__lpc_compute_residual_from_qlp_coefficients_intrin_sse2(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); |
| dkato | 0:ee40da884cfc | 164 | # endif |
| dkato | 0:ee40da884cfc | 165 | # ifdef FLAC__SSE4_1_SUPPORTED |
| dkato | 0:ee40da884cfc | 166 | void FLAC__lpc_compute_residual_from_qlp_coefficients_intrin_sse41(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); |
| dkato | 0:ee40da884cfc | 167 | void FLAC__lpc_compute_residual_from_qlp_coefficients_wide_intrin_sse41(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); |
| dkato | 0:ee40da884cfc | 168 | # endif |
| dkato | 0:ee40da884cfc | 169 | # ifdef FLAC__AVX2_SUPPORTED |
| dkato | 0:ee40da884cfc | 170 | void FLAC__lpc_compute_residual_from_qlp_coefficients_16_intrin_avx2(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); |
| dkato | 0:ee40da884cfc | 171 | void FLAC__lpc_compute_residual_from_qlp_coefficients_intrin_avx2(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); |
| dkato | 0:ee40da884cfc | 172 | void FLAC__lpc_compute_residual_from_qlp_coefficients_wide_intrin_avx2(const FLAC__int32 *data, unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 residual[]); |
| dkato | 0:ee40da884cfc | 173 | # endif |
| dkato | 0:ee40da884cfc | 174 | # endif |
| dkato | 0:ee40da884cfc | 175 | #endif |
| dkato | 0:ee40da884cfc | 176 | |
| dkato | 0:ee40da884cfc | 177 | #endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */ |
| dkato | 0:ee40da884cfc | 178 | |
| dkato | 0:ee40da884cfc | 179 | /* |
| dkato | 0:ee40da884cfc | 180 | * FLAC__lpc_restore_signal() |
| dkato | 0:ee40da884cfc | 181 | * -------------------------------------------------------------------- |
| dkato | 0:ee40da884cfc | 182 | * Restore the original signal by summing the residual and the |
| dkato | 0:ee40da884cfc | 183 | * predictor. |
| dkato | 0:ee40da884cfc | 184 | * |
| dkato | 0:ee40da884cfc | 185 | * IN residual[0,data_len-1] residual signal |
| dkato | 0:ee40da884cfc | 186 | * IN data_len length of original signal |
| dkato | 0:ee40da884cfc | 187 | * IN qlp_coeff[0,order-1] quantized LP coefficients |
| dkato | 0:ee40da884cfc | 188 | * IN order > 0 LP order |
| dkato | 0:ee40da884cfc | 189 | * IN lp_quantization quantization of LP coefficients in bits |
| dkato | 0:ee40da884cfc | 190 | * *** IMPORTANT: the caller must pass in the historical samples: |
| dkato | 0:ee40da884cfc | 191 | * IN data[-order,-1] previously-reconstructed historical samples |
| dkato | 0:ee40da884cfc | 192 | * OUT data[0,data_len-1] original signal |
| dkato | 0:ee40da884cfc | 193 | */ |
| dkato | 0:ee40da884cfc | 194 | void FLAC__lpc_restore_signal(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]); |
| dkato | 0:ee40da884cfc | 195 | void FLAC__lpc_restore_signal_wide(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]); |
| dkato | 0:ee40da884cfc | 196 | #ifndef FLAC__NO_ASM |
| dkato | 0:ee40da884cfc | 197 | # ifdef FLAC__CPU_IA32 |
| dkato | 0:ee40da884cfc | 198 | # ifdef FLAC__HAS_NASM |
| dkato | 0:ee40da884cfc | 199 | void FLAC__lpc_restore_signal_asm_ia32(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]); |
| dkato | 0:ee40da884cfc | 200 | void FLAC__lpc_restore_signal_asm_ia32_mmx(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]); |
| dkato | 0:ee40da884cfc | 201 | void FLAC__lpc_restore_signal_wide_asm_ia32(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]); |
| dkato | 0:ee40da884cfc | 202 | # endif /* FLAC__HAS_NASM */ |
| dkato | 0:ee40da884cfc | 203 | # endif /* FLAC__CPU_IA32 */ |
| dkato | 0:ee40da884cfc | 204 | # if (defined FLAC__CPU_IA32 || defined FLAC__CPU_X86_64) && defined FLAC__HAS_X86INTRIN |
| dkato | 0:ee40da884cfc | 205 | # ifdef FLAC__SSE2_SUPPORTED |
| dkato | 0:ee40da884cfc | 206 | void FLAC__lpc_restore_signal_16_intrin_sse2(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]); |
| dkato | 0:ee40da884cfc | 207 | # endif |
| dkato | 0:ee40da884cfc | 208 | # ifdef FLAC__SSE4_1_SUPPORTED |
| dkato | 0:ee40da884cfc | 209 | void FLAC__lpc_restore_signal_wide_intrin_sse41(const FLAC__int32 residual[], unsigned data_len, const FLAC__int32 qlp_coeff[], unsigned order, int lp_quantization, FLAC__int32 data[]); |
| dkato | 0:ee40da884cfc | 210 | # endif |
| dkato | 0:ee40da884cfc | 211 | # endif |
| dkato | 0:ee40da884cfc | 212 | #endif /* FLAC__NO_ASM */ |
| dkato | 0:ee40da884cfc | 213 | |
| dkato | 0:ee40da884cfc | 214 | #ifndef FLAC__INTEGER_ONLY_LIBRARY |
| dkato | 0:ee40da884cfc | 215 | |
| dkato | 0:ee40da884cfc | 216 | /* |
| dkato | 0:ee40da884cfc | 217 | * FLAC__lpc_compute_expected_bits_per_residual_sample() |
| dkato | 0:ee40da884cfc | 218 | * -------------------------------------------------------------------- |
| dkato | 0:ee40da884cfc | 219 | * Compute the expected number of bits per residual signal sample |
| dkato | 0:ee40da884cfc | 220 | * based on the LP error (which is related to the residual variance). |
| dkato | 0:ee40da884cfc | 221 | * |
| dkato | 0:ee40da884cfc | 222 | * IN lpc_error >= 0.0 error returned from calculating LP coefficients |
| dkato | 0:ee40da884cfc | 223 | * IN total_samples > 0 # of samples in residual signal |
| dkato | 0:ee40da884cfc | 224 | * RETURN expected bits per sample |
| dkato | 0:ee40da884cfc | 225 | */ |
| dkato | 0:ee40da884cfc | 226 | FLAC__double FLAC__lpc_compute_expected_bits_per_residual_sample(FLAC__double lpc_error, unsigned total_samples); |
| dkato | 0:ee40da884cfc | 227 | FLAC__double FLAC__lpc_compute_expected_bits_per_residual_sample_with_error_scale(FLAC__double lpc_error, FLAC__double error_scale); |
| dkato | 0:ee40da884cfc | 228 | |
| dkato | 0:ee40da884cfc | 229 | /* |
| dkato | 0:ee40da884cfc | 230 | * FLAC__lpc_compute_best_order() |
| dkato | 0:ee40da884cfc | 231 | * -------------------------------------------------------------------- |
| dkato | 0:ee40da884cfc | 232 | * Compute the best order from the array of signal errors returned |
| dkato | 0:ee40da884cfc | 233 | * during coefficient computation. |
| dkato | 0:ee40da884cfc | 234 | * |
| dkato | 0:ee40da884cfc | 235 | * IN lpc_error[0,max_order-1] >= 0.0 error returned from calculating LP coefficients |
| dkato | 0:ee40da884cfc | 236 | * IN max_order > 0 max LP order |
| dkato | 0:ee40da884cfc | 237 | * IN total_samples > 0 # of samples in residual signal |
| dkato | 0:ee40da884cfc | 238 | * IN overhead_bits_per_order # of bits overhead for each increased LP order |
| dkato | 0:ee40da884cfc | 239 | * (includes warmup sample size and quantized LP coefficient) |
| dkato | 0:ee40da884cfc | 240 | * RETURN [1,max_order] best order |
| dkato | 0:ee40da884cfc | 241 | */ |
| dkato | 0:ee40da884cfc | 242 | unsigned FLAC__lpc_compute_best_order(const FLAC__double lpc_error[], unsigned max_order, unsigned total_samples, unsigned overhead_bits_per_order); |
| dkato | 0:ee40da884cfc | 243 | |
| dkato | 0:ee40da884cfc | 244 | #endif /* !defined FLAC__INTEGER_ONLY_LIBRARY */ |
| dkato | 0:ee40da884cfc | 245 | |
| dkato | 0:ee40da884cfc | 246 | #endif |
