* Fixed boats falling and a TP glitch #266 * Replaced every C-style cast with C++ ones * Replaced every C-style cast with C++ ones * Fixed boats falling and a TP glitch #266 * Updated NULL to nullptr and fixing some type issues * Modernized and fixed a few bugs - Replaced most instances of `NULL` with `nullptr`. - Replaced most `shared_ptr(new ...)` with `make_shared`. - Removed the `nullptr` macro as it was interfering with the actual nullptr keyword in some instances. * Fixing more conflicts * Replace int loops with size_t and start work on overrides
118 lines
3.3 KiB
C++
118 lines
3.3 KiB
C++
#include "..\stdafx.h"
|
|
#include <sysutil/sysutil_sysparam.h>
|
|
#include <cell/sysmodule.h>
|
|
#include <sys/spu_initialize.h>
|
|
#include <fcntl.h>
|
|
#include <unistd.h>
|
|
#include <cell/audio.h>
|
|
#include "..\..\Common\Audio\SoundEngine.h"
|
|
#include "..\..\Common\Consoles_App.h"
|
|
#include "..\..\PS3\Miles\include\mss.h"
|
|
|
|
// This file has the platform specific functions required for PS3 audio
|
|
|
|
//
|
|
// this function configures the audio hardware.
|
|
// you specify the minimum number of channels that you need, and it
|
|
// returns the number of output channels that will be used (which will
|
|
// be at least your minimum count, but possibly more). it will return 0
|
|
// for any failure cases.
|
|
|
|
int SoundEngine::initAudioHardware( int minimum_chans )
|
|
{
|
|
int ret;
|
|
int ch_pcm;
|
|
int ch_bit;
|
|
CellAudioOutConfiguration a_config;
|
|
|
|
memset( &a_config, 0, sizeof( CellAudioOutConfiguration ) );
|
|
|
|
// first lets see how many pcm output channels we have
|
|
ch_pcm = cellAudioOutGetSoundAvailability( CELL_AUDIO_OUT_PRIMARY,
|
|
CELL_AUDIO_OUT_CODING_TYPE_LPCM,
|
|
CELL_AUDIO_OUT_FS_48KHZ, 0 );
|
|
|
|
if ( ch_pcm >= minimum_chans )
|
|
{
|
|
a_config.channel = ch_pcm;
|
|
a_config.encoder = CELL_AUDIO_OUT_CODING_TYPE_LPCM;
|
|
a_config.downMixer = CELL_AUDIO_OUT_DOWNMIXER_NONE; /* No downmixer is used */
|
|
cellAudioOutConfigure( CELL_AUDIO_OUT_PRIMARY, &a_config, nullptr, 0 );
|
|
|
|
ret = ch_pcm;
|
|
}
|
|
else
|
|
{
|
|
switch ( ch_pcm )
|
|
{
|
|
case 6:
|
|
// this means we asked for 8 channels, but only 6 are available
|
|
// so, we'll turn on the 7.1 to 5.1 downmixer.
|
|
a_config.channel = 6;
|
|
a_config.encoder = CELL_AUDIO_OUT_CODING_TYPE_LPCM;
|
|
a_config.downMixer = CELL_AUDIO_OUT_DOWNMIXER_TYPE_B;
|
|
if ( cellAudioOutConfigure( CELL_AUDIO_OUT_PRIMARY, &a_config, nullptr, 0 ) != CELL_OK )
|
|
{
|
|
return 0; // error - the downmixer didn't init
|
|
}
|
|
|
|
ret = 8;
|
|
break;
|
|
|
|
case 2:
|
|
// ok, this means they asked for multi-channel out, but only stereo
|
|
// is supported. we'll try dolby digital first and then the downmixer
|
|
|
|
ch_bit = cellAudioOutGetSoundAvailability( CELL_AUDIO_OUT_PRIMARY,
|
|
CELL_AUDIO_OUT_CODING_TYPE_AC3,
|
|
CELL_AUDIO_OUT_FS_48KHZ, 0 );
|
|
if ( ch_bit > 0 )
|
|
{
|
|
a_config.channel = ch_bit;
|
|
a_config.encoder = CELL_AUDIO_OUT_CODING_TYPE_AC3;
|
|
if ( ch_bit >= minimum_chans )
|
|
{
|
|
// we have enough channels to support their minimum
|
|
a_config.downMixer = CELL_AUDIO_OUT_DOWNMIXER_NONE;
|
|
ret = ch_bit;
|
|
}
|
|
else
|
|
{
|
|
// we don't have enough channels to support their minimum, so use the downmixer
|
|
a_config.downMixer = CELL_AUDIO_OUT_DOWNMIXER_TYPE_B;
|
|
ret = 8;
|
|
}
|
|
|
|
if ( cellAudioOutConfigure( CELL_AUDIO_OUT_PRIMARY, &a_config, nullptr, 0 ) == CELL_OK )
|
|
{
|
|
break;
|
|
}
|
|
|
|
// if we got here the dolby encoder, didn't init, so fall through to downmixing to stereo
|
|
}
|
|
|
|
a_config.channel = 2;
|
|
a_config.encoder = CELL_AUDIO_OUT_CODING_TYPE_LPCM;
|
|
a_config.downMixer = CELL_AUDIO_OUT_DOWNMIXER_TYPE_A;
|
|
if ( cellAudioOutConfigure( CELL_AUDIO_OUT_PRIMARY, &a_config, nullptr, 0 ) != CELL_OK )
|
|
{
|
|
return 0; // error - downmixer didn't work
|
|
}
|
|
|
|
ret = 2; // downmixer does 7.0 to 2.0 downmixing...
|
|
break;
|
|
|
|
default:
|
|
// some other weird case that we don't understand
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
// turn off copy protection stupidness
|
|
cellAudioOutSetCopyControl( CELL_AUDIO_OUT_PRIMARY,
|
|
CELL_AUDIO_OUT_COPY_CONTROL_COPY_FREE );
|
|
|
|
return( ret );
|
|
}
|
|
|