• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 /**
17  *************************************************************************
18  * @file   M4MCS_API.c
19  * @brief  MCS implementation (Video Compressor Service)
20  * @note   This file implements the API and the processing of the MCS
21  *************************************************************************
22  **/
23 
24 /****************/
25 /*** Includes ***/
26 /****************/
27 
28 /**
29  * OSAL headers */
30 #include "M4OSA_Memory.h"   /**< OSAL memory management */
31 #include "M4OSA_Debug.h"    /**< OSAL debug management */
32 
33 /* Our headers */
34 #include "M4MCS_API.h"
35 #include "M4MCS_ErrorCodes.h"
36 #include "M4MCS_InternalTypes.h"
37 #include "M4MCS_InternalConfig.h"
38 #include "M4MCS_InternalFunctions.h"
39 
40 /* Common headers (for aac) */
41 #include "M4_Common.h"
42 
43 #ifdef M4VSS_ENABLE_EXTERNAL_DECODERS
44 #include "M4VD_EXTERNAL_Interface.h"
45 #endif /* M4VSS_ENABLE_EXTERNAL_DECODERS */
46 
47 
48 
49 /**
50  ******************************************************************************
51  * M4OSA_ERR M4MCS_intCheckAudioEffects(M4MCS_InternalContext* pContext)
52  * @brief    Check if an effect has to be applied currently
53  * @note    It is called by the stepEncoding function
54  * @param    pContext    (IN) MCS internal context
55  * @return    M4NO_ERROR:    No error
56  ******************************************************************************
57  */
M4MCS_intCheckAudioEffects(M4MCS_InternalContext * pC)58 M4OSA_ERR M4MCS_intCheckAudioEffects(M4MCS_InternalContext* pC)
59 {
60     M4OSA_Int8 *pActiveEffectNumber = &(pC->pActiveEffectNumber);
61 
62     *pActiveEffectNumber = -1;
63 
64     if(pC->ReaderAudioAU.m_CTS > pC->uiBeginCutTime
65     && pC->ReaderAudioAU.m_CTS < pC->uiEndCutTime)
66     {
67         M4OSA_UInt32 outputRelatedTime = 0;
68         M4OSA_UInt8 uiEffectIndex = 0;
69         outputRelatedTime =
70         (M4OSA_UInt32)(pC->ReaderAudioAU.m_CTS  - pC->uiBeginCutTime + 0.5);
71 
72         for(uiEffectIndex=0; uiEffectIndex<pC->nbEffects; uiEffectIndex++)
73         {
74             if ((outputRelatedTime >=
75                 (M4OSA_UInt32)(pC->pEffects[uiEffectIndex].uiStartTime)) &&
76                 (outputRelatedTime <
77                 (M4OSA_UInt32)(pC->pEffects[uiEffectIndex].uiStartTime +\
78                 pC->pEffects[uiEffectIndex].uiDuration)))
79             {
80                 *pActiveEffectNumber = uiEffectIndex;
81                 uiEffectIndex = pC->nbEffects;
82             }
83         }
84     }
85 
86     return M4NO_ERROR;
87 }
88 
89 
90 /**
91  ******************************************************************************
92  * M4OSA_ERR M4MCS_editAudioEffectFct_FadeIn()
93  * @brief    Apply audio effect FadeIn to pPCMdata
94  * @param   pC            (IN/OUT) Internal edit context
95  * @param    pPCMdata    (IN/OUT) Input and Output PCM audio data
96  * @param    uiPCMsize    (IN)     Size of pPCMdata
97  * @param    pProgress    (IN)     Effect progress
98  * @return    M4NO_ERROR:             No error
99  ******************************************************************************
100  */
M4MCS_editAudioEffectFct_FadeIn(M4OSA_Void * pFunctionContext,M4OSA_Int16 * pPCMdata,M4OSA_UInt32 uiPCMsize,M4MCS_ExternalProgress * pProgress)101 M4OSA_ERR M4MCS_editAudioEffectFct_FadeIn(  M4OSA_Void *pFunctionContext,
102                                             M4OSA_Int16 *pPCMdata,
103                                             M4OSA_UInt32 uiPCMsize,
104                                             M4MCS_ExternalProgress *pProgress)
105 {
106     /* we will cast each Int16 sample into this Int32 variable */
107     M4OSA_Int32 i32sample;
108 
109     /**
110      * Sanity check */
111     if(pProgress->uiProgress > 1000)
112     {
113         pProgress->uiProgress = 1000;
114     }
115 
116     /**
117      * From buffer size (bytes) to number of sample (int16): divide by two */
118     uiPCMsize >>= 1;
119 
120     /**
121      * Loop on samples */
122     while (uiPCMsize-->0) /**< decrementing to optimize */
123     {
124         i32sample = *pPCMdata;
125         i32sample *= pProgress->uiProgress;
126         i32sample /= 1000;
127         *pPCMdata++ = (M4OSA_Int16)i32sample;
128     }
129 
130     /**
131      *    Return */
132     M4OSA_TRACE3_0("M4MCS_editAudioEffectFct_FadeIn: returning M4NO_ERROR");
133     return M4NO_ERROR;
134 }
135 
136 
137 /**
138  ******************************************************************************
139  * M4OSA_ERR M4MCS_editAudioEffectFct_FadeOut()
140  * @brief    Apply audio effect FadeIn to pPCMdata
141  * @param    pC            (IN/OUT) Internal edit context
142  * @param    pPCMdata    (IN/OUT) Input and Output PCM audio data
143  * @param    uiPCMsize    (IN)     Size of pPCMdata
144  * @param    pProgress    (IN)     Effect progress
145  * @return   M4NO_ERROR:             No error
146  ******************************************************************************
147  */
M4MCS_editAudioEffectFct_FadeOut(M4OSA_Void * pFunctionContext,M4OSA_Int16 * pPCMdata,M4OSA_UInt32 uiPCMsize,M4MCS_ExternalProgress * pProgress)148 M4OSA_ERR M4MCS_editAudioEffectFct_FadeOut( M4OSA_Void *pFunctionContext,
149                                             M4OSA_Int16 *pPCMdata,
150                                             M4OSA_UInt32 uiPCMsize,
151                                             M4MCS_ExternalProgress *pProgress)
152 {
153     /* we will cast each Int16 sample into this Int32 variable */
154     M4OSA_Int32 i32sample;
155 
156     /**
157      * Sanity check */
158     if(pProgress->uiProgress > 1000)
159     {
160         pProgress->uiProgress = 1000;
161     }
162     pProgress->uiProgress = 1000 - pProgress->uiProgress;
163 
164     /**
165      * From buffer size (bytes) to number of sample (int16): divide by two */
166     uiPCMsize >>= 1;
167 
168     /**
169      * Loop on samples */
170     while (uiPCMsize-->0) /**< decrementing to optimize */
171     {
172         i32sample = *pPCMdata;
173         i32sample *= pProgress->uiProgress;
174         i32sample /= 1000;
175         *pPCMdata++ = (M4OSA_Int16)i32sample;
176     }
177 
178     /**
179      *    Return */
180     M4OSA_TRACE3_0("M4MCS_editAudioEffectFct_FadeOut: returning M4NO_ERROR");
181     return M4NO_ERROR;
182 }
183 
184