diff -r 095bea5f582e -r 0ac9a5310753 khronosfws/openmax_al/src/gst_adaptation/xaaudioencoderitfadaptation.c --- a/khronosfws/openmax_al/src/gst_adaptation/xaaudioencoderitfadaptation.c Tue Aug 31 15:43:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,241 +0,0 @@ -/* - * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). - * All rights reserved. - * This component and the accompanying materials are made available - * under the terms of "Eclipse Public License v1.0" - * which accompanies this distribution, and is available - * at the URL "http://www.eclipse.org/legal/epl-v10.html". - * - * Initial Contributors: - * Nokia Corporation - initial contribution. - * - * Contributors: - * - * Description: AudioEnc Intfc Adaptation for GStreamer - * - */ - -#include -#include "xamediarecorderadaptctx.h" -#include "xaaudioencoderitfadaptation.h" -#include "xaadaptationgst.h" -//#include "XAStaticCapsAdaptation.h" - -/* - * XAresult XAAudioEncoderItfAdapt_SetEncoderSettings( XAAdaptationGstCtx *ctx, - * XAAudioEncoderSettings *pSettings ) - * @param XAAdaptationGstCtx *ctx - pointer to Media Recorer adaptation contex - * @param XAAudioEncoderSettings *pSettings - Settings to be setted for encoder - * @return XAresult ret - return success value - * Description: Sets preferred encoder settings for pipeline. - */ -XAresult XAAudioEncoderItfAdapt_SetEncoderSettings(XAAdaptationBaseCtx *ctx, - XAAudioEncoderSettings *pSettings) - { - XAresult ret = XA_RESULT_SUCCESS; - XAMediaRecorderAdaptationCtx* mCtx = NULL; - - DEBUG_API("->XAAudioEncoderItfAdapt_SetEncoderSettings"); - if (!ctx || (ctx->ctxId != XAMediaRecorderAdaptation) || !pSettings) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - DEBUG_API("<-XAAudioEncoderItfImpl_SetEncoderSettings"); - return XA_RESULT_PARAMETER_INVALID; - } - mCtx = (XAMediaRecorderAdaptationCtx*) ctx; - - ret = XAMediaRecorderAdapt_CheckCodec(mCtx, XACAP_AUDIO, - pSettings->encoderId); - if (ret == XA_RESULT_SUCCESS) - { - /*change of settings - pipeline must be regenerated**/ - mCtx->encodingchanged = XA_BOOLEAN_TRUE; - memcpy(&mCtx->audioEncSettings, pSettings, - sizeof(XAAudioEncoderSettings)); - } - DEBUG_API("<-XAAudioEncoderItfAdapt_SetEncoderSettings"); - return ret; - } - -static gboolean -populate_field_settings (GQuark field, const GValue * value, gpointer pfx) -{ - gchar *field_name ; - - gpointer *pfxd = (gpointer*)pfx; - XAMediaRecorderAdaptationCtx *ctxx = (XAMediaRecorderAdaptationCtx *) *pfxd; - - field_name = (gchar*)g_quark_to_string (field); - - if((strcasecmp((const char*)field_name,"channels") == 0)) - { - if(GST_VALUE_HOLDS_INT_RANGE(value) == TRUE) - { - (ctxx)->audioEncSettings.channelsIn = gst_value_get_int_range_max (value); - (ctxx)->audioEncSettings.channelsOut = gst_value_get_int_range_max (value); - }else - { - (ctxx)->audioEncSettings.channelsIn = g_value_get_int(value); - (ctxx)->audioEncSettings.channelsOut = g_value_get_int(value); - } - - } - if((strcasecmp((const char*)field_name,"depth") == 0)) - { - if(GST_VALUE_HOLDS_INT_RANGE(value) == TRUE) - { - (ctxx)->audioEncSettings.bitsPerSample = gst_value_get_int_range_min (value); - }else - { - (ctxx)->audioEncSettings.bitsPerSample = g_value_get_int(value); - } - } - if((strcasecmp((const char*)field_name,"endianness") == 0)) - { - if(GST_VALUE_HOLDS_INT_RANGE(value) == TRUE) - { - (ctxx)->audioEncSettings.blockAlignment = gst_value_get_int_range_min (value); - }else - { - (ctxx)->audioEncSettings.blockAlignment = g_value_get_int(value); - } - } - if((strcasecmp((const char*)field_name,"bitrate") == 0)) - { - if(GST_VALUE_HOLDS_INT_RANGE(value) == TRUE) - { - (ctxx)->audioEncSettings.bitRate = gst_value_get_int_range_min (value); - }else - { - (ctxx)->audioEncSettings.bitRate = g_value_get_int(value); - } - - } - if((strcasecmp((const char*)field_name,"rate") == 0)) - { - if(GST_VALUE_HOLDS_INT_RANGE(value) == TRUE) - { - (ctxx)->audioEncSettings.sampleRate = gst_value_get_int_range_min (value)*1000; - }else - { - (ctxx)->audioEncSettings.sampleRate = g_value_get_int(value) * 1000; - } - - } - -return TRUE; -} -XAresult XAAudioEncoderItfAdapt_GetEncoderSettings(XAAdaptationBaseCtx *bCtx, - XAAudioEncoderSettings *pSettings) - { - XAMediaRecorderAdaptationCtx* mCtx = NULL; - XAresult ret = XA_RESULT_SUCCESS; - - GstElement *encoderelement=NULL,*actualencoder=NULL; - GstPad * encoderpad = NULL; - GstCaps *encodercaps =NULL; - GstStructure *structure = NULL; - XAAdaptationGstCtx *ctx = NULL; - int value = -1 ; - - DEBUG_API("->XAAudioEncoderItfAdapt_GetEncoderSettings"); - if (!bCtx || (bCtx->ctxId != XAMediaRecorderAdaptation) || !pSettings) - { - DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); - return XA_RESULT_PARAMETER_INVALID; - } - mCtx = (XAMediaRecorderAdaptationCtx*) bCtx; - ctx = (XAAdaptationGstCtx *)bCtx; - - encoderelement = gst_bin_get_by_name((GstBin*)ctx->bin ,"mrcodecbin"); - if (encoderelement != NULL) - { - encoderpad = gst_element_get_pad(encoderelement , "sink"); - if(encoderpad != NULL){ - encodercaps = gst_pad_get_negotiated_caps(encoderpad); - if(encodercaps == NULL) - { - //pipeline is not in playing state , so getting allowed caps - encodercaps = gst_pad_get_allowed_caps(encoderpad); - } - } - else{ - DEBUG_ERR("No pad named sink in codecbin pad"); - } - if(encodercaps != NULL && encodercaps->structs->len > 0) - { - structure = gst_caps_get_structure (encodercaps, 0); - } - else{ - DEBUG_ERR("no allowed caps for encoderelement"); - } - - //populate the values based on neotiated caps or allowed caps. - gst_structure_foreach (structure, populate_field_settings, (gpointer) &mCtx); - - //finding the actual encoder. - if(mCtx->codecbin != NULL){ - actualencoder = gst_bin_get_by_name((GstBin*)mCtx->codecbin ,"audioenc"); - } - //finding bitrate property - if(value == -1 && actualencoder != NULL) - { - //search in encoder element , property is there or not? - g_object_get(G_OBJECT (actualencoder), "bitrate", &value,NULL); - } - if(mCtx->audioEncSettings.encoderId == XA_AUDIOCODEC_AMR) - { - g_object_get(G_OBJECT (mCtx->audiosource), "speechbitrate", &value,NULL); - } - if(value != -1) - { - mCtx->audioEncSettings.bitRate = value; - value =-1; - } - - //finding profile property - if(value == -1 && actualencoder != NULL) - { - g_object_get(G_OBJECT (actualencoder), "profile", &value,NULL); - } - if(value != -1) - { - mCtx->audioEncSettings.levelSetting = value; - value =-1; - } - - //finding output-format property - if(value == -1 && actualencoder != NULL) - { - //try to see search in encoder element , property is there or not? - g_object_get(G_OBJECT (actualencoder), "output-format", &value,NULL); - } - if(value != -1) - { - mCtx->audioEncSettings.streamFormat = value; - value =-1; - } - - - //setting these settings to default. - mCtx->audioEncSettings.channelMode=0; - mCtx->audioEncSettings.rateControl = XA_RATECONTROLMODE_CONSTANTBITRATE; - mCtx->audioEncSettings.encodeOptions = 0; - - //unref the caps, pads , elements - if(encodercaps != NULL) - gst_caps_unref(encodercaps); - if(encoderpad!= NULL) - gst_object_unref(encoderpad); - if(actualencoder!= NULL) - gst_object_unref (actualencoder); - if(encoderelement!= NULL) - gst_object_unref (encoderelement); - }else{ - DEBUG_ERR("Codecbin element Not found "); - } - memcpy(pSettings, &(mCtx->audioEncSettings), - sizeof(XAAudioEncoderSettings)); - DEBUG_API("<-XAAudioEncoderItfAdapt_GetEncoderSettings"); - return ret; - }