khronosfws/openmax_al/src/engine/xaaudioencodercapabilitiesitf.c
changeset 16 43d09473c595
parent 12 5a06f39ad45b
child 25 6f7ceef7b1d1
equal deleted inserted replaced
14:80975da52420 16:43d09473c595
    19 #include <stdlib.h>
    19 #include <stdlib.h>
    20 #include <assert.h>
    20 #include <assert.h>
    21 #include <string.h>
    21 #include <string.h>
    22 
    22 
    23 #include "xaglobals.h"
    23 #include "xaglobals.h"
       
    24 #include "xaadptbasectx.h"
    24 #include "xaaudioencodercapabilitiesitf.h"
    25 #include "xaaudioencodercapabilitiesitf.h"
    25 #ifdef _GSTREAMER_BACKEND_  
    26 #include "xacapabilitiesmgr.h"
    26 #include "XAStaticCapsAdaptation.h"
    27 
    27 #endif
       
    28 /* XAAudioEncoderCapabilitiesItfImpl* GetImpl
    28 /* XAAudioEncoderCapabilitiesItfImpl* GetImpl
    29  * Description: Validate interface pointer and cast it to implementation pointer.
    29  * Description: Validate interface pointer and cast it to implementation pointer.
    30  */
    30  */
    31 static XAAudioEncoderCapabilitiesItfImpl* GetImpl(XAAudioEncoderCapabilitiesItf self)
    31 static XAAudioEncoderCapabilitiesItfImpl* GetImpl(XAAudioEncoderCapabilitiesItf self)
    32 {
    32 {
    71                 DEBUG_ERR("XA_RESULT_BUFFER_INSUFFICIENT");
    71                 DEBUG_ERR("XA_RESULT_BUFFER_INSUFFICIENT");
    72                 res = XA_RESULT_BUFFER_INSUFFICIENT;
    72                 res = XA_RESULT_BUFFER_INSUFFICIENT;
    73             }
    73             }
    74             else
    74             else
    75             {
    75             {
    76 #ifdef _GSTREAMER_BACKEND_  
    76   
    77                 XAuint32 i = 0;
    77                 XAuint32 i = 0;
    78                 XAStaticCapsData temp;
    78                 XACapabilities temp;
    79                 for( i=0; i<impl->numCodecs; i++ )
    79                 for( i=0; i<impl->numCodecs; i++ )
    80                 {
    80                 {
    81                     /* query encoder id from adaptation using index value */
    81                     /* query encoder id from adaptation using index value */
    82                     XAStaticCapsAdapt_GetCapsByIdx(XACAP_ENCODER|XACAP_AUDIO, i, &temp);
    82                     XACapabilitiesMgr_GetCapsByIdx(impl->capslist, (XACapsType)(XACAP_ENCODER|XACAP_AUDIO), i, &temp);
    83                     pEncoderIds[i] = temp.xaid;
    83                     pEncoderIds[i] = temp.xaid;
    84                 }
    84                 }
    85 #endif
    85 
    86             pEncoderIds[0] = XA_AUDIOCODEC_AMR;
    86             pEncoderIds[0] = XA_AUDIOCODEC_AMR;
    87             pEncoderIds[1] = XA_AUDIOCODEC_AAC;
    87             pEncoderIds[1] = XA_AUDIOCODEC_AAC;
    88             pEncoderIds[2] = XA_AUDIOCODEC_PCM;
    88             pEncoderIds[2] = XA_AUDIOCODEC_PCM;
    89             }
    89             }
    90         }
    90         }
   106                             XAAudioCodecDescriptor *pDescriptor)
   106                             XAAudioCodecDescriptor *pDescriptor)
   107 {
   107 {
   108     XAAudioEncoderCapabilitiesItfImpl* impl = GetImpl(self);
   108     XAAudioEncoderCapabilitiesItfImpl* impl = GetImpl(self);
   109     XAresult res = XA_RESULT_SUCCESS;
   109     XAresult res = XA_RESULT_SUCCESS;
   110 
   110 
   111 #ifdef _GSTREAMER_BACKEND_  
   111   
   112     XAStaticCapsData temp;
   112     XACapabilities temp;
   113 #endif
   113 
   114     DEBUG_API("->XAAudioEncoderCapabilitiesItfImpl_GetAudioEncoderCapabilities");
   114     DEBUG_API("->XAAudioEncoderCapabilitiesItfImpl_GetAudioEncoderCapabilities");
   115 
   115 
   116     /*if( !impl || !pIndex || !pDescriptor )*/
   116     /*if( !impl || !pIndex || !pDescriptor )*/
   117     /*Removing the pDescriptor because the client can pass
   117     /*Removing the pDescriptor because the client can pass
   118      * it as NULL to query the pIndex for number of Codec/Mode
   118      * it as NULL to query the pIndex for number of Codec/Mode
   234             }
   234             }
   235             break;
   235             break;
   236         }
   236         }
   237     
   237     
   238     
   238     
   239 #ifdef _GSTREAMER_BACKEND_  
   239   
   240     res = XAStaticCapsAdapt_GetCapsById(XACAP_ENCODER|XACAP_AUDIO, encoderId, &temp);
   240     res = XACapabilitiesMgr_GetCapsById(impl->capslist, (XACapsType)(XACAP_ENCODER|XACAP_AUDIO), encoderId, &temp);
   241    	if( res == XA_RESULT_SUCCESS )
   241    	if( res == XA_RESULT_SUCCESS )
   242     {
   242     {
   243    		/* map applicable values to XAAudioCodecCapabilities */
   243       XAAudioCodecDescriptor* desc = ((XAAudioCodecDescriptor*)(temp.pEntry));
   244       pDescriptor->maxChannels=temp.maxCh;
   244       /* map applicable values to XAAudioCodecCapabilities */
   245       pDescriptor->minSampleRate=temp.minSR*1000; /* milliHz */
   245       pDescriptor->maxChannels = desc->maxChannels;
   246       if (temp.maxSR < (0xFFFFFFFF / 1000))
   246       pDescriptor->minSampleRate= desc->minSampleRate*1000; /* milliHz */
   247       {
   247       if (desc->maxSampleRate < (0xFFFFFFFF / 1000))
   248       	pDescriptor->maxSampleRate = temp.maxSR*1000;
   248       {
       
   249           pDescriptor->maxSampleRate = desc->maxSampleRate*1000;
   249       }
   250       }
   250       else
   251       else
   251       {
   252       {
   252     		pDescriptor->maxSampleRate = 0xFFFFFFFF;
   253           pDescriptor->maxSampleRate = 0xFFFFFFFF;
   253    		}
   254       }
   254       pDescriptor->minBitsPerSample=temp.minBPS;
   255       pDescriptor->minBitsPerSample=desc->minBitsPerSample;
   255       pDescriptor->maxBitsPerSample=temp.maxBPS;
   256       pDescriptor->maxBitsPerSample=desc->maxBitsPerSample;
   256       pDescriptor->isFreqRangeContinuous=XA_BOOLEAN_TRUE;
   257       pDescriptor->isFreqRangeContinuous=XA_BOOLEAN_TRUE;
   257       pDescriptor->minBitRate=temp.minBR;
   258       pDescriptor->minBitRate=desc->minBitRate;
   258     	pDescriptor->maxBitRate=temp.maxBR;
   259       pDescriptor->maxBitRate=desc->maxBitRate;
   259       pDescriptor->numBitratesSupported = temp.numBitrates;
   260       pDescriptor->numBitratesSupported = desc->numBitratesSupported;
   260       pDescriptor->isBitrateRangeContinuous=XA_BOOLEAN_TRUE;
   261       pDescriptor->isBitrateRangeContinuous=XA_BOOLEAN_TRUE;
       
   262       if (temp.xaid == XA_AUDIOCODEC_PCM )
       
   263       {
       
   264           pDescriptor->profileSetting=XA_AUDIOPROFILE_PCM;
       
   265           pDescriptor->modeSetting=0; /* no chanmode for pcm defined */
       
   266       }
       
   267       else if (temp.xaid == XA_ADAPTID_VORBIS) /* for ogg */
       
   268       {
       
   269           if (desc->maxChannels == 1)
       
   270           {
       
   271               pDescriptor->profileSetting=XA_AUDIOPROFILE_MPEG1_L3;
       
   272               pDescriptor->modeSetting=XA_AUDIOCHANMODE_MP3_MONO;
       
   273           }
       
   274           else
       
   275           {
       
   276               pDescriptor->profileSetting=XA_AUDIOPROFILE_MPEG2_L3;
       
   277               pDescriptor->modeSetting=XA_AUDIOCHANMODE_MP3_STEREO;
       
   278           }
       
   279       }
       
   280       else
       
   281       {
       
   282           /* do nothing */
       
   283       }
   261       
   284       
   262       if (temp.xaid == XA_AUDIOCODEC_PCM )
   285     }
   263       {
   286    	
   264      		pDescriptor->profileSetting=XA_AUDIOPROFILE_PCM;
       
   265         pDescriptor->modeSetting=0;
       
   266       }
       
   267     	else if (temp.xaid == XA_ADAPTID_VORBIS) /* for ogg */
       
   268       {
       
   269       	if (temp.maxCh == 1)
       
   270         {
       
   271         	pDescriptor->profileSetting=XA_AUDIOPROFILE_MPEG1_L3;
       
   272           pDescriptor->modeSetting=XA_AUDIOCHANMODE_MP3_MONO;
       
   273        	}
       
   274         else
       
   275         {
       
   276        		pDescriptor->profileSetting=XA_AUDIOPROFILE_MPEG2_L3;
       
   277           pDescriptor->modeSetting=XA_AUDIOCHANMODE_MP3_STEREO;
       
   278         }
       
   279       }
       
   280       else
       
   281       {
       
   282      		/* Do nothing */
       
   283       }
       
   284     }
       
   285 #endif   	
       
   286     DEBUG_API("<-XAAudioEncoderCapabilitiesItfImpl_GetAudioEncoderCapabilities");
   287     DEBUG_API("<-XAAudioEncoderCapabilitiesItfImpl_GetAudioEncoderCapabilities");
   287     return res;
   288     return res;
   288 }
   289 }
   289 
   290 
   290 
   291 
   293  *****************************************************************************/
   294  *****************************************************************************/
   294 
   295 
   295 /* XAAudioEncoderCapabilitiesItfImpl_Create
   296 /* XAAudioEncoderCapabilitiesItfImpl_Create
   296  * Description: Allocate and initialize XAAudioEncoderCapabilitiesItfImpl
   297  * Description: Allocate and initialize XAAudioEncoderCapabilitiesItfImpl
   297  */
   298  */
   298 XAAudioEncoderCapabilitiesItfImpl* XAAudioEncoderCapabilitiesItfImpl_Create()
   299 XAAudioEncoderCapabilitiesItfImpl* XAAudioEncoderCapabilitiesItfImpl_Create(XACapabilities* caps)
   299 {
   300 {
   300     XAAudioEncoderCapabilitiesItfImpl* self = (XAAudioEncoderCapabilitiesItfImpl*)
   301     XAAudioEncoderCapabilitiesItfImpl* self = (XAAudioEncoderCapabilitiesItfImpl*)
   301         calloc(1,sizeof(XAAudioEncoderCapabilitiesItfImpl));
   302         calloc(1,sizeof(XAAudioEncoderCapabilitiesItfImpl));
   302 
   303 
   303     DEBUG_API("->XAAudioEncoderCapabilitiesItfImpl_Create");
   304     DEBUG_API("->XAAudioEncoderCapabilitiesItfImpl_Create");
   307         /* init itf default implementation */
   308         /* init itf default implementation */
   308         self->itf.GetAudioEncoders =
   309         self->itf.GetAudioEncoders =
   309             XAAudioEncoderCapabilitiesItfImpl_GetAudioEncoders;
   310             XAAudioEncoderCapabilitiesItfImpl_GetAudioEncoders;
   310         self->itf.GetAudioEncoderCapabilities =
   311         self->itf.GetAudioEncoderCapabilities =
   311             XAAudioEncoderCapabilitiesItfImpl_GetAudioEncoderCapabilities;
   312             XAAudioEncoderCapabilitiesItfImpl_GetAudioEncoderCapabilities;
   312 
   313         self->capslist = caps;
   313 #ifdef _GSTREAMER_BACKEND_  
   314   
   314         /* init variables */
   315         /* init variables */
   315         assert( XAStaticCapsAdapt_GetCapsCount( XACAP_ENCODER|XACAP_AUDIO,
   316         assert( XACapabilitiesMgr_GetCapsCount( caps, (XACapsType)((XACapsType)(XACAP_ENCODER|XACAP_AUDIO)),
   316                                   &(self->numCodecs) ) == XA_RESULT_SUCCESS );
   317                                   &(self->numCodecs) ) == XA_RESULT_SUCCESS );
   317 #endif
   318 
   318         /*self->mmfEngine = (void*)mmf_capability_engine_init();*/
   319         /*self->mmfEngine = (void*)mmf_capability_engine_init();*/
   319         self->numCodecs = 3;
   320         self->numCodecs = 3;
   320         self->self = self;
   321         self->self = self;
   321         
   322         
   322     }
   323     }