1bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/* 2bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee INTEL CONFIDENTIAL 3bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee Copyright 2009 Intel Corporation All Rights Reserved. 4bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material contains trade secrets and proprietary and confidential information of Intel or its suppliers and licensors. The Material is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel’s prior express written permission. 5bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 6bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing. 7bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee*/ 8bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 9bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** 10bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * SECTION:mixacpaac 11bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @short_description: Audio configuration parameters for AAC-LC, HEAAC v1, and HEAAC v2 audio format. 12bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @include: mixacpaac.h 13bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * 14bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * A data object which stores audio specific parameters for the following formats: 15bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * <itemizedlist> 16bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * <listitem>AAC-LC</listitem> 17bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * <listitem>HE-AAC v1</listitem> 18bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * <listitem>HE-AAC v2</listitem> 19bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * </itemizedlist> 20bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * 21bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * Additional parameters must be set in the parent object #MixAudioConfigParams 22bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */ 23bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 24bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include "mixacpaac.h" 25bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include <string.h> 26bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#include <mixlog.h> 27bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 28bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic GType _mix_acp_aac_type = 0; 29bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic MixAudioConfigParamsClass *parent_class = NULL; 30bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 31bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee#define _do_init { _mix_acp_aac_type = g_define_type_id; } 32bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 33bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegboolean mix_acp_aac_copy(MixParams* target, const MixParams *src); 34bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixParams* mix_acp_aac_dup(const MixParams *obj); 35bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegboolean mix_acp_aac_equal(MixParams* first, MixParams *second); 36bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic void mix_acp_aac_finalize(MixParams *obj); 37bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 38bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid mix_aac_print_params(MixAudioConfigParams *obj); 39bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 40bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeG_DEFINE_TYPE_WITH_CODE(MixAudioConfigParamsAAC, mix_acp_aac, MIX_TYPE_AUDIOCONFIGPARAMS, _do_init); 41bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 42bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic void mix_acp_aac_init (MixAudioConfigParamsAAC *self) 43bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 44bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->MPEG_id = MIX_AAC_MPEG_ID_NULL; 45bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->bit_stream_format= MIX_AAC_BS_NULL; 46bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->aac_profile=MIX_AAC_PROFILE_NULL; 47bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->aot=0; 48bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->bit_rate_type=MIX_AAC_BR_NULL; /* 0=CBR, 1=VBR */ 49bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->CRC=FALSE; 50bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->sbrPresentFlag = -1; 51bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->psPresentFlag = -1; 52bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->pce_present=FALSE; /* Flag. 1- present 0 - not present, for RAW */ 53bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->syntc_id[0] = self->syntc_id[1] = 0; /* 0 for ID_SCE(Dula Mono), -1 for raw */ 54bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->syntc_tag[0] = self->syntc_tag[1] = 0; /* raw - -1 and 0 -16 for rest of the streams */ 55bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->num_syntc_elems = 0; 56bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->aac_sample_rate = 0; 57bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee self->aac_channels = 0; 58bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 59bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 60bd8388b4555645b3d29abc6a94c303638064d69awonjong.leestatic void mix_acp_aac_class_init(MixAudioConfigParamsAACClass *klass) 61bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 62bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixParamsClass *mixparams_class = MIX_PARAMS_CLASS(klass); 63bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 64bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee /* setup static parent class */ 65bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee parent_class = (MixAudioConfigParamsClass *) g_type_class_peek_parent (klass); 66bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 67bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mixparams_class->finalize = mix_acp_aac_finalize; 68bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mixparams_class->copy = (MixParamsCopyFunction)mix_acp_aac_copy; 69bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mixparams_class->dup = (MixParamsDupFunction)mix_acp_aac_dup; 70bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mixparams_class->equal = (MixParamsEqualFunction)mix_acp_aac_equal; 71bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 72bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee// MixAudioConfigParamsClass *acp = MIX_AUDIOCONFIGPARAMS_GET_CLASS(klass); 73bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixAudioConfigParamsClass *acp = (MixAudioConfigParamsClass *)klass; 74bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee acp->print_params = mix_aac_print_params; 75bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 76bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 77bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixAudioConfigParamsAAC *mix_acp_aac_new(void) 78bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 79bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixAudioConfigParamsAAC *ret = (MixAudioConfigParamsAAC *)g_type_create_instance (MIX_TYPE_AUDIOCONFIGPARAMSAAC); 80bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 81bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return ret; 82bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 83bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 84bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid mix_acp_aac_finalize(MixParams *obj) 85bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 86bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee /* clean up here. */ 87bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 88bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee /* Chain up parent */ 89bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class); 90bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (klass->finalize) 91bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee klass->finalize(obj); 92bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 93bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 94bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixAudioConfigParamsAAC *mix_acp_aac_ref(MixAudioConfigParamsAAC *mix) 95bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 96bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return (MixAudioConfigParamsAAC*)mix_params_ref(MIX_PARAMS(mix)); 97bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 98bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 99bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** 100bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * mix_acp_aac_dup: 101bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @obj: a #MixAudioConfigParamsAAC object 102bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @returns: a newly allocated duplicate of the object. 103bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * 104bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * Copy duplicate of the object. 105bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */ 106bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixParams* mix_acp_aac_dup(const MixParams *obj) 107bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 108bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixParams *ret = NULL; 109bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 110bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (MIX_IS_AUDIOCONFIGPARAMSAAC(obj)) 111bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 112bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixAudioConfigParamsAAC *duplicate = mix_acp_aac_new(); 113bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (mix_acp_aac_copy(MIX_PARAMS(duplicate), MIX_PARAMS(obj))) 114bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 115bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = MIX_PARAMS(duplicate); 116bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 117bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 118bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 119bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_acp_aac_unref(duplicate); 120bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 121bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 122bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 123bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return ret; 124bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 125bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 126bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** 127bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * mix_acp_aac_copy: 128bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @target: copy to target 129bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @src: copy from src 130bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @returns: boolean indicates if copy is successful. 131bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * 132bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * Copy instance data from @src to @target. 133bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */ 134bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegboolean mix_acp_aac_copy(MixParams* target, const MixParams *src) 135bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 136bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (MIX_IS_AUDIOCONFIGPARAMSAAC(target) && MIX_IS_AUDIOCONFIGPARAMSAAC(src)) 137bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 138bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixAudioConfigParamsAAC *t = MIX_AUDIOCONFIGPARAMSAAC(target); 139bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixAudioConfigParamsAAC *s = MIX_AUDIOCONFIGPARAMSAAC(src); 140bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 141bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee t->MPEG_id = s->MPEG_id; 142bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee t->bit_stream_format = s->bit_stream_format; 143bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee t->aac_profile = s->aac_profile; 144bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee t->aot = s->aot; 145bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee t->bit_rate_type = s->bit_rate_type; 146bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee t->CRC = s->CRC; 147bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 148bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // Now chainup base class 149bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class); 150bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (klass->copy) 151bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 152bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return klass->copy(MIX_PARAMS_CAST(target), MIX_PARAMS_CAST(src)); 153bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 154bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 155bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return TRUE; 156bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 157bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return FALSE; 158bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 159bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 160bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee/** 161bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * mix_acp_aac_equal: 162bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @first: first object to compare 163bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @second: seond object to compare 164bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * @returns: boolean indicates if instance are equal. 165bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * 166bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee * Copy instance data from @src to @target. 167bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee */ 168bd8388b4555645b3d29abc6a94c303638064d69awonjong.leegboolean mix_acp_aac_equal(MixParams* first, MixParams *second) 169bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 170bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee gboolean ret = FALSE; 171bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 172bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (first && second) 173bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 174bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (first == second) return TRUE; 175bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 176bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 177bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 178bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return FALSE; 179bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 180bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 181bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee // members within this scope equal. chaining up. 182bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class); 183bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (klass->equal) 184bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = klass->equal(first, second); 185bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 186bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = TRUE; 187bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 188bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (ret && MIX_IS_AUDIOCONFIGPARAMSAAC(first) && MIX_IS_AUDIOCONFIGPARAMSAAC(second)) 189bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 190bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 191bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixAudioConfigParamsAAC *acp1 = MIX_AUDIOCONFIGPARAMSAAC(first); 192bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixAudioConfigParamsAAC *acp2 = MIX_AUDIOCONFIGPARAMSAAC(second); 193bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 194bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = (acp1->MPEG_id == acp2->MPEG_id) && 195bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee (acp1->bit_stream_format && acp2->bit_stream_format) && 196bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee (acp1->aac_profile == acp2->aac_profile) && 197bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee (acp1->aot == acp2->aot) && 198bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee (acp1->bit_rate_type == acp2->bit_rate_type) && 199bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee (acp1->CRC == acp2->CRC) && 200bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee (acp1->sbrPresentFlag == acp2->sbrPresentFlag) && 201bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee (acp1->psPresentFlag == acp2->psPresentFlag) && 202bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee (acp1->pce_present == acp2->pce_present) && 203bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee (acp1->syntc_id[0] == acp2->syntc_id[0]) && 204bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee (acp1->syntc_id[1] == acp2->syntc_id[1]) && 205bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee (acp1->syntc_tag[0] == acp2->syntc_tag[0]) && 206bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee (acp1->syntc_tag[1] == acp2->syntc_tag[1]); 207bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 208bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 209bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return ret; 210bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 211bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 212bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_acp_aac_set_bit_stream_format(MixAudioConfigParamsAAC *obj, MixAACBitstreamFormt bit_stream_format) 213bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 214bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_RESULT ret = MIX_RESULT_SUCCESS; 215bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 216bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (!obj) return MIX_RESULT_NULL_PTR; 217bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 218bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (bit_stream_format < MIX_AAC_BS_ADTS && bit_stream_format >= MIX_AAC_BS_LAST) 219bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 220bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = MIX_RESULT_INVALID_PARAM; 221bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 222bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 223bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 224bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee obj->bit_stream_format = bit_stream_format; 225bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 226bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 227bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return ret; 228bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 229bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixAACBitstreamFormt mix_acp_aac_get_bit_stream_format(MixAudioConfigParamsAAC *obj) 230bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 231bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (obj) 232bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return obj->bit_stream_format; 233bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 234bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_AAC_BS_NULL; 235bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 236bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 237bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_acp_aac_set_aac_profile(MixAudioConfigParamsAAC *obj, MixAACProfile aac_profile) 238bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 239bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_RESULT ret = MIX_RESULT_SUCCESS; 240bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 241bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (!obj) return MIX_RESULT_NULL_PTR; 242bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 243bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (aac_profile < MIX_AAC_PROFILE_MAIN || aac_profile >= MIX_AAC_PROFILE_LAST) 244bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 245bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = MIX_RESULT_INVALID_PARAM; 246bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 247bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 248bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 249bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee obj->aac_profile = aac_profile; 250bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 251bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 252bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return ret; 253bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 254bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixAACProfile mix_acp_aac_get_aac_profile(MixAudioConfigParamsAAC *obj) 255bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 256bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (obj) 257bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return obj->aac_profile; 258bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 259bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_AAC_PROFILE_NULL; 260bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 261bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 262bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_acp_aac_set_bit_rate_type(MixAudioConfigParamsAAC *obj, MixAACBitrateType bit_rate_type) 263bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 264bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MIX_RESULT ret = MIX_RESULT_SUCCESS; 265bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 266bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (!obj) return MIX_RESULT_NULL_PTR; 267bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 268bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (bit_rate_type != MIX_AAC_BR_CONSTANT && bit_rate_type != MIX_AAC_BR_VARIABLE) 269bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 270bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee ret = MIX_RESULT_INVALID_PARAM; 271bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 272bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 273bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 274bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee obj->bit_rate_type = bit_rate_type; 275bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 276bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 277bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return ret; 278bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 279bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixAACBitrateType mix_acp_aac_get_bit_rate_type(MixAudioConfigParamsAAC *obj) 280bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 281bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (obj) 282bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return obj->bit_rate_type; 283bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 284bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_AAC_BR_NULL; 285bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 286bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 287bd8388b4555645b3d29abc6a94c303638064d69awonjong.leevoid mix_aac_print_params(MixAudioConfigParams *obj) 288bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 289bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee MixAudioConfigParamsAAC *t = MIX_AUDIOCONFIGPARAMSAAC(obj); 290bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "Mpeg ID: %d\n", t->MPEG_id); 291bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "bit_stream_format: %d\n", t->bit_stream_format); 292bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "aac_profile: %d\n", t->aac_profile); 293bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "aot: %d\n", t->aot); 294bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "bit_rate_type: %d\n", t->bit_rate_type); 295bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, "CRC: %d\n", t->CRC); 296bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee mix_log(MIX_AUDIO_COMP, MIX_LOG_LEVEL_INFO, " \n"); 297bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 298bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 299bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 300bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_acp_aac_set_aot(MixAudioConfigParamsAAC *obj, guint aot) 301bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 302bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (!obj) return MIX_RESULT_NULL_PTR; 303bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 304bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (MIX_IS_AUDIOCONFIGPARAMSAAC(obj)) 305bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 306bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if ((aot == 2) || (aot == 5)) 307bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 308bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee obj->aot=aot; 309bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_SUCCESS; 310bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 311bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 312bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 313bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_NOT_SUPPORTED; 314bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 315bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 316bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 317bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 318bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_INVALID_PARAM; 319bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 320bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 321bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 322bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeguint mix_acp_aac_get_aot(MixAudioConfigParamsAAC *obj) 323bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 324bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (MIX_IS_AUDIOCONFIGPARAMSAAC(obj)) 325bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return obj->aot; 326bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 327bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return 0; 328bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 329bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 330bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 331bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMIX_RESULT mix_acp_aac_set_mpeg_id(MixAudioConfigParamsAAC *obj, MixAACMpegID mpegid) 332bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 333bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (!obj) return MIX_RESULT_NULL_PTR; 334bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 335bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (MIX_IS_AUDIOCONFIGPARAMSAAC(obj)) 336bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 337bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if ((mpegid >= MIX_AAC_MPEG_ID_NULL) || (mpegid < MIX_AAC_MPEG_LAST)) 338bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 339bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee obj->MPEG_id=mpegid; 340bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_SUCCESS; 341bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 342bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 343bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 344bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_NOT_SUPPORTED; 345bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 346bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 347bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 348bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee { 349bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_RESULT_INVALID_PARAM; 350bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee } 351bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 352bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 353bd8388b4555645b3d29abc6a94c303638064d69awonjong.leeMixAACMpegID mix_acp_aac_get_mpeg_id(MixAudioConfigParamsAAC *obj) 354bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee{ 355bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee if (MIX_IS_AUDIOCONFIGPARAMSAAC(obj)) 356bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return obj->MPEG_id; 357bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee else 358bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee return MIX_AAC_MPEG_ID_NULL; 359bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee} 360bd8388b4555645b3d29abc6a94c303638064d69awonjong.lee 361