Home | History | Annotate | Download | only in src
      1 /*
      2  INTEL CONFIDENTIAL
      3  Copyright 2009 Intel Corporation All Rights Reserved.
      4  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 Intels prior express written permission.
      5 
      6  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.
      7 */
      8 
      9 /**
     10  * SECTION:mixacpwma
     11  * @short_description: Audio parameters for WMA audio.
     12  * @include: mixacpwma.h
     13  *
     14  * A data object which stores audio specific parameters for WMA.
     15  *
     16  * In Moorestown, only WMA2 is supported.
     17  *
     18  * Additional parameters must be set in the parent object #MixAudioConfigParams
     19  */
     20 
     21 #include "mixacpwma.h"
     22 
     23 static GType _mix_acp_wma_type = 0;
     24 static MixAudioConfigParamsClass *parent_class = NULL;
     25 
     26 #define _do_init { _mix_acp_wma_type = g_define_type_id; }
     27 
     28 gboolean mix_acp_wma_copy(MixParams* target, const MixParams *src);
     29 MixParams* mix_acp_wma_dup(const MixParams *obj);
     30 gboolean mix_acp_wma_equal(MixParams* first, MixParams *second);
     31 static void mix_acp_wma_finalize(MixParams *obj);
     32 
     33 G_DEFINE_TYPE_WITH_CODE(MixAudioConfigParamsWMA, mix_acp_wma, MIX_TYPE_AUDIOCONFIGPARAMS, _do_init);
     34 
     35 static void mix_acp_wma_init (MixAudioConfigParamsWMA *self)
     36 {
     37   self->channel_mask = 0;
     38   self->format_tag = 0;
     39   self->block_align = 0;
     40   self->wma_encode_opt = 0;
     41   self->pcm_bit_width = 0;  /* source pcm bit width */
     42   self->wma_version = MIX_AUDIO_WMA_VUNKNOWN;
     43 }
     44 
     45 static void mix_acp_wma_class_init(MixAudioConfigParamsWMAClass *klass)
     46 {
     47   MixParamsClass *mixparams_class = MIX_PARAMS_CLASS(klass);
     48 
     49   /* setup static parent class */
     50   parent_class = (MixAudioConfigParamsClass *) g_type_class_peek_parent (klass);
     51 
     52   mixparams_class->finalize = mix_acp_wma_finalize;
     53   mixparams_class->copy = (MixParamsCopyFunction)mix_acp_wma_copy;
     54   mixparams_class->dup = (MixParamsDupFunction)mix_acp_wma_dup;
     55   mixparams_class->equal = (MixParamsEqualFunction)mix_acp_wma_equal;
     56 }
     57 
     58 MixAudioConfigParamsWMA *mix_acp_wma_new(void)
     59 {
     60   MixAudioConfigParamsWMA *ret = (MixAudioConfigParamsWMA *)g_type_create_instance (MIX_TYPE_AUDIOCONFIGPARAMSWMA);
     61 
     62   return ret;
     63 }
     64 
     65 void mix_acp_wma_finalize(MixParams *obj)
     66 {
     67   /* clean up here. */
     68 
     69   /* Chain up parent */
     70   MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class);
     71   if (klass->finalize)
     72     klass->finalize(obj);
     73 }
     74 
     75 MixAudioConfigParamsWMA *mix_acp_wma_ref(MixAudioConfigParamsWMA *obj)
     76 {
     77   return (MixAudioConfigParamsWMA*)mix_params_ref(MIX_PARAMS(obj));
     78 }
     79 
     80 /**
     81  * mix_acp_wma_dup:
     82  * @obj: a #MixAudioConfigParamsWMA object
     83  * @returns: a newly allocated duplicate of the object.
     84  *
     85  * Copy duplicate of the object.
     86  */
     87 MixParams* mix_acp_wma_dup(const MixParams *obj)
     88 {
     89   MixParams *ret = NULL;
     90 
     91   if (MIX_IS_AUDIOCONFIGPARAMSWMA(obj))
     92   {
     93     MixAudioConfigParamsWMA *duplicate = mix_acp_wma_new();
     94     if (mix_acp_wma_copy(MIX_PARAMS(duplicate), MIX_PARAMS(obj)))
     95     {
     96       ret = MIX_PARAMS(duplicate);
     97     }
     98     else
     99     {
    100       mix_acp_wma_unref(duplicate);
    101     }
    102   }
    103 
    104   return ret;
    105 }
    106 
    107 /**
    108  * mix_acp_wma_copy:
    109  * @target: copy to target
    110  * @src: copy from src
    111  * @returns: boolean indicates if copy is successful.
    112  *
    113  * Copy instance data from @src to @target.
    114  */
    115 gboolean mix_acp_wma_copy(MixParams* target, const MixParams *src)
    116 {
    117   if (MIX_IS_AUDIOCONFIGPARAMSWMA(target) && MIX_IS_AUDIOCONFIGPARAMSWMA(src))
    118   {
    119     MixAudioConfigParamsWMA *t = MIX_AUDIOCONFIGPARAMSWMA(target);
    120     MixAudioConfigParamsWMA *s = MIX_AUDIOCONFIGPARAMSWMA(src);
    121 
    122     t->channel_mask = s->channel_mask;
    123     t->format_tag = s->format_tag;
    124     t->block_align = s->block_align;
    125     t->wma_encode_opt = s->wma_encode_opt;
    126     t->wma_version = s->wma_version;
    127     t->pcm_bit_width = s->pcm_bit_width;
    128 
    129     // Now chainup base class
    130     MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class);
    131     if (klass->copy)
    132     {
    133       return klass->copy(MIX_PARAMS_CAST(target), MIX_PARAMS_CAST(src));
    134     }
    135     else
    136       return TRUE;
    137   }
    138   return FALSE;
    139 }
    140 
    141 /**
    142  * mix_acp_wma_equal:
    143  * @first: first object to compare
    144  * @second: seond object to compare
    145  * @returns: boolean indicates if instance are equal.
    146  *
    147  * Copy instance data from @src to @target.
    148  */
    149 gboolean mix_acp_wma_equal(MixParams* first, MixParams *second)
    150 {
    151   gboolean ret = FALSE;
    152 
    153   if (first && second)
    154   {
    155     if (first == second) return TRUE;
    156   }
    157   else
    158   {
    159     return FALSE;
    160   }
    161 
    162   MixParamsClass *klass = MIX_PARAMS_CLASS(parent_class);
    163   if (klass->equal)
    164     ret = klass->equal(first, second);
    165   else
    166     ret = TRUE;
    167 
    168   if (ret && MIX_IS_AUDIOCONFIGPARAMSWMA(first) && MIX_IS_AUDIOCONFIGPARAMSWMA(second))
    169   {
    170     MixAudioConfigParamsWMA *acp1 = MIX_AUDIOCONFIGPARAMSWMA(first);
    171     MixAudioConfigParamsWMA *acp2 = MIX_AUDIOCONFIGPARAMSWMA(second);
    172 
    173     ret = (acp1->channel_mask == acp2->channel_mask) &&
    174           (acp1->format_tag == acp2->format_tag) &&
    175           (acp1->block_align == acp2->block_align) &&
    176           (acp1->wma_encode_opt == acp2->wma_encode_opt) &&
    177           (acp1->pcm_bit_width == acp2->pcm_bit_width) &&
    178           (acp1->wma_version == acp2->wma_version);
    179   }
    180 
    181   return ret;
    182 }
    183 
    184 MixAudioWMAVersion mix_acp_wma_get_version(MixAudioConfigParamsWMA *obj)
    185 {
    186   if (obj)
    187     return (obj->wma_version);
    188   else
    189     return MIX_AUDIO_WMA_VUNKNOWN;
    190 }
    191 
    192 MIX_RESULT mix_acp_wma_set_version(MixAudioConfigParamsWMA *obj, MixAudioWMAVersion ver)
    193 {
    194   MIX_RESULT ret = MIX_RESULT_SUCCESS;
    195 
    196   if (!obj) return MIX_RESULT_NULL_PTR;
    197 
    198   if ((ver > MIX_AUDIO_WMA_VUNKNOWN) && (ver < MIX_AUDIO_WMA_LAST))
    199     obj->wma_version = ver;
    200   else
    201     ret=MIX_RESULT_INVALID_PARAM;
    202 
    203   return ret;
    204 }
    205 
    206