261 lines
7.6 KiB
C++
Executable file
261 lines
7.6 KiB
C++
Executable file
|
|
#include "Neural_THX_Interface.h"
|
|
|
|
|
|
NEURAL_THX_ENCODER::NEURAL_THX_ENCODER(void)
|
|
{
|
|
}
|
|
|
|
NEURAL_THX_ENCODER::~NEURAL_THX_ENCODER(void)
|
|
{
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Name : Init
|
|
//
|
|
// Params : Neural_THX_Encoder_Settings - settings structure defining
|
|
// global settings of encoder
|
|
//
|
|
// Return : int - Neural-THX error code
|
|
//
|
|
// Purpose : Used to set all channels in one easy to use function
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
int NEURAL_THX_ENCODER::Init( Neural_THX_Encoder_Settings &tSettings, Neural_THX_Encoder_Params &tParams )
|
|
{
|
|
// Get prepared to catch errors
|
|
int nErrorHandle = NRLTHX_OK;
|
|
|
|
// Make sure the settings they passed us are valid
|
|
|
|
// Check Configuration
|
|
if( tSettings.nChanConfig != NEURAL_THX_7_5_GAMING &&
|
|
tSettings.nChanConfig != NEURAL_THX_6_5_GAMING &&
|
|
tSettings.nChanConfig != NEURAL_THX_7_2_GAMING &&
|
|
tSettings.nChanConfig != NEURAL_THX_5_2_GAMING)
|
|
{
|
|
return UNSUPPORTED_CHANCONFIG;
|
|
}
|
|
// Check Samplerate
|
|
if( tSettings.nSampleRate != SAMPLERATE_32_0 &&
|
|
tSettings.nSampleRate != SAMPLERATE_44_1 &&
|
|
tSettings.nSampleRate != SAMPLERATE_48_0 )
|
|
{
|
|
return UNSUPPORTED_SAMPLERATE;
|
|
}
|
|
// Check Framesize
|
|
if( tSettings.nFramesize != NEURAL_FRAMESIZE)
|
|
{
|
|
return UNSUPPORTED_FRAMESIZE;
|
|
}
|
|
// Double check if we have a valid structure now
|
|
if(!tParams.ValidStruct())
|
|
{
|
|
return UNSUPPORTED_PARAMETER;
|
|
}
|
|
|
|
// Branch for Initialization of encoder that the user wants
|
|
switch(tSettings.nChanConfig)
|
|
{
|
|
case NEURAL_THX_7_5_GAMING:
|
|
{
|
|
// The 7 to 5 Encoder Init
|
|
nErrorHandle = Neural_THX_725_Encode_INIT( tSettings.nFramesize,
|
|
tSettings.nChanConfig,
|
|
tSettings.nSampleRate,
|
|
(Neural_THX_725_Encode_Struct *)(tParams.pParams));
|
|
}
|
|
break;
|
|
case NEURAL_THX_5_2_GAMING:
|
|
{
|
|
// The 5 To 2 Encoder Init
|
|
nErrorHandle = Neural_THX_522_Encode_INIT( tSettings.nFramesize,
|
|
tSettings.nChanConfig,
|
|
tSettings.nSampleRate,
|
|
(Neural_THX_522_Encode_Struct *)(tParams.pParams));
|
|
}
|
|
break;
|
|
case NEURAL_THX_6_5_GAMING: // !Supported Yet
|
|
{
|
|
// Temporary until it gets supported
|
|
return UNSUPPORTED_CHANCONFIG;
|
|
}
|
|
break;
|
|
case NEURAL_THX_7_2_GAMING: // !Supported Yet
|
|
{
|
|
nErrorHandle = Neural_THX_722_Encode_INIT( tSettings.nFramesize,
|
|
tSettings.nChanConfig,
|
|
tSettings.nSampleRate,
|
|
(Neural_THX_722_Encode_Struct *)(tParams.pParams));
|
|
}
|
|
break;
|
|
|
|
default:
|
|
{
|
|
return UNKNOWN_ERROR;// should never reach this ... should :)
|
|
}
|
|
break;
|
|
};
|
|
// Double check if there was an error :) hopefully not
|
|
NRLTHX_ERRORCHECK(nErrorHandle);
|
|
// return the success (if it reaches here things went well most likely)
|
|
return nErrorHandle;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Name : Encode
|
|
//
|
|
// Params : Neural_THX_Channel_Format - Channels in to down mix
|
|
// Neural_THX_Channel_Format - Channels out (results)
|
|
// Neural_THX_Encoder_Settings - settings structure defining
|
|
// global settings of encoder
|
|
//
|
|
// Return : int - Neural-THX error code
|
|
//
|
|
// Purpose : Used to pass the information to the right encoder
|
|
// packaged in the library
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
int NEURAL_THX_ENCODER::Encode( Neural_THX_Channel_Format &tChannelsIn,
|
|
Neural_THX_Channel_Format &tChannelsOut,
|
|
Neural_THX_Encoder_Settings &tSettings,
|
|
Neural_THX_Encoder_Params &tParams)
|
|
{
|
|
// Get prepared to catch errors
|
|
int nErrorHandle = NRLTHX_OK;
|
|
// Make sure the settings they passed us are valid
|
|
|
|
// Check Configuration
|
|
if( tSettings.nChanConfig != NEURAL_THX_7_5_GAMING &&
|
|
tSettings.nChanConfig != NEURAL_THX_6_5_GAMING &&
|
|
tSettings.nChanConfig != NEURAL_THX_7_2_GAMING &&
|
|
tSettings.nChanConfig != NEURAL_THX_5_2_GAMING)
|
|
{
|
|
return UNSUPPORTED_CHANCONFIG;
|
|
}
|
|
// Check Samplerate
|
|
if( tSettings.nSampleRate != SAMPLERATE_32_0 &&
|
|
tSettings.nSampleRate != SAMPLERATE_44_1 &&
|
|
tSettings.nSampleRate != SAMPLERATE_48_0 )
|
|
{
|
|
return UNSUPPORTED_SAMPLERATE;
|
|
}
|
|
// Check Framesize
|
|
if( tSettings.nFramesize != NEURAL_FRAMESIZE)
|
|
{
|
|
return UNSUPPORTED_FRAMESIZE;
|
|
}
|
|
// Check to see if we have a valid buffer
|
|
if(!tParams.ValidStruct())
|
|
{
|
|
return UNSUPPORTED_PARAMETER;
|
|
}
|
|
|
|
// Prepare the channels to be sent to the corresponding encoder
|
|
// NOTE: This section will be used if we support interleaved buffers
|
|
|
|
// Branch - figure out which encoder the user wants by the settings struct
|
|
// Send off the information to the right encoder and let it
|
|
// spit back out the results the user wants
|
|
switch(tSettings.nChanConfig)
|
|
{
|
|
case NEURAL_THX_7_5_GAMING:
|
|
{
|
|
// The 7 To 5 Encoder
|
|
nErrorHandle = Neural_THX_725_Encode( tChannelsIn.m_fL,
|
|
tChannelsIn.m_fR,
|
|
tChannelsIn.m_fC,
|
|
tChannelsIn.m_fLFE,
|
|
tChannelsIn.m_fLs,
|
|
tChannelsIn.m_fRs,
|
|
tChannelsIn.m_fLb,
|
|
tChannelsIn.m_fRb,
|
|
tChannelsOut.m_fL,
|
|
tChannelsOut.m_fR,
|
|
tChannelsOut.m_fC,
|
|
tChannelsOut.m_fLFE,
|
|
tChannelsOut.m_fLs,
|
|
tChannelsOut.m_fRs,
|
|
tSettings.bUseFinalLimiting,
|
|
tSettings.nFramesize,
|
|
tSettings.nChanConfig,
|
|
tSettings.nSampleRate,
|
|
(Neural_THX_725_Encode_Struct *)(tParams.pParams));
|
|
}
|
|
break;
|
|
case NEURAL_THX_5_2_GAMING:
|
|
{
|
|
// The 5 To 2 Encoder :)
|
|
nErrorHandle = Neural_THX_522_Encode( tChannelsIn.m_fL,
|
|
tChannelsIn.m_fR,
|
|
tChannelsIn.m_fC,
|
|
tChannelsIn.m_fLFE,
|
|
tChannelsIn.m_fLs,
|
|
tChannelsIn.m_fRs,
|
|
tChannelsOut.m_fL,
|
|
tChannelsOut.m_fR,
|
|
tSettings.bUseFinalLimiting,
|
|
tSettings.fLFECutOff,
|
|
tSettings.nFramesize,
|
|
tSettings.nChanConfig,
|
|
tSettings.nSampleRate,
|
|
(Neural_THX_522_Encode_Struct *)(tParams.pParams));
|
|
}
|
|
break;
|
|
case NEURAL_THX_6_5_GAMING: // !Supported Yet
|
|
{
|
|
// Temporary until it gets supported
|
|
return UNSUPPORTED_CHANCONFIG;
|
|
}
|
|
break;
|
|
case NEURAL_THX_7_2_GAMING: // !Supported Yet
|
|
{
|
|
nErrorHandle = Neural_THX_722_Encode( tChannelsIn.m_fL,
|
|
tChannelsIn.m_fR,
|
|
tChannelsIn.m_fC,
|
|
tChannelsIn.m_fLFE,
|
|
tChannelsIn.m_fLs,
|
|
tChannelsIn.m_fRs,
|
|
tChannelsIn.m_fLb,
|
|
tChannelsIn.m_fRb,
|
|
tChannelsOut.m_fL,
|
|
tChannelsOut.m_fR,
|
|
tSettings.bUseFinalLimiting,
|
|
tSettings.fLFECutOff,
|
|
tSettings.nFramesize,
|
|
tSettings.nChanConfig,
|
|
tSettings.nSampleRate,
|
|
(Neural_THX_722_Encode_Struct *)(tParams.pParams));
|
|
}
|
|
break;
|
|
|
|
default:
|
|
{
|
|
return UNKNOWN_ERROR;// should never reach this ... should :)
|
|
}
|
|
break;
|
|
};
|
|
|
|
|
|
// Double check if there was an error :) hopefully not
|
|
NRLTHX_ERRORCHECK(nErrorHandle);
|
|
// return the errors
|
|
return nErrorHandle;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Name : Shutdown
|
|
//
|
|
// Params : void
|
|
//
|
|
// Return : int - Neural-THX error code
|
|
//
|
|
// Purpose : Used to unitialize structures and release any memory needed
|
|
// by the encoder
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
int NEURAL_THX_ENCODER::Shutdown(void)
|
|
{
|
|
// Get prepared to catch errors
|
|
int nErrorHandle = NRLTHX_OK;
|
|
|
|
// Return the errors
|
|
return nErrorHandle;
|
|
}
|