You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
326 lines
18 KiB
326 lines
18 KiB
/****************************************************************************** |
|
* * |
|
* Copyright (C) 2018 The Android Open Source Project |
|
* |
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
* you may not use this file except in compliance with the License. |
|
* You may obtain a copy of the License at: |
|
* |
|
* http://www.apache.org/licenses/LICENSE-2.0 |
|
* |
|
* Unless required by applicable law or agreed to in writing, software |
|
* distributed under the License is distributed on an "AS IS" BASIS, |
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
* See the License for the specific language governing permissions and |
|
* limitations under the License. |
|
* |
|
***************************************************************************** |
|
* Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore |
|
*/ |
|
#include <stdio.h> |
|
#include <ixheaacd_type_def.h> |
|
#include "ixheaacd_error_standards.h" |
|
#include "ixheaacd_error_handler.h" |
|
|
|
/*****************************************************************************/ |
|
/* Global memory constants */ |
|
/*****************************************************************************/ |
|
/*****************************************************************************/ |
|
/* Ittiam enhaacplus_dec ErrorCode Definitions */ |
|
/*****************************************************************************/ |
|
/*****************************************************************************/ |
|
/* Class 0: API Errors |
|
*/ |
|
/*****************************************************************************/ |
|
/* Non Fatal Errors */ |
|
pWORD8 ixheaacd_ppb_api_non_fatal[] = { |
|
(pWORD8) "No Error", (pWORD8) "API Command not supported", |
|
(pWORD8) "API Command type not supported"}; |
|
/* Fatal Errors */ |
|
pWORD8 ixheaacd_ppb_api_fatal[] = { |
|
(pWORD8) "Invalid Memory Table Index", |
|
(pWORD8) "Invalid Library ID String Index", |
|
(pWORD8) "NULL Pointer: Memory Allocation Error", |
|
(pWORD8) "Invalid Config Param", |
|
(pWORD8) "Invalid Execute type", |
|
(pWORD8) "Invalid Command", |
|
(pWORD8) "Memory Allocation Error: Alignment requirement not met"}; |
|
/*****************************************************************************/ |
|
/* Class 1: Configuration Errors |
|
*/ |
|
/*****************************************************************************/ |
|
/* Non Fatal Errors */ |
|
pWORD8 ixheaacd_ppb_config_non_fatal[] = { |
|
(pWORD8) "Invalid Output PCM WORD Size. Setting to default, 16 ", |
|
(pWORD8) "Invalid Down-mix flag option. Setting to default, 0 ", |
|
(pWORD8) "Invalid 8 khz output flag option. Setting to default, 0 ", |
|
(pWORD8) "Invalid 16 khz output flag option. Setting to default, 0 ", |
|
(pWORD8) "Invalid interleave to stereo flag option. Setting to default, 1 ", |
|
(pWORD8) "Invalid downsample flag option. Setting to default, 0 ", |
|
(pWORD8) "Invalid Frame OK option. Setting to default, 1 ", |
|
(pWORD8) "Invalid MP4 Flag option. Setting to default, 0 ", |
|
(pWORD8) "Invalid maximum number of channels. limiting to between 2 and 8", |
|
(pWORD8) "Invalid instance for coupling channel. Setting to default 1", |
|
(pWORD8) "Following feature is not supported in this build. ", |
|
(pWORD8) "Invalid Disable Sync Flag option. Setting to default, 0 ", |
|
(pWORD8) "Invalid Auto SBR upsample option. Setting to default, 1 ", |
|
(pWORD8) "Invalid LOAS flag", |
|
(pWORD8) "Invalid DRC flag", |
|
(pWORD8) "Invalid DRC cut value", |
|
(pWORD8) "Invalid DRC boost value", |
|
(pWORD8) "Invalid DRC target", |
|
(pWORD8) "Invalid Frame size", |
|
(pWORD8) "Invalid delay mode", |
|
(pWORD8) "Invalid decode type", |
|
(pWORD8) "Invalid peak limiter flag", |
|
(pWORD8) "Invalid control param index", |
|
(pWORD8) "Inalid gain delay", |
|
(pWORD8) "Invalid constant delay mode", |
|
(pWORD8) "Invalid effect type"}; |
|
/* Fatal Errors */ |
|
pWORD8 ixheaacd_ppb_config_fatal[] = { |
|
(pWORD8) "Invalid Sample rate specified for RAW decoding"}; |
|
/*****************************************************************************/ |
|
/* Class 2: Initialization Errors |
|
*/ |
|
/*****************************************************************************/ |
|
/* Non Fatal Errors */ |
|
pWORD8 ixheaacd_ppb_init_non_fatal[] = { |
|
(pWORD8)"Both 16 kHz and 8 kHz output config set. Giving 16 kHz output", |
|
(pWORD8)"Output sampling frequency is 8 kHz, 16 kHz output disabled ", |
|
(pWORD8)"Header not found at the beginning of input data continuing syncing" |
|
}; |
|
/* Fatal Errors */ |
|
pWORD8 ixheaacd_ppb_init_fatal[] = { |
|
(pWORD8) "AAC Decoder initialization failed", |
|
(pWORD8) "End of input reached during initialization", |
|
(pWORD8) "No. of channels in stream greater than max channels defined", |
|
(pWORD8) "AudioObjectType is not supported"}; |
|
/*****************************************************************************/ |
|
/* Class 3: Execution Errors |
|
*/ |
|
/*****************************************************************************/ |
|
/* Non Fatal Errors */ |
|
pWORD8 ixheaacd_ppb_exe_non_fatal[] = { |
|
(pWORD8)"ADTS syncronization is lost. Re-syncing", |
|
(pWORD8)"Though SBR was present in previous frame, not present in current frame (SBR turned off)", |
|
(pWORD8)"SBR was not present in previous frame, but it is present in current frame (SBR turned on)", |
|
(pWORD8)"ADTS Header CRC failed.Re-syncing", |
|
(pWORD8)"Input bytes insufficient for decoding", |
|
(pWORD8)"Element instance tag mismatch, because of new channel mode", |
|
(pWORD8)"max huffman decoded value exceeded", |
|
(pWORD8)"Error in AAC decoding", |
|
(pWORD8)"Scale factor exceeds the transmitted boundary", |
|
(pWORD8)"Gain control not supported", |
|
(pWORD8)"Filter Order of TNS data is greater than maximum order", |
|
(pWORD8)"LTP data found, not supported", |
|
(pWORD8)"The base sampling frequency has changed in ADTS header", |
|
(pWORD8)"Pulse Data exceeds the permitted boundary", |
|
(pWORD8)"Invalid code ixheaacd_book number in ia_huffman_data_type decoding", |
|
// (pWORD8)"The base sampling frequency has changed in ADTS header" |
|
}; |
|
/* Fatal Errors */ |
|
pWORD8 ixheaacd_ppb_exe_fatal[] = { |
|
(pWORD8) "Channel coupling not supported", |
|
(pWORD8) "TNS data range is errorneous", (pWORD8) "Invalid LOAS header", |
|
(pWORD8) "Invalid ER profile", (pWORD8) "Invalid DRC data"}; |
|
|
|
/*****************************************************************************/ |
|
/* error info structure */ |
|
/*****************************************************************************/ |
|
/* The Module's Error Info Structure */ |
|
ia_error_info_struct ixheaacd_error_info = { |
|
/* The Module Name */ |
|
(pWORD8) "Ittiam xheaac_dec", |
|
{/* The Class Names */ |
|
(pWORD8) "API", (pWORD8) "Configuration", (pWORD8) "Initialization", |
|
(pWORD8) "Execution", (pWORD8) "", (pWORD8) "", (pWORD8) "", (pWORD8) "", |
|
(pWORD8) "", (pWORD8) "", (pWORD8) "", (pWORD8) "", (pWORD8) "", |
|
(pWORD8) "", (pWORD8) "", (pWORD8) "xHeaac"}, |
|
{/* The Message Pointers */ |
|
{NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
|
NULL, NULL, NULL, NULL}, |
|
{NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
|
NULL, NULL, NULL, NULL}}}; |
|
|
|
/*****************************************************************************/ |
|
/* */ |
|
/* Function name : ixheaacd_error_handler_init */ |
|
/* */ |
|
/* Description : Initialize the error struct with string pointers */ |
|
/* */ |
|
/* Inputs : none */ |
|
/* */ |
|
/* Globals : ia_error_info_struct ixheaacd_error_info */ |
|
/* pWORD8 ixheaacd_ppb_api_non_fatal */ |
|
/* pWORD8 ixheaacd_ppb_api_fatal */ |
|
/* pWORD8 ixheaacd_ppb_config_non_fatal */ |
|
/* pWORD8 ixheaacd_ppb_config_fatal */ |
|
/* pWORD8 ixheaacd_ppb_init_non_fatal */ |
|
/* pWORD8 ixheaacd_ppb_init_fatal */ |
|
/* pWORD8 ixheaacd_ppb_exe_non_fatal */ |
|
/* pWORD8 ixheaacd_ppb_exe_fatal */ |
|
/* */ |
|
/* Processing : Init the struct with error string pointers */ |
|
/* */ |
|
/* Outputs : none */ |
|
/* */ |
|
/* Returns : none */ |
|
/* */ |
|
/* Issues : none */ |
|
/* */ |
|
/* Revision history : */ |
|
/* */ |
|
/* DD MM YYYY Author Changes */ |
|
/* 29 07 2005 Ittiam Created */ |
|
/* */ |
|
/*****************************************************************************/ |
|
|
|
VOID ixheaacd_error_handler_init() { |
|
/* The Message Pointers */ |
|
ixheaacd_error_info.ppppb_error_msg_pointers[0][0] = |
|
ixheaacd_ppb_api_non_fatal; |
|
ixheaacd_error_info.ppppb_error_msg_pointers[1][0] = ixheaacd_ppb_api_fatal; |
|
ixheaacd_error_info.ppppb_error_msg_pointers[0][1] = |
|
ixheaacd_ppb_config_non_fatal; |
|
ixheaacd_error_info.ppppb_error_msg_pointers[1][1] = |
|
ixheaacd_ppb_config_fatal; |
|
ixheaacd_error_info.ppppb_error_msg_pointers[0][2] = |
|
ixheaacd_ppb_init_non_fatal; |
|
ixheaacd_error_info.ppppb_error_msg_pointers[1][2] = ixheaacd_ppb_init_fatal; |
|
ixheaacd_error_info.ppppb_error_msg_pointers[0][3] = |
|
ixheaacd_ppb_exe_non_fatal; |
|
ixheaacd_error_info.ppppb_error_msg_pointers[1][3] = ixheaacd_ppb_exe_fatal; |
|
} |
|
|
|
/*****************************************************************************/ |
|
/* ia_testbench ErrorCode Definitions */ |
|
/*****************************************************************************/ |
|
/*****************************************************************************/ |
|
/* Class 0: Memory & File Manager Errors |
|
*/ |
|
/*****************************************************************************/ |
|
/* Non Fatal Errors */ |
|
/* Fatal Errors */ |
|
pWORD8 ixheaacd_ppb_ia_testbench_mem_file_man_fatal[] = { |
|
(pWORD8) "Memory Allocation Error", (pWORD8) "File Open Failed"}; |
|
|
|
/*****************************************************************************/ |
|
/* error info structure */ |
|
/*****************************************************************************/ |
|
/* The Module's Error Info Structure */ |
|
ia_error_info_struct ixheaacd_ia_testbench_error_info = { |
|
/* The Module Name */ |
|
(pWORD8) "ia_testbench", |
|
{/* The Class Names */ |
|
(pWORD8) "Memory & File Manager", (pWORD8) "", (pWORD8) "", (pWORD8) "", |
|
(pWORD8) "", (pWORD8) "", (pWORD8) "", (pWORD8) "", (pWORD8) "", |
|
(pWORD8) "", (pWORD8) "", (pWORD8) "", (pWORD8) "", (pWORD8) "", |
|
(pWORD8) "", (pWORD8) ""}, |
|
{/* The Message Pointers */ |
|
{NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
|
NULL, NULL, NULL, NULL}, |
|
{NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
|
NULL, NULL, NULL, NULL}}}; |
|
|
|
/*****************************************************************************/ |
|
/* */ |
|
/* Function name : ia_testbench_error_handler_init */ |
|
/* */ |
|
/* Description : Initialize the error struct with string pointers */ |
|
/* */ |
|
/* Inputs : none */ |
|
/* */ |
|
/* Globals : ia_error_info_struct ixheaacd_ia_testbench_error_info */ |
|
/* pWORD8 ixheaacd_ppb_ia_testbench_mem_file_man_fatal */ |
|
/* */ |
|
/* Processing : Init the struct with error string pointers */ |
|
/* */ |
|
/* Outputs : none */ |
|
/* */ |
|
/* Returns : none */ |
|
/* */ |
|
/* Issues : none */ |
|
/* */ |
|
/* Revision history : */ |
|
/* */ |
|
/* DD MM YYYY Author Changes */ |
|
/* 29 07 2005 Ittiam Created */ |
|
/* */ |
|
/*****************************************************************************/ |
|
|
|
VOID ia_testbench_error_handler_init() { |
|
/* The Message Pointers */ |
|
ixheaacd_ia_testbench_error_info.ppppb_error_msg_pointers[1][0] = |
|
ixheaacd_ppb_ia_testbench_mem_file_man_fatal; |
|
} |
|
|
|
/*****************************************************************************/ |
|
/* */ |
|
/* Function name : ixheaacd_error_handler */ |
|
/* */ |
|
/* Description : Called Prints the status error code from the err_info */ |
|
/* */ |
|
/* Inputs : ia_error_info_struct *p_mod_err_info (Error info struct) */ |
|
/* WORD8 *pb_context (Context of error) */ |
|
/* IA_ERRORCODE code (Error code) */ |
|
/* */ |
|
/* Globals : none */ |
|
/* */ |
|
/* Processing : whenever any module calls the errorhandler, it informs */ |
|
/* it about the module for which it is called and a context */ |
|
/* in which it was called in addition to the error_code */ |
|
/* the message is displayed based on the module's error */ |
|
/* message array that maps to the error_code the context */ |
|
/* gives specific info in which the error occured e.g. for */ |
|
/* testbench module, memory allocator can call the */ |
|
/* errorhandler for memory inavailability in various */ |
|
/* contexts like input_buf or output_buf e.g. for mp3_enc */ |
|
/* module, there can be various instances running. context */ |
|
/* can be used to identify the particular instance the */ |
|
/* error handler is being called for */ |
|
/* */ |
|
/* Outputs : None */ |
|
/* */ |
|
/* Returns : IA_ERRORCODE error_value (Error value) */ |
|
/* */ |
|
/* Issues : none */ |
|
/* */ |
|
/* Revision history : */ |
|
/* */ |
|
/* DD MM YYYY Author Changes */ |
|
/* 29 07 2005 Tejaswi/Vishal Created */ |
|
/* */ |
|
/*****************************************************************************/ |
|
|
|
IA_ERRORCODE ixheaacd_error_handler(ia_error_info_struct *p_mod_err_info, |
|
WORD8 *pb_context, IA_ERRORCODE code) { |
|
if (code == IA_NO_ERROR) { |
|
return IA_NO_ERROR; |
|
} |
|
{ |
|
WORD is_fatal = (((UWORD)code & 0x8000) >> 15); |
|
WORD err_class = (((UWORD)code & 0x7800) >> 11); |
|
WORD err_sub_code = (((UWORD)code & 0x07FF)); |
|
|
|
if (!is_fatal) { |
|
printf("non "); |
|
} |
|
printf("fatal error: "); |
|
|
|
if (p_mod_err_info->pb_module_name != NULL) { |
|
printf("%s: ", p_mod_err_info->pb_module_name); |
|
} |
|
if (p_mod_err_info->ppb_class_names[err_class] != NULL) { |
|
printf("%s: ", p_mod_err_info->ppb_class_names[err_class]); |
|
} |
|
if (pb_context != NULL) { |
|
printf("%s: ", pb_context); |
|
} |
|
if (err_sub_code != 2047) |
|
printf("%s\n", |
|
p_mod_err_info |
|
->ppppb_error_msg_pointers[is_fatal][err_class][err_sub_code]); |
|
} |
|
return IA_NO_ERROR; |
|
}
|
|
|