Example #1
0
////////////////////////////////////////////////////////////////////////////
///
/// Populate the AUDIO_DECODER's MME_SET_GLOBAL_TRANSFORMER_PARAMS parameters for AVS audio.
///
CodecStatus_t Codec_MmeAudioAvs_c::FillOutSetStreamParametersCommand(void)
{
	CodecStatus_t Status;
	AvsAudioStreamParameters_t *Parsed = (AvsAudioStreamParameters_t *)ParsedFrameParameters->StreamParameterStructure;
	AvsAudioCodecStreamParameterContext_t *Context = (AvsAudioCodecStreamParameterContext_t *)StreamParameterContext;
//Parsed may be NULL if call to this function results from an ALSA parameter update.
	if (Parsed)
	{
		//
		// Examine the parsed stream parameters and determine what type of codec to instanciate
		//
		DecoderId = Parsed->Layer == 3 ? ACC_MP3_ID : ACC_MP2A_ID;
	}
	//
	// Now fill out the actual structure
	//
	memset(&(Context->StreamParameters), 0, sizeof(Context->StreamParameters));
	Status = FillOutTransformerGlobalParameters(&(Context->StreamParameters));
	if (Status != CodecNoError)
		return Status;
	//
	// Fill out the actual command
	//
	Context->BaseContext.MMECommand.CmdStatus.AdditionalInfoSize = 0;
	Context->BaseContext.MMECommand.CmdStatus.AdditionalInfo_p = NULL;
	Context->BaseContext.MMECommand.ParamSize = sizeof(Context->StreamParameters);
	Context->BaseContext.MMECommand.Param_p = (MME_GenericParams_t)(&Context->StreamParameters);
//
	return CodecNoError;
}
////////////////////////////////////////////////////////////////////////////
///
/// Populate the AUDIO_DECODER's MME_SET_GLOBAL_TRANSFORMER_PARAMS parameters for LPCM audio.
///
CodecStatus_t   Codec_MmeAudioLpcm_c::FillOutSetStreamParametersCommand(void)
{
    CodecStatus_t Status;
//LpcmAudioStreamParameters_t *Parsed = (LpcmAudioStreamParameters_t *)ParsedFrameParameters->StreamParameterStructure;
    LpcmAudioCodecStreamParameterContext_t  *Context = (LpcmAudioCodecStreamParameterContext_t *)StreamParameterContext;
    //
    // Examine the parsed stream parameters and determine what type of codec to instanciate
    //
    DecoderId = ACC_LPCM_ID;
    //
    // Now fill out the actual structure
    //
    memset(&(Context->StreamParameters), 0, sizeof(Context->StreamParameters));
    Status = FillOutTransformerGlobalParameters(&(Context->StreamParameters));
    if (Status != CodecNoError)
        return Status;
    //
    // Fill out the actual command
    //
    Context->BaseContext.MMECommand.CmdStatus.AdditionalInfoSize        = 0;
    Context->BaseContext.MMECommand.CmdStatus.AdditionalInfo_p          = NULL;
    Context->BaseContext.MMECommand.ParamSize                           = sizeof(Context->StreamParameters);
    Context->BaseContext.MMECommand.Param_p                             = (MME_GenericParams_t)(&Context->StreamParameters);
//
    return CodecNoError;
}
////////////////////////////////////////////////////////////////////////////
///
/// Populate the AUDIO_DECODER's MME_SET_GLOBAL_TRANSFORMER_PARAMS parameters for DTSHD audio.
///
CodecStatus_t   Codec_MmeAudioDtshd_c::FillOutSetStreamParametersCommand( void )
{
    CodecStatus_t Status;
//DtshdAudioStreamParameters_t *Parsed = (DtshdAudioStreamParameters_t *)ParsedFrameParameters->StreamParameterStructure;
    DtshdAudioCodecStreamParameterContext_t *Context = (DtshdAudioCodecStreamParameterContext_t *)StreamParameterContext;

    if ((ParsedAudioParameters->OriginalEncoding != AudioOriginalEncodingDtshdLBR) && IsLbrStream)
    {
        CODEC_TRACE("This stream does not contain any lbr extension!\n");
        return CodecError;
    }

    // if the stream is dtshd, then the "transcoding" might be required
    if ( (ParsedAudioParameters->OriginalEncoding == AudioOriginalEncodingDtshdMA) ||
            (ParsedAudioParameters->OriginalEncoding == AudioOriginalEncodingDtshd) )
    {
        if (ParsedAudioParameters->BackwardCompatibleProperties.SampleRateHz && ParsedAudioParameters->BackwardCompatibleProperties.SampleCount)
        {
            // a core is present, so transcode is possible
            TranscodeEnable = true;
        }
        else
        {
            TranscodeEnable = false;
        }
    }
    else
    {
        TranscodeEnable = false;
    }
    //
    // Examine the parsed stream parameters and determine what type of codec to instanciate
    //

    DecoderId = ACC_DTS_ID;

    //
    // Now fill out the actual structure
    //

    memset( &(Context->StreamParameters), 0, sizeof(Context->StreamParameters) );
    Status = FillOutTransformerGlobalParameters( &(Context->StreamParameters) );
    if( Status != CodecNoError )
        return Status;

    //
    // Fillout the actual command
    //

    Context->BaseContext.MMECommand.CmdStatus.AdditionalInfoSize        = 0;
    Context->BaseContext.MMECommand.CmdStatus.AdditionalInfo_p          = NULL;
    Context->BaseContext.MMECommand.ParamSize                           = sizeof(Context->StreamParameters);
    Context->BaseContext.MMECommand.Param_p                             = (MME_GenericParams_t)(&Context->StreamParameters);

//

    return CodecNoError;
}
//}}}
//{{{ FillOutTransformerInitializationParameters
////////////////////////////////////////////////////////////////////////////
///
/// Populate the AUDIO_DECODER's initialization parameters for PCM audio.
///
CodecStatus_t Codec_MmeAudioPcm_c::FillOutTransformerInitializationParameters(void)
{
	CodecStatus_t Status;
	MME_LxAudioDecoderInitParams_t &Params = AudioDecoderInitializationParameters;
	MMEInitializationParameters.TransformerInitParamsSize = sizeof(Params);
	MMEInitializationParameters.TransformerInitParams_p = &Params;
	Status = Codec_MmeAudio_c::FillOutTransformerInitializationParameters();
	if (Status != CodecNoError)
		return Status;
	return FillOutTransformerGlobalParameters(&Params.GlobalParams);
}
//}}}
//{{{  FillOutSetStreamParametersCommand
////////////////////////////////////////////////////////////////////////////
///
/// Populate the AUDIO_DECODER's MME_SET_GLOBAL_TRANSFORMER_PARAMS parameters for PCM audio.
///
CodecStatus_t   Codec_MmeAudioPcm_c::FillOutSetStreamParametersCommand( void )
{
    CodecStatus_t                               Status;
    PcmAudioCodecStreamParameterContext_t*      Context = (PcmAudioCodecStreamParameterContext_t *)StreamParameterContext;

    CODEC_TRACE("\n");
    // Fill out the structure
#if 0
    // There are no set stream parameters for Vp6 decoder so the transformer is
    // terminated and restarted when required (i.e. if width or height change).

    if (RestartTransformer)
    {
        TerminateMMETransformer();

        memset (&MMEInitializationParameters, 0x00, sizeof(MME_TransformerInitParams_t));

        MMEInitializationParameters.Priority                    = MME_PRIORITY_NORMAL;
        MMEInitializationParameters.StructSize                  = sizeof(MME_TransformerInitParams_t);
        MMEInitializationParameters.Callback                    = &MMECallbackStub;
        MMEInitializationParameters.CallbackUserData            = this;

        FillOutTransformerInitializationParameters ();

        MMEStatus               = MME_InitTransformer (Configuration.TransformName[SelectedTransformer],
                                                       &MMEInitializationParameters, &MMEHandle);

        if (MMEStatus ==  MME_SUCCESS)
        {
            CODEC_DEBUG ("New Stream Params %dx%d\n", DecodingWidth, DecodingHeight);
            CodecStatus                                         = CodecNoError;
            RestartTransformer                                  = eAccFalse;
            ParsedFrameParameters->NewStreamParameters          = false;

            MMEInitialized                                      = true;
        }
    }
#endif

    memset (&(Context->StreamParameters), 0, sizeof(Context->StreamParameters));
    Status              = FillOutTransformerGlobalParameters (&(Context->StreamParameters));
    if (Status != CodecNoError)
        return Status;

    // Fillout the actual command
    Context->BaseContext.MMECommand.CmdStatus.AdditionalInfoSize        = 0;
    Context->BaseContext.MMECommand.CmdStatus.AdditionalInfo_p          = NULL;
    Context->BaseContext.MMECommand.ParamSize                           = sizeof(Context->StreamParameters);
    Context->BaseContext.MMECommand.Param_p                             = (MME_GenericParams_t)(&Context->StreamParameters);

    return CodecNoError;
}
////////////////////////////////////////////////////////////////////////////
///
/// Populate the AUDIO_DECODER's initialization parameters for SPDIFIN audio.
///
/// When this method completes Codec_MmeAudio_c::AudioDecoderInitializationParameters
/// will have been filled out with valid values sufficient to initialize an
/// SPDIFIN audio decoder.
///
CodecStatus_t Codec_MmeAudioSpdifin_c::FillOutTransformerInitializationParameters(void)
{
	CodecStatus_t Status;
	MME_LxAudioDecoderInitParams_t &Params = AudioDecoderInitializationParameters;
//
	MMEInitializationParameters.TransformerInitParamsSize = sizeof(Params);
	MMEInitializationParameters.TransformerInitParams_p = &Params;
//
	Status = Codec_MmeAudio_c::FillOutTransformerInitializationParameters();
	if (Status != CodecNoError)
		return Status;
	// Spdifin decoder must be handled as streambase.
	AUDIODEC_SET_STREAMBASE((&Params), ACC_MME_TRUE);
//
	return FillOutTransformerGlobalParameters(&Params.GlobalParams);
}