-
Notifications
You must be signed in to change notification settings - Fork 1
Cadence Xtensa Audio Framework - Hosted
License
foss-xtensa/hosted-xaf
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
Repository files navigation
# # Copyright (c) 2015-2023 Cadence Design Systems, Inc. # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ====================================================================== Xtensa Audio Framework (XAF) - Hosted solution ====================================================================== ====================================================================== Revision History ====================================================================== Version Hosted 1.0 API 3.3 : November 17, 2023 + GA Release + Built and tested with RI.9 tools + [TENA-3231] FreeRTOS: updated commit ID which fixes tick-timer update issue (2ca806e59d8eb2490726f2ce1460f256ab593cf3). + [TENA-4141] Testbench: Runtime disconnect-without-delete commands are now processed on a separate thread. + [TENA-4150] Mixer class change to fix a corner case by reordering input over and set input bytes API calls with related plugin changes. + [TENA-4151] memset xf_g_dsp structure pointer to avoid fsanitize warning. + [TENA-4152] Restrict Hosted IPC kernel driver to communicate with only one application. + [TENA-4154] Testbench: Increased get_status_cid array size to fix array overflow error. + [TENA-4156] Added NULL check in xaf_adev_set_priorities API call for adev pointer. + [TENA-4158] Plugin: Compile fix in opus-decoder for shared memory macro MEM_START_DATA + NOTES: 1. Hosted XAF tests require a XTSC subsystem to compile and run, so they would not compile and run OOB. Refer to Programmer's guide for steps to: - Build the subsystem, - Build and run Hosted XAF tests with the built subsystem. 2. Only tested for subsystems with 1 Host + up to 8 HiFi DSPs. 3. Any reference to 'hostless' in the package source files can be ignored as the package is for hosted-XAF solution. 4. Limited testing is done with 64-bit version of Host OS. + KNOWN LIMITATIONS: 1. Package is available in TGZ format only. 2. The following features are not supported on 64-bit version of Host Linux OS: - Zero copy mode of xaf_comp_get_config_ext API - Zero copy mode of xaf_comp_set_config_ext API 3. Multiple memory pool feature is only supported for XAF_MEM_ID_COMP to XAF_MEM_ID_COMP_FAST type of memory amongst enum XAF_MEM_ID. 4. MCPS, Memory numbers printed correspond to DSP which does not include Host side info. 5. IPC shared-memory between host IPC-kernel and main DSP is uncached. ---------------------------------------------------------------------- Version 0.9_Beta API 3.3 : August 18, 2023 + Hosted XAF + Beta Release + Built and tested with RI.9 tools. + [TENA-3231] FreeRTOS timer interrupt issue is resolved and github commit id is updated. This fix enables execution of capturer/renderer based testbenches. + [TENA-3887] Changes in class-audio-codec and class-mixer to support execution with partial input data. + [TENA-3970] FLUSH/INVALIDATE macro cleanup and consolidation done in XAF library. + [TENA-4112] Free-up temporary output buffer if xaf_comp_delete is called before component was initialized (class-audio-codec). + Enabled hosted execution with one host and multiple DSP cores. + Enabled two-way handshake between host IPC and DSP-IPC for initial sync. + Ensured re-initialization of queues and indexes in Linux kernel driver. + Added a mem_pool_type check in xf-mem.h for robustness. + Enabled xaf_set_config_ext and xaf_get_config_ext API support with zero-copy and non-zero copy mode in 32-bit version of Host OS. + Made improvements in DSP-DSP synchronization mechanism by adding a non-pattern store change before reset-sync procedure which uses handshake with a fixed pattern. + Fix for a corner case DSP local memset which was affected by Host-DSP interrupt, as interrupt-handler used a local memory resource which was being memset, causing a freertos test to hang, hence avoided the meset of this COMP_ID pool, to be done at the component appropriately. + Changes to enable memory usage and MCPS prints after execution for NCORES>1. + Reduced the memory delay values from 100 to 1 in XTSC simulation command in cosim_launcher2.py file. + Added xaf-config-user.h for user configurable parameters such as specifying the shared memory address. Made necessary changes in hifi-dpf and xf_kernel_driver to use shared memory address from xaf-config-user.h. + Fixed a pointer issue in xaf_get_mem_stats API in xaf-api.c causing a segfault in 64-bit version of Host OS. + Testbench changes: 1. Changes to support multi-core build. 2. Runtime command line parsing changes for NCORES>1 in the testbenches that support command line parsing. 3. Updated initialization logic for AAC testbench to fix a corner case. 4. Corrected version prints during execution. + Plugin changes: 1. Necessary changes in mixer to support execution with partial input data. + NOTES: 1. Hosted XAF tests require a XTSC subsystem to compile and run, so they would not compile and run OOB. Refer to Programmer's guide for steps to: - Build the subsystem, - Build and run Hosted XAF tests with the built subsystem. 2. Only tested for subsystems with 1 Host + up to 6 HiFi DSPs. 3. Any reference to 'hostless' in the package source files can be ignored as the package is for hosted-XAF solution. 4. Limited testing is done with 64-bit version of Host OS. 5. Not tested with L32EX core config variants. + KNOWN LIMITATIONS: 1. Package is available in TGZ format only. 2. The following features are not supported on 64-bit version of Host Linux OS: - Zero copy mode of xaf_comp_get_config_ext API - Zero copy mode of xaf_comp_set_config_ext API 3. Multiple memory pool feature is only supported for XAF_MEM_ID_COMP to XAF_MEM_ID_COMP_FAST type of memory amongst enum XAF_MEM_ID. 4. MCPS, Memory numbers printed correspond to DSP which does not include Host side info. 5. IPC shared-memory between host IPC-kernel and main DSP is uncached. ---------------------------------------------------------------------- Version 0.5_Alpha API 3.2 : April 14, 2023 + Hosted XAF + Alpha Release + Built and tested with RI.9 tools + Programmers Guide not updated + The DSP Interface Layer is physically separated from the App Interface Layer. The IPC abstractions consists of Linux kernel-IPC at the host-AP that communicates with the HiFi DSP-IPC using interrupts and shared-memory. + algo 1. Added xf-fio.c in host-apf/src and support files in host-apf/include/sys/fio for application-to-kernel-IPC interface. 2. Modified xaf_get_mem_stats API to provide execution cycle info, for MCPS calculation with the stream-duration info available at the application. + build 1. Separated DSP binary build with required plugin support to compile with Xtensa-Tools, plugin objects are linked to DSP binary. 2. Host-AP application binary compiles with gcc/gnu tools and the plugin libraries are absent here. + test 1. Added xaf-dsp-test.c for DSP binary to run under XTSC. + IPC 1. Added xf_kernel_driver directory with source (xf-proxy.c) and support files on the host-AP. 2. XTSC environment is used to execute DSP, LUA script interacting via shared-memory and interrupt with linux-kernel-IPC layer + DOC: HiFi-AF-Hosted-UserGuide.pdf contains steps and notes to use the TGZ package. + NOTES: 1. Hosted XAF tests require a XTSC subsystem to compile and run, so they would not compile and run OOB. Refer to the user guide for steps to: - Build the subsystem, - Build and run Hosted XAF tests with the built subsystem. 2. Only tested for a subsystem with 1 Host + 1 HiFi DSP 3. Any reference to 'hostless' in the package source files can be ignored as the package is for hosted-XAF solution. 4. Multicore XAF v3.5 GA release is the reference codebase. Hosted XAF differs in IPC interfaces and application build segregation. + KNOWN LIMITATIONS: 1. Tested with XOS and Cache disabled. 2. DSP execution with FreeRTOS may not work as expected or hang for applications that have Capturer and Renderer class of components due to timer interrupts not getting generated by FreeRTOS library. Limited testing is done with FreeRTOS. 3. Inconsistent cycle count is observed with XOS of RI-2022.9 Xtensa Tool chain which may lead to negative MCPS being logged. 4. Package is available in TGZ format only. 5. The following features are not supported: - xaf_comp_get_config_ext API - xaf_comp_set_config_ext API - multiple memory-pools ---------------------------------------------------------------------- Version 3.5 API 3.2 : December 20, 2022 + GA Release + Built and tested with RI.9 tools + [TENA-3271] Added compiler option '-ffunction-sections', linker option '-Wl,-gc-sections' in library and testbench makefiles. + [TENA-3457]: Added short description comments for relevant macros/defines used in testbench and plugins. + [TENA-3622] Robustness fixes, added attribute align changes to packed structures with xf_msg_id_dtype, increased alignment for an internal memory allocation ('Memory used by Framework' in test application) for xaf_comp_t structure type. + [TENA-3681] The following miscellaneous updates are done: 1. Adjusted index of component memory in xaf_get_mem_stats to be common to both NCORES=1 and NCORES>1 builds. 2. Added default init value for framework_local_buffer_size. 3. Removed unused macro XAF_SHMEM_STRUCT_SIZE from xaf-api.h. 4. Removed unused variable dsp_frmwk_buf_size_peak from xaf_perf_stats_s structure. 5. Renamed dsp_xaf_buf_size_peak to dsp_framework_local_buf_size_peak in struct xaf_perf_stats_s. 6. Added COMP_FAST and DEV_FAST memory pool for input and output of mixer component. + [TENA-3689] Replaced strstr with strncmpr for component-type matching. + [TENA-3690] Updated macro handling of force close on fatal error in the testbench to wait for the completed, aborted threads to join before returning from main thread gracefully. + [TENA-3694] Corrected testbench argument parsing logic to return error if unsupported commands are provided in command-line. + [TENA-3702] Fixed a bug to allocate sufficient memory for DSP side internal structure by using sizeof() instead of a fixed size. Also added range checks for ID_DEV and ID_COMP memory pools and the number of pools limited to a maximum of 8 each. Note: This is not limitation of XAF library and is added to prevent errors at test-application. + [TENA-3704] Fixed warnings observed with the compiler flags '-Wimplicit-int-conversion', '-Wunused-macros', '-Wsign-compare' and "-Wshadow" in XAF library. + [TENA-3712] Removed redundant exit code prints in thread join messages from all testbenches. + [TENA-3713] Resolved subsystem import error due to tools version mismatch in XWS package. + [FREERTOS] Updated to latest commit id on github that includes a bug fix (0909de2bd46fbb9d9f7297e09c17186275dc446c). + Compile out option for the component classes (undefined by default): XA_DISABLE_CLASS_AUDIO_CODEC, XA_DISABLE_CLASS_CAPTURER, XA_DISABLE_CLASS_MIXER, XA_DISABLE_CLASS_MIMO_PROC, XA_DISABLE_CLASS_RENDERER. + Testbench: 1. Increased a memory size (AUDIO_COMP_FAST_BUF_SIZE) to support more testcases. 2. Added framework memory usage print for XAF_MEM_ID_DEV_FAST pool. + NOTES: 1. The release package can build and execute the single-core XAF-hostless tests OOB. 2. Multicore XAF tests require a multicore-subsystem to compile and run, so they would not compile and run OOB. Refer Programmer's Guide for steps to: - Build multicore-subsystem, - Build and run multicore XAF tests with built subsystem. 3. Tested for a subsystem with a maximum of 8 Cores. + KNOWN LIMITATIONS: 1. XTSC supports simulation of up to a maximum of 16 cores. 2. With FreeRTOS, the renderer component, if created on a worker-DSP, may not execute leading to pipeline hang, due to timer-interrupts not generated by FreeRTOS library. 3. Inconsistent cycle count is observed on XOS with RI-2022.9 Xtensa tool chain which can lead to logging negative MCPS. ---------------------------------------------------------------------- Version 3.4_Alpha API 3.2 : September 16, 2022 + Alpha release + Built and tested with RI.6 tools + Programmers Guide not updated + Scratch memory alignment changed from 8 to 16 bytes. + [J3278] Added support for non-component(ID_DEV) memory allocation from different memory-pools. Default mem_pool_types for edge component input/output buffers XAF_MEM_POOL_TYPE_COMP_APP_INPUT, XAF_MEM_POOL_TYPE_COMP_APP_OUTPUT is XAF_MEM_ID_DEV; others are of of type XAF_MEM_ID_COMP. Notes: In the enum list of XAF_MEM_ID: XAF_MEM_ID_DEV, XAF_MEM_ID_DEV_MAX, XAF_MEM_ID_COMP, XAF_MEM_ID_COMP_MAX and XAF_MEM_ID_MAX are necessary. Additional pools can be inserted between the above values (ex: XAF_MEM_ID_DEV_FAST between XAF_MEM_ID_DEV and XAF_MEM_ID_DEV_MAX with XAF_MEM_ID_DEV_MAX being the largest of ID_DEV type, similarly for ID_COMP) Probe buffer pool type is same as that of output buffer to application (XAF_MEM_POOL_TYPE_COMP_APP_OUTPUT). + Testbench: Modified xaf-playback-usecase-test.c to show example usage of XAF_MEM_ID_DEV_FAST memory pool set using mem_pool_type variable in xaf_comp_config_t structure. Removed the example of setting it with xaf_comp_set_config(). + API: 1. Following are added in xaf-api.h: -enum XAF_COMP_MEM_TYPE for component buffers and application input/output buffers -enum XAF_MEM_ID: XAF_MEM_ID_DEV_FAST, XAF_MEM_ID_DEV_MAX 2. Following are removed from xaf-api.h: -xaf_adev_config_t: pshmem_frmwk This pointer is same as paudio_framework_buffer after removal of mem_malloc/mem_free references from library. -xaf_comp_config_param: XAF_COMP_CONFIG_PARAM_MEM_POOL_TYPE not required since mem_pool_type is passed via xaf_comp_config_t -enum XAF_MEM_POOL_MASK_COMP not required since mem_pool_type is passed via xaf_comp_config_t 3. Following are changed in xaf-api.h: + xaf_adev_config_t: audio_framework_buffer_size as an array of length XAF_MEM_ID_MAX. paudio_framework_buffer as an array of length XAF_MEM_ID_MAX. + xf_shared: Increased the size of global shared memory buffer, passed as paudio_framework_buffer pointers to the library from application. + NOTES: 1. The release package can build and execute the single-core XAF-hostless tests OOB. 2. Multicore XAF tests require a multicore-subsystem to compile and run, so they would not compile and run OOB. Refer Programmer's Guide for steps to: - Build multicore-subsystem, - Build and run multicore XAF tests with built subsystem. 3. Tested for a subsystem with a maximum of 8 Cores. + KNOWN LIMITATIONS: 1. XTSC supports simulation of up to a maximum of 16 cores. 2. With FreeRTOS, the renderer component, if created on a worker-DSP, may not execute leading to pipeline hang, due to timer-interrupts not generated by FreeRTOS library. ---------------------------------------------------------------------- Version 3.3_Alpha API 3.1 : August 31, 2022 + Alpha release + Built and tested with RI.6 tools + Programmers Guide not updated + [J3278] Added support for component memory allocation from different memory-pools. A component's input, output, persistent and scratch memory can be set to be allocated from required memory-pool (with xaf_comp_set_config, parameter id XAF_COMP_CONFIG_PARAM_MEM_POOL_TYPE and values from XAF_MEM_ID shifted with appropriately according to XAF_MEM_POOL_MASK_COMP). + Modified xaf-playback-usecase-test.c to show example usage of XAF_MEM_ID_COMP_FAST memory pool set with xaf_comp_set_config(). + Following enums are added to xaf-api.h: XAF_MEM_POOL_MASK_COMP + Following enums are updated in xaf-api.h: 1. XAF_MEM_ID added additional memory type: XAF_MEM_ID_COMP_FAST added max mem-pool markers XAF_MEM_ID_DEV_MAX, XAF_MEM_ID_COMP_MAX 2. xaf_comp_config_param added XAF_COMP_CONFIG_PARAM_MEM_POOL_TYPE + Following structures are updated in xaf-api.h: 1. xaf_adev_config_t: Converted the following parameters to array audio_component_buffer_size: component memory size 2. xaf_adev_config_t: Added the following parameters paudio_component_buffer[XAF_MEM_ID_MAX]; (component mem pointer) framework_local_buffer_size; (App i/f layer internal-use mem size) pframework_local_buffer; (App i/f layer internal-use mem pointer) proxy_thread_stack_size; dsp_thread_stack_size; worker_thread_stack_size[XAF_MAX_WORKER_THREADS]; 3. xaf_adev_config_t: Removed the following parameters xaf_mem_malloc_fxn_t *pmem_malloc; xaf_mem_free_fxn_t *pmem_free; 4. xaf_perf_stats_s: Converted the following parameters to array dsp_comp_buf_size_peak[XAF_MEM_ID_MAX]: peak component mem usage + Following definition is added in xaf-api.h: XF_CFG_MAX_COMPS: Maximum number of components in the subsystem (default 16). NOTE: Part of "Local Memory used by Framework" or meminfo[2] can vary depending on this parameter by ~1408 bytes (XOS) or ~896 bytes (FreeRTOS). For 1 component, the minimum size of frmwk_local_buffer_size is 24576 bytes (XOS), 4096 bytes(FreeRTOS). + Following types are removed from xaf-api.h xaf_mem_malloc_fxn_t; xaf_mem_free_fxn_t; + Removed mem_malloc, mem_free function calls from library. Test application to provide appropriate size and pointer of each memory type available in XAF_MEM_ID enum of xaf-api.h + Following file is moved: algo/hifi-dpf/src/xf-msgq1.c -> algo/host-apf/src/xf-msgq1.c + Fixed "Local Memory used by Framework" or meminfo[2] where two internal structures were added twice. + Added the following from v2.10p1 release 1. Added support for configurable stack size for DSP worker-threads. NOTE: DSP worker-thread stack size should be more than the minimum size required by the OS + maximum size required among all the components on the thread (Default stack size for thread is 8KB). 2. Fixed buffer leakage issue of mimo-component with 0-output ports. 3. Fixed important Coverity warnings. 4. [J3497] Initialized error field of flush message to 0. Similarly, added message error field reset for event between components and component connect buffers. 5. Added changes to allow connect without initialization of source component, hence support for decoder to be connected to the next component without feeding input to the decoder. 6. Fixed renderer callback issue. In renderer-class, output ready state is cleared only if the component has produced output. 7. Plugin fixes: Added changes to support restarting PCM-Split(mimo-12) component. 8. FreeRTOS version upgrade from v10.2.1-xaf to 10.4.4-stable commit-ID: 1d9ea9fe58eadcdee62f1f068857052740eb8a34 (https://github.com/foss-xtensa/amazon-freertos) + NOTES: 1. The release package can build and execute the single-core XAF-hostless tests OOB. 2. Multicore XAF tests require a multicore-subsystem to compile and run, so they would not compile and run OOB. Refer Programmer's Guide for steps to: - Build multicore-subsystem, - Build and run multicore XAF tests with built subsystem. 3. Tested for a subsystem with a maximum of 8 Cores. + KNOWN LIMITATIONS: 1. XTSC supports simulation of up to a maximum of 16 cores. 2. With FreeRTOS, the renderer component, if created on a worker-DSP, may not execute leading to pipeline hang, due to timer-interrupts not generated by FreeRTOS library. ---------------------------------------------------------------------- Version 3.2 API 3.0 : May 16, 2022 + GA Release + Built with RI.6 tools + Compiled with xt-clang compiler + [J3184, J3284, J3273] Added time-out for IPC reset sync to avoid subsystem hang on synchronization failure if adev_open/dsp_open fail on any core. + [J3196] Robustness fix to save temporary output buffer size ( XAF_DECODER components), to be used during buffer free. + [J3202] Return fatal-error if XAF_COMP_CONFIG_PARAM_PRIORITY set-config is attempted without creating worker threads (API xaf_adev_set_priorities is not called). + [J3247] Added range checks for number of cores configured in the subsystem. In xaf-pcm-gain-test.c, fix to pass XF_CORE_ID as 0 for NCORES=1. + [J3279] Pointer alignment fix for objects of structure xf_dsp_t, xf_shmem_data_t (runtime errors of -fsanitize=undefined build). + [J3294] Return error if probe is enabled on an input port configured to work in input-bypass mode. + Plugin changes: [J3235] Renderer: Allow plugin to consume partial input if input is over. [J3241] PCM-split: Reset input-over state for input ports if the component is re-started. - Opus-decoder: Update the sample rate and num channels values from the decoded stream info for correctness of get-config values. + xf_shared changes [J3226, J3258, J3261] Increased size of shared-memory XF_SHMEM_SIZE to support testing for more cores. + Testbench changes: [J3332, J3227, J3228, J3256, J3203] Corrected MCPS calculation in all testbenches, removed 'Gross Total MCPS' print. Total MCPS value includes DSP MCPS and XAF MCPS of all the DSPs. [J3203, J3236] Full Duplex Opus: added command option for raw- stream input to decoder; Fix to check init status after declaring input-over; Support for NUM_COMPS_IN_GRAPH=1 (encoder or decoder). [J3257] Capturer-pcm-gain testbench: default value of sample-end if "-samples:" is not provided as command line argument is set to 0. - Removed debug print or multiple stream param prints. - Fix return values on error to -1 in all testbenches. - Added notes in help text updates in few testbenches. + Miscellaneous changes: [J3237] Made vecselect=1 in .xtsys, Staticvector=1 in .yml to avoid subsystem build warnings [J3251] updated readme_tflm.txt for clarity [J3272] Updated makefiles to support NCORES=1 build from shell env. [J3252] url prefix changed to https:// in getFreeRTOS.sh, getTFLM.sh + NOTES: 1. The release package can build and execute the single-core XAF-hostless tests OOB. 2. Multicore XAF tests require a multicore-subsystem to compile and run, so they would not compile and run OOB. Refer Programmer's Guide for steps to: - Build multicore-subsystem, - Build and run multicore XAF tests with built subsystem. 3. Tested for a subsystem with a maximum of 8 Cores. + KNOWN LIMITATIONS: 1. XTSC supports simulation of upto a maximum of 16 cores. 2. With FreeRTOS, the renderer component, if created on a worker-DSP, may not execute leading to pipeline hang, due to timer-interrupts not generated by FreeRTOS library. ---------------------------------------------------------------------- Version 3.1_Beta API 3.0 : February 28, 2022 + Beta release + Built and tested with RI.6 tools and xt-clang compiler + Programmers Guide in draft format [J3117] Fixed a buffer leakage issue on MIMO components with 0-output ports. + Changes to have a common code-base which supports both XAF-hostless and Multicore XAF solutions. + Extended multicore support upto 256 cores(8 bits of message-ID) + Following structures are updated: 1. xaf_adev_config_t: Added following parameters cb_compute_cycles: call-back function to collect execution cycles of worker DSPs. cb_stats: shared object pointer passed to the call-back function above. + Following shared structure is added in xaf-api.h: xaf_perf_stats_s: consists of shared memory and execution cycle variables for each worker DSP. + Following defines are renamed in xaf-api.h INT_NUMBER to XA_EXTERNAL_INTERRUPT_NUMBER + Robustness Fixes: Core: 1. Corrected core to core die message reply to be enqueued to appropriate message pool. Also decrement "dst" variable only if the opcode is XF_STOP. 2. Added DSP-worker thread cycle measurement hooks to collect the stats before the threads are deleted. 3. Take out IPC_FLUSH of payload from xf_ipc_send2() and place it outside the IPC layer, just before calling xf_ipc_send2(). 4. Added invalidation after flush in msg_submit where the start- buffer is dispatched to other cores from master-core. Rbtree: 1. Added proper cache invalidations, removed redundant ones. IPC: 1. Interrupt is disabled on xf_ipc_close(). 2. Added support for level triggered interrupt. 3. Added support for global mutex locks using L32EX/S32EX instructions when XCHAL_HAVE_EXCLUSIVE is set which is mutually exclusive to the other type of instruction S32C1I. 4. Changed the lock in the global shared ipc-structure from object to pointer type and it is initialized with the lock object during xf_ipc_open(). 5. Converted the XF_EXTERNAL_INTERRUPT_NUMBER for further use in the library to XA_PROC_INTERRUPT_NUMBER. Base-class: 1. While dynamically changing the priority of a component, sending all messages meant for that component from its current priority queue to newer priority queue. 2. Instead of accessing event buffer content to check for error code, now error code is made available as part of the message's error field for error event channels. Audio-codec class: 1. Moved response of start buffer below deletion of temporary output buffer required for initialization. Proxy-MSGQ: 1. Added fix for 2nd synchronous command issued(set-config) before the 1st one (unroute) completes as unroute may wait until next component responds on the output buffer. API: 1. Added core=XF_CORE_ID_MASTER in xaf_comp_config_default_init 2. Updated "xf_close()" and "xf_pool_free()" to return error and updated return values of the caller of these functions. 3. Setting comp_state to XAF_COMP_RESET, after comp_delete attempt in xaf_adev_close with XAF_ADEV_FORCE_CLOSE flag. 4. Added changes in xaf_adev_config structure for passing separate shared memory pointers for framework buffers and dsp shared buffers. 5. Changed XF_CFG_CODEC_SCRATCHMEM_SIZE to worker_thread_scratch_size[0] for validating audio_comp_buf_size. Plugins: 1. src-pp: Added the required RUNTIME_INIT for run-time scratch- pointer change to take effect in the src-pp library. 2. renderer: Added check if component state is RUNNING, before calling xf_timer_stop() during component delete(cleanup). + NOTES: 1. The release packages can build and execute the single-core XAF-hostless tests OOB. 2. Multicore XAF tests require a multicore-subsystem to compile and run, so they would not compile and run OOB. Refer document doc/How-To-Guide-for-Multicore-XAF-Package.pdf for steps to: build multicore-subsystem, build and run multicore XAF tests with built subsystem. + KNOWN LIMITATIONS: 1. XTSC supports simulation of upto a maximum of 16 cores. ---------------------------------------------------------------------- Version 2.10 API 2.1 : November 24, 2021 + GA Release + Built with RI.6 tools + Compiled with xt-clang compiler + [J3058] In AEC23 plugin, added changes to return non-fatal error if both input ports have 0 length input data. Also non-fatal error is returned during execution if the output buffer is NULL. + [J3066] Added checks to prevent the input buffer fill level from going negative in xf_input_port_consume function if input-port bypass is enabled and a corresponding CRITICAL trace print. This could happen if the component plugin incorrectly reports consumed bytes to be greater than the input bytes. + [J3070] Corrected components' default priority calculation logic to ensure that the default priority remains the highest priority among the DSP worker threads. + [J3077] Modified TIMEBASE_FREQ value to support 1 to 16 channels; 1,2,3 or 4 bytes per PCM-sample and commonly used sample rates between 4000 to 192000 Hz. Also made changes in prepare_runtime function of all the classes to support 8 bits per PCM-sample. + Compiler warning fixes: Fixed two "comparison of integers of different signs" warnings observed with -Wextra build option in xf-proxy.c. + Testbench changes: Corrected the argument type of comp_cycles passed to compute_comp_mcps function from 'int' to 'long long'. ---------------------------------------------------------------------- Version 2.9_Beta API 2.1 : September 24, 2021 + Built with RI.6 tools + Compiled with xt-clang compiler + Programmers Guide not updated + [J2564] Reverted workaround code change to address XOS thread abort issue, since the the fix is available in newer tools version (RI.6 and above). + [J2928] Extended set/get config APIs are also enabled for MIMO, Mixer and Renderer classes. + [J2970] Added changes for graceful handling of fatal errors from message processing function xf_core_process_message(). + [J2982] Corrected a condition check in "xf_worker_queue_purge" function. + [J3023] Fix to avoid scheduling of components after a fatal error has occured. + [J3025] Fixed validation of frame_size to be multiple of codec->sample_size by using the input-buffer length (PCM) instead of the output buffer length for encoder components. + [J3028] Added checks to avoid NULL pointer access after component deletion in the local message submit logic(same thread components). + Optimization changes: Optimized memory usage by removing base_cancel_pool related code when preemption is active and decentralized scheduling is used. + Robustness fixes: 1. Replaced XF_CHK_ERR with condition check and to print appropriate trace message with WARNING tag instead of ERROR tag in the function xa_base_event_handler(). 2. Corrected return value if the component's scheduled processing occurs when it is in terminate state (all classes). 3. Corrected a trace print in xf_mm_alloc(). 4. Fixed component state check in xaf_comp_get_status() API to return the correct status to the application if the component delete was already initiated. + Plugin changes: 1. Renamed opus encoder plugin directory from "opus" to "opus_enc". 2. Corrected mimo plugins' input and output buffer NULL check error values. + Testbench changes: 1. The following new testbench is added: - xaf-full-duplex-opus-test.c (Opus Full Duplex Pipeline). 2. The following testbeches are no longer packed: - xaf-full-duplex-test.c - xaf-aac-dec-test.c - xaf-src-test.c - xaf-vorbis-dec-test.c - xaf-opus-enc-test.c - xaf-opus-dec-test.c 3. Added 2 more MCPS prints after testbench execution XAF MCPS and Total MCPS (DSP Component MCPS + Framework MCPS). 4. Fixed memory corruption in xa_app_receive_events_cb() due to write event array index exceeding maximum value. + Packaging changes: Added support for the following multiple testbench project in xws package which can be built and run out-of-the-box(15 test projects) - testxa_af_hostless - testxa_af_mimo_mix - testxa_af_gain_renderer - testxa_af_capturer_gain - testxa_af_renderer_ref_port - testxa_af_dec* - testxa_af_dec_mix* - testxa_af_amr_wb_dec* - testxa_af_mp3_dec_rend* - testxa_af_capturer_mp3_enc* - testxa_af_playback_usecase* - testxa_af_full_duplex_opus* - testxa_af_tflm_microspeech* - testxa_af_tflm_pd* - testxa_af_tflm_microspeech_pd* The test projects with(*) require dependent libraries, header files and Additional Liker path to be provided. + Notes: 1. xaf_comp_set_config_ext and xaf_comp_get_config_ext API usage is now demonstrated in the functions opus_dec_setup() and get_opus_dec_config() of the newly added Opus Full Duplex testbench (xaf-full-duplex-opus-test.c). 2. testxa_af_hostless project has common test_inp and test_out directory hosting input and output files of all the test projects in the package. Hence user must import this project into the workspace. 3. For testxa_af_full_duplex_opus, xa_opus_codec.a of only one of the opus_enc or opus_dec plugin needs to be provided for linking. ---------------------------------------------------------------------- Version 2.8_Alpha API 2.1 : August 11, 2021 + Built with RI.6 tools + Programmers Guide not updated + [J2893] xaf_format_t type used by the application is moved from xaf-api.h to xaf-utils-test.h. + [J2908] Fixed critical Coverity scan errors in xaf library, PCM-Gain plugin and FreeRTOS. + [J2914] Enabled support for decoder initialization without input. + [J2928] Added support for extended get-config and set-config to support more than 4 bytes of data per config parameter. + [J2942] Added support for input port bypass to avoid data copy at input ports from connect buffers to input buffer of components. + [J2943] Added per-worker-thread de-centralized scheduler and message queue for MCPS reduction. + [J2952] Corrected component ID of SRC component from "audio-fx/src-pp" to "post-proc/src-pp". + [J2957] Corrected output buffer length adjustment in mimo-class and mixer class fill-this-buffer functions. + [J2973] Reverted flexi-lock optimizations around sync-msg-queues to ensure sync-msg-queues always have locked access. + [J2977] Enabled propagation of non-fatal error codes for synchronous APIs through response message. + [J2979] Enabled CRITICAL trace prints with minimal increase in code size (~2%). + [J2982] Fixed a memory corruption issue by responding to pending worker queue messages during component deletion. + [J2985] Fixed potential buffer corruption due to concurrent auxiliary buffer access. + [J2999] Added changes to avoid relax-schedule check for output port readiness of MIMO components during initialization. + Added following new APIs: 1. xaf_comp_set_config_ext(pVOID comp_ptr, WORD32 num_param, WORD32 *p_param); Note: This API is not a replacement for existing API used for component setup(xaf_comp_set_config) and it should not be used until component setup is done. 2. xaf_comp_get_config_ext(pVOID comp_ptr, WORD32 num_param, WORD32 *p_param); + Plugin changes: 1. Consumed bytes variable to consider any partial bytes less than sample_size. This change is done in PCM-Gain, Mimo-mix, PCM-Split and Mixer component plugins. 2. Updated Mixer plugin to avoid memset on the input buffer if filled partially. + Robustness fixes: 1. Added component state check after xf_response_get() in xaf_comp_get_status() API call. This prevents any buffer access after the component gets deleted. 2. Corrected a condition check for xf_client_lookup() in dsp_worker_entry(). + Notes: 1. Input-port-bypass is activated if the plugin reports its input buffer size as zero when queried with XA_API_CMD_GET_MEM_INFO_SIZE. A usage is demonstarted in the plugin PCM-Gain(xa-pcm-gain.c) under the disabled compile time option XA_INPORT_BYPASS_TEST. 2. xaf_comp_set_config_ext and xaf_comp_get_config_ext API usage is demonstrated in the functions get_opus_dec_config() and opus_dec_setup() of Opus decoder testbench(xaf-opus-dec-test.c) and support a maximum of 8 configuation parameters per API call. 3. Usage of decoder component intialization without input data is shown in the AMR decoder testbench(xaf-amr-wb-dec-test.c). ---------------------------------------------------------------------- Version 3.0_Alpha API 3.0 : July 16, 2021 + Alpha release + Built and tested with RI.2 tools + Sanity tested with RI.6 tools + Programmers Guide not updated + Added multicore support in XAF so that DSP workload can be shared among DSPs (2, 3 or 4) by creating components on respective DSPs. + Following existing APIs are updated: 1. adev_set_priority: to pass the following additional argument core: corei-ID on which worker threads are to be created. 2. xaf_get_mem_stats: to pass the following additional argument core: core-ID whose memory usage is required + Following new APIs are added: 1. xaf_dsp_open(VOID **, xaf_adev_config_t *) creates the dsp-thread on the worker-core, returns the worker-core handle. 2. xaf_dsp_close(VOID *) closes the dsp-thread on worker core, frees memory. + Following structures are updated: 1. xaf_adev_config_t: Added following parameters core: Master-DSP core-ID pshmem: pointer to the shared memory used for inter-core IPC audio_shmem_buffer_size: size of the shared memory 2. xaf_comp_config_t: Added following parameter core: core-ID on which the component needs to be created + Following new defines are added in xaf-api.h: 1. XF_CFG_CORES_NUM: Number of cores in the system (2,3 or 4) 2. XF_CORE_ID_MASTER: core-ID of the master-DSP. 3. INT_NUMBER: IPC interrupt number (BInterrupt/ProcInterrupt in xtsc/*.yml file) + Following new files are added for inter-core shared memory: xf_shared/src/xf-shared.c xf_shared/include/xf-shared.h + Following new file is added for inter-core mutex and interrupts: include/sysdeps/mc_ipc/xf-mc-ipc.h + Following new files are added for inter-core IPC definition: (Note, these files are internal to XAF and listed here for info) algo/hifi-dpf/include/sys/xos-msgq/xf-ipc-if.h algo/hifi-dpf/src/xf-ipc-if.c + NOTES: 1. Multicore XAF tests require a multicore-subsystem to compile and run, so they would not compile and run OOB. 2. See doc/How-To-Guide-for-Multicore-XAF-tgz-Package.pdf for steps to build multicore-subsystem (2, 3 or 4 cores). 3. See doc/How-To-Guide-for-Multicore-XAF-tgz-Package.pdf for steps to build and run multicore XAF tests with built subsystem. + KNOWN LIMITATIONS: 1. Inter-core mutex definition uses Xtensa S32C1I (conditional store) instruction. The definition should be updated if this instruction is not available or better definition is available. 2. Memory and MCPS numbers: The numbers may not be accurate as the shared memory and worker-core stats are not updated. 3. FreeRTOS: Some test cases may hang when runtime commands, resume or disconnect are used in execution. 4. To ensure all worker cores are up before master core starts sending commands, application delays start of master core as a workaround. Proper sync mechanism will be added in next release. 5. Single-core support: The package is not tested for single core build and execution. 6. Package: Available in TGZ format, no XWS format is available. ---------------------------------------------------------------------- Version 2.7_Alpha API 2.0 : May 28, 2021 + Alpha Release + Built with RI.6 tools, xt-clang compiler + Programmers Guide not updated + Added support for TensorFlow Lite For Micro (TFLM) inference networks to be added as components in XAF. + Added following two XAF components to demonstrate TFLM support - Microspeech Yes-No Recognizer - Person Detect + Added following three XAF applications to demonstrate TFLM support - Microspeech Yes-No Recognizer Application - Person Detect Application - Simultaneous Microspeech and Person Detect Application + Note: TFLM code or libraries are not included in the package. Please refer to $libxa_af_hostless/build/readme_tflm.txt for details on how to download and build TFLM code, and TFLM XAF applications. + Note: The XAF TFLM support is built and tested with: https://github.com/tensorflow/tensorflow/commit/a1acddcf3f990332b5f0bd19faba1d6e256787f0 ---------------------------------------------------------------------- Version 2.6 API 2.0 : March 31, 2021 + GA Release + Built with RI.2 tools + [J2877] Fixed potential memory overwrite bug by returning UWORD32 instead of UWORD64 during get-config for capturer and renderer component plugins. + [J2806] Fixed the rollback logic to avoid memory corruption when event channel creation fails. + [J2804] Fixed the rollback logic during port routing to prevent propagation of already freed buffers. + [J2799] Reduced maximum number of event buffers per channel from 1024 to 16. + [J2746] Renderer plugin state changed to IDLE when execution is complete. ---------------------------------------------------------------------- Version 2.5_Beta API 2.0 : January 08, 2021 + Beta release + Built with RI.2 tools + Programmers Guide not updated + [J2714] Schedule-tree bug fixes for deleting a node which is not present on the schedule-tree and for adding a node which is already present on the schedule-tree + [J2662] Compulsory flush message propagation when triggered due to natural EOS in execution, even if the port is IDLE. + [J2624] In Opus encoder plugin, corrected bytes consumed calculation for multi-channel inputs. + [J2617] Corrected the calling order of functions in all the classes, xf_output_port_flush_done and xf_output_port_unroute_done to enable correct state update (uses XOR operation to toggle states). + [J2611] Corrected duplicate bit-masks for two of the component states in mimo-proc class (XA_OUT_TRACK_FLAG_FLUSHING_DONE and XA_MIMO_FLAG_PROBE_SETUP) + [J2601] Added -mcoproc compiler option to all source file compilation of library that are not associated with ISR. + [J2600] -Wextra warnings: Removed warnings other than 'unused variable' for library + [J2592] Added check for maximum alignment value in xf_mem_alloc() + Robustness Fixes: - Core: 1. Introduced component lookup after dequeue of message from worker queue, and reply with appropriate response if the lookup fails. When component lookup fails, prevent internally generated UNREGISTER message by responding with an internal response_failure message. 2. Components are assigned the highest-worker-thread priority when created until the set-config-parameter stage where the priority is reverted to that of either the background-thread or the configured priority(XAF_COMP_CONFIG_PARAM_PRIORITY) 3. Disabled code related to unused queue "cd->response". - IO: 1. Added state check XF_INPUT_FLAG_PURGING for xf_input_port_ready and XF_OUTPUT_FLAG_FLUSHING for xf_output_port_ready. 2. Disabled premature input-port state change from XF_INPUT_FLAG_EOS to XF_INPUT_FLAG_DONE in xf_input_port_put. - Base-class: 1. Updated base-cancel mechanism based on the schedule-tree fixes. When preemption is enabled, base_cancel attempts to remove the node from schedule-tree, failing which the node is enqueued into base_cancel queue, which is dropped from processing when a matching node is dequeued from the worker->queue. 2. Corrected the variable in scratch size assertion/check to that of the worker_thread_scratch_size in base_postinit. - Audio-codec class: 1. Flush: if there is a flush on input port, and the flush completes immediately, then update the base->state to COMPLETED if the output port is unrouted. 2. Probe_pause: probe_stop should complete flushing the probe port without checking if base->state is COMPLETED. 3. Fill_this_buffer: check xf_output_port_ready before scheduling as the port may be in unrouting or flushing state. - Mimo-proc class: 1. Terminate: Remove the assert of output port number check 2. Unroute: on unroute, update output port state to unrouted and indicate disconnect to plugin early. 3. Fill_this_buffer: check if the port is unrouting before changing the output port state to routed and indicate connect to plugin. 4. Cleanup: avoid setting the state unroute_done which is redundant at this point. 5. Route: check if the ports are ready before scheduling 6. unroute_done() to be called after the flag XA_OUT_TRACK_FLAG_FLUSHING_DONE is set, to make sure all flags are cleared after unroute completes. 7. Fix for handling EMPTY_THIS_BUFFER when in terminate: avoid calculating output index of a port for any buffer arriving on input port. 8. Output port flag XA_OUT_TRACK_FLAG_FLUSHING_DONE is cleared when output is produced. - All classes: 1. Removed assert check for COMPLETED state in fill_this_buffer(). 2. Delayed response to UNREGISTER command from application until the component completes flushing and freeing of memory. 3. Handling of lookup-failure messages to prevent self-destruction of the component. - API: 1. Fixed a range check error in xaf_adev_set_priorities(). - Plugins: 1. Capturer: Avoid assert on NULL output buffer(output buffer is optional and plugin needs to take appropriate action if NULL). + Event communication features: 1. Event communication to application using event channels 2. Fatal and non-fatal error reporting to application (as event) using event channel per component 3. Event communication from one component to another 4. Self-scheduling support for components from plugins + API changes: 1. xaf_adev_open(pVOID *pp_adev, WORD32 audio_frmwk_buf_size, WORD32 audio_comp_buf_size, xaf_mem_malloc_fxn_t mem_malloc, xaf_mem_free_fxn_t mem_free) -> xaf_adev_open(pVOID *pp_adev, xaf_adev_config_t *pconfig) The old API is retained as xaf_adev_open_deprecated() New xaf_adev_open() supports configurable scratch memory size (per worker thread), dsp-thread-priority and proxy-thread-priority, callback function pointer for events Older xaf_adev_open API is available as xaf_adev_open_deprecated 2. xaf_comp_create(pVOID adev_ptr, pVOID *pp_comp, xf_id_t comp_id, UWORD32 ninbuf, UWORD32 noutbuf, pVOID pp_inbuf[], xaf_comp_type comp_type) -> xaf_comp_create(pVOID p_adev, pVOID *pp_comp, xaf_comp_config_t *pconfig) The old API is retained as xaf_comp_create_deprecated() New xaf_comp_create() supports configurable enabling of fatal-error reporting(as an event) Older xaf_comp_create API is available as xaf_comp_create_deprecated 3. Added new APIs for event communication: xaf_create_event_channel xaf_delete_event_channel 4. Added new APIs to initialize default configuration parameters xaf_adev_config_default_init xaf_comp_config_default_init + App Interface Layer changes: 1. Added a thread-safe mechanism for component chain access 2. Optimized comp_state to only necessary states RESET and CREATE 3. Delayed the component state update in comp_create until component is created + DSP Interface Layer changes: 1. Added BUG asserts for possible hang-case detection in xf_mm_alloc/xf_mm_free, enabled with DEBUG=1 build option. + Plugin Changes: 1. Added XA_<component>_CONFIG_PARAM_FRAME_SIZE_IN_SAMPLES configuration parameter for consistency of frame_size setting in samples-per-channel. Components updated: PCM_GAIN, MIXER, OPUS_ENC, CAPTURER, RENDERER The older counterparts XA_<component>_CONFIG_PARAM_FRAME_SIZE, will be removed in future. 2. Updated plugins xa-pcm-gain.c, xa-mimo-mix.c to demonstrate event communication between components. + Testbench Changes 1. Testbench changes to demonstrate event communication between components: xaf-mimo-mix-test.c 2. Testbench changes to demonstrate error reporting to application: xaf-playback-usecase-test.c 3. Corrected help text in gain-renderer testbench. + MCPS reduction changes: 1. A buffer can be submitted by a component to the destination worker-queue by directly calling dispatch, thus avoiding enqueue and dequeue of DSP-thread queue. 2. base_cancel to check the presence of schedule-node in worker queue to avoid spurious scheduling. 3. Sync msgq access with disable/restore of interrupts instead of RTOS' mutex locks. 4. Added port readiness check for input port in mimo class fill_this_buffer() to avoid excess scheduling. 5. Added a generic lock wrapper as xf-flx-lock-if.h (flexi-lock) The locks are initialized as dummy by default. With pre-emption enabled, when worker threads are created, the scheduler, shmem and component-memory locks are reinitialized to RTOS-mutex-locks and xf_sync_enqueue/dequeue locks are reinitialized to interrupt disable/restore type of access. + Code size reduction changes: Following optional (not used by default) compile time switches are provided: 1. XA_DISABLE_EVENT: To disable event-communication related code 2. XA_DISABLE_DEPRECATED_API: To disable deprecated API code ---------------------------------------------------------------------- Version 2.3 API 1.3 : July 24, 2020 + GA release + Built with RI.2 tools + [J2593] Added support for following two config params in Opus encoder plugin: - XA_OPUS_ENC_CONFIG_PARAM_SIGNAL_TYPE - XA_OPUS_ENC_CONFIG_PARAM_RESET_STATE + [J2592] Fixed XAF internal memory allocator to use alignment parameter appropriately + [J2586, J2587] Fixed argument to xos_start_system_timer() API to select a timer with highest interrupt-priority <= EXCMLEVEL + [J2576, J2577] Fixed memory leaks by deleting the timer object in capturer and renderer plugins + [J2567] Updated audio-codec-class to reset base state when an output buffer is received after execution completion + Renamed pcm_mix component plugin to mimo_mix ---------------------------------------------------------------------- Version 2.2_Beta API 1.3 : May 21, 2020 + Beta release + Built with RI.2 tools + Programmers Guide not updated + [J2220] Hostless XAF is tested and supported on Fusion cores + [J2226, J2464] Unified Hostless XAF release packages across cores + [J2543] Fixed a bug by clearing output_setup flag on relaxed output ports during postprocess in MIMO class + [J2544] Added reset EOS stream flags in Opus Encoder, PCM Gain, SRC plugin files to enable re-run upon receiving new input + [J2545] PCM Gain plugin updated to support 8, 24, 32 bit PCM width and multichannel input data + [J2546] Fixed a bug in scratch allocation with pre-emptive scheduling - allocated independent scratch for each worker thread + [J2553] Fixed a bug in MIMO class postprocess to avoid re-schedule if execution is complete + [J2561] Updated XF_TIMEBASE_FREQ to support 48kHz, 16ch, 32bit PCM configuration + [J2563] Fixed a memory leak bug by freeing all mutex locks in xaf_adev_close API + [J2456] Updated runtime commands logic in testbench to allow other runtime commands to execute while disconnect API is in progress ---------------------------------------------------------------------- Version 2.1_Alpha API 1.3 : April 23, 2020 + Alpha release - HiFi4 only + Built with RI.2 tools + Changed some non-standard return codes from XAF Developer APIs to standards XAF Error codes + Updated xaf_comp_get_status API to return EXEC_DONE status for components returning output or probe data to application + [2453] Enhanced mem_malloc and mem_free wrappers to avoid maximum number of allocations allowed constraint + [2472] Minimum connect buffers between components requirement is reduced from 2 to 1. Note with this change, MIMO class preprocess allows execution if any of input port has non-zero data (earlier, it would check for non-zero data on all input ports) + [2473] Moved TRACE control tags to xf-debug.h for better configurability + [2475] Fixed bug in renderer disconnect API implementation + [2486] Increased auxiliary buffer size from 128 to 256 to allow 32 configuration parameters in xaf_comp_set_config and xaf_comp_get_config API (shared memory usage increases by 4kB) + [2491] Updated xaf_get_mem_stats API implementation to report peak and current memory usage. Note with this change, the API expects pointer to array of five integers as second argument (earlier it expected pointer to array of three integers) + [2498] Fixed bug of redundant stack allocation during thread creation with FreeRTOS + [2513] Reduced input buffer size requirement of Opus encoder plugin to hold only one frame + [2528] Removed fatal error from capturer class in case of output buffer non-availability, this should be handled by plugin + [2530] Updated copyright headers to MIT style for all files + Programmers Guide not updated ---------------------------------------------------------------------- Version 2.0 API 1.3 : January 31, 2020 + GA Release - HiFi3, HiFi4 and HiFi5 only + Built with RI.2 tools ---------------------------------------------------------------------- Version 1.8_3_Alpha API 1.3 : December 23, 2019 + Patch release - HiFi4 only + Built with RI.2 tools + Added MIMO (Multi-Input, Multi-Output) data processing class. + Added following new XAF Developer APIs: XAF_ERR_CODE xaf_pause(pVOID p_comp, WORD32 port); XAF_ERR_CODE xaf_resume(pVOID p_comp, WORD32 port); XAF_ERR_CODE xaf_probe_start(pVOID p_comp); XAF_ERR_CODE xaf_probe_stop(pVOID p_comp); XAF_ERR_CODE xaf_disconnect(pVOID p_src, WORD32 src_out_port, pVOID p_dest, WORD32 dest_in_port); + Updated prototype for xaf_connect API: XAF_ERR_CODE xaf_connect(pVOID p_src, WORD32 src_out_port, pVOID p_dest, WORD32 dest_in_port, WORD32 num_buf); + Added support for FreeRTOS. + Added support for preemptive scheduling for both XOS and FreeRTOS. + Following updates are done for Renderer Class: - Changed logic to schedule execution of renderer on each interrupt irrespective of input port readiness - Added XAF_START_FLAG command support for explicit initialization of renderer - Added support for additional, optional output port to generate reference or feedback output + Following updates are done for Audio Codec Class: - Updated Audio Codec Class to initialize all components except decoders (comp_type XAF_DECODER) without input data + Following updates are done for Renderer Plugin: - Added actual FIFO in the plugin to mimic hardware operation - Added state configuration parameter (XA_RENDERER_STATE_START) to start renderer hardware operation (e.g. enable interrupt) Note, even if this configuration parameter is not used from application, renderer hardware operation starts once FIFO is full - Added logic to zero-fill output if real data is not available At start, this logic would insert zero frames or prepend zeros to real data, if required At runtime, this logic would insert zero frames or append zeros to real data, if required - Added support for additional, optional output port to generate reference or feedback data - Moved renderer execution from set_input_bytes() to do_execute() function - Added logic to set exec-done from plugin when input is over + Following updates are done for Capturer Plugin: - Added state configuration parameter (XA_CAPTURER_STATE_START) to start capturer hardware operation (e.g. enable interrupt) Note, this configuration parameter must be issued from application for capturer hardware operation to start - Moved capturer execution from set_mem_ptr() to do_execute() function + Updated initialization API call sequence requirement as - initialization status must be queried by xaf_comp_get_status() API after xaf_comp_process(...XAF_START_FLAG) API call. + Corrected Capturer output port number to 0 from 1. + Added few robustness fixes as per internal QA testing. + Added new example testbenches and plugins to demonstrate usage of new features. + Programmers Guide not updated. + Notes - New feature implementation mentioned above has undergone limited testing and may get updated. - By default, this release uses XOS as RTOS. - To use FreeRTOS instead of XOS, please refer to instructions in 'libxa_af_hostless/build/readme-freertos-bld.txt'. - XOS is configured with 100 MHz clock frequency with 0.1 ms timer tick resolution whereas FreeRTOS is configured with 50 MHz clock frequency with 1 ms timer tick resolution. - Known constraint: MCPS computation and prints are not supported with FreeRTOS in this release. ---------------------------------------------------------------------- Version 1.4 API 1.1 : March 11, 2019 + GA release. ---------------------------------------------------------------------- Version 1.3p4_Alpha API 1.1 : August 30, 2018 + Patch release - HiFi3 and HiFi4 only + Built with RG.5 tools + [J2117] Fixed an issue in xaf_adev_close function (ensured internal proxy thread is closed properly). + [J2118] Sample Rate Convertor plugin wrapper is updated to work with Sample Rate Convertor v1.9 Library. + Updated Programmers Guide to indicate - XAF must not be used with fast functional 'TurboSim' mode of Instruction Set Simulator. - Sample Rate Convertor plugin wrapper is updated to work with Sample Rate Convertor v1.9 Library. ---------------------------------------------------------------------- Version 1.3p3_Alpha API 1.1 : March 12, 2018 + Patch release + Built with RG.5 tools + [J2004] Fixed an issue in compilation of ISR code (removed -mcoproc compile flag for ISR code). ---------------------------------------------------------------------- Version 1.3p2_Alpha API 1.1 : February 2, 2018 + Patch release - HiFi4 only + Built with RG.5 tools + Fixed issues in packaging of release packages. ---------------------------------------------------------------------- Version 1.3p1_Alpha API 1.1 : February 1, 2018 + Patch release - HiFi3, HiFi4 only + Built with RG.5 tools + [J1965] Avoided use of cache line size (core specific) while calculating size of cache line aligned DSP Thread Handle struct. ---------------------------------------------------------------------- Version 1.3_Alpha API 1.1 : December 14, 2017 + Initial (Alpha) customer release. ---------------------------------------------------------------------- Version 1.2 API 1.1 : November 21, 2016 + Known issues in Release 1.1 fixed. + Added support for renderer and capturer components. + Added AAC-Dec, Renderer, Capturer, SRC components along with corresponding test benches. + Testbenches updated for Realtek ALC5677 EVM. ---------------------------------------------------------------------- Version 1.1 API 1.1 : June 2, 2016 + Known issues in Release 1.0 fixed. + Added testbenches for mixer, audio encoder and speech decoder. + Improved robustness and minor changes in API. ---------------------------------------------------------------------- Version 1.0 API 1.0 : March 04, 2016 + Initial release. ---------------------------------------------------------------------- Version 0.7 API 1.0 : December 17, 2015 + Beta release. ---------------------------------------------------------------------- 2023-11-17:16:17:/servers/scratch50g/nddivya/XX/XtDevTools/XtensaRegistry/RI-2022.9:855261:837726:855164::
About
Cadence Xtensa Audio Framework - Hosted
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published