summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/codecs/amrwbenc/src/mem_align.c
diff options
context:
space:
mode:
Diffstat (limited to 'media/libstagefright/codecs/amrwbenc/src/mem_align.c')
-rw-r--r--media/libstagefright/codecs/amrwbenc/src/mem_align.c107
1 files changed, 107 insertions, 0 deletions
diff --git a/media/libstagefright/codecs/amrwbenc/src/mem_align.c b/media/libstagefright/codecs/amrwbenc/src/mem_align.c
new file mode 100644
index 0000000..e58915a
--- /dev/null
+++ b/media/libstagefright/codecs/amrwbenc/src/mem_align.c
@@ -0,0 +1,107 @@
+/*
+ ** Copyright 2003-2010, VisualOn, Inc.
+ **
+ ** Licensed under the Apache License, Version 2.0 (the "License");
+ ** you may not use this file except in compliance with the License.
+ ** You may obtain a copy of the License at
+ **
+ ** http://www.apache.org/licenses/LICENSE-2.0
+ **
+ ** Unless required by applicable law or agreed to in writing, software
+ ** distributed under the License is distributed on an "AS IS" BASIS,
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ** See the License for the specific language governing permissions and
+ ** limitations under the License.
+ */
+
+/*******************************************************************************
+ File: mem_align.c
+
+ Content: Memory alloc alignments functions
+
+*******************************************************************************/
+
+
+#include "mem_align.h"
+
+/*****************************************************************************
+*
+* function name: mem_malloc
+* description: malloc the alignments memory
+* returns: the point of the memory
+*
+**********************************************************************************/
+void *
+mem_malloc(VO_MEM_OPERATOR *pMemop, unsigned int size, unsigned char alignment, unsigned int CodecID)
+{
+ int ret;
+ unsigned char *mem_ptr;
+ VO_MEM_INFO MemInfo;
+
+ if (!alignment) {
+
+ MemInfo.Flag = 0;
+ MemInfo.Size = size + 1;
+ ret = pMemop->Alloc(CodecID, &MemInfo);
+ if(ret != 0)
+ return 0;
+ mem_ptr = (unsigned char *)MemInfo.VBuffer;
+
+ pMemop->Set(CodecID, mem_ptr, 0, size + 1);
+
+ *mem_ptr = (unsigned char)1;
+
+ return ((void *)(mem_ptr+1));
+ } else {
+ unsigned char *tmp;
+
+ MemInfo.Flag = 0;
+ MemInfo.Size = size + alignment;
+ ret = pMemop->Alloc(CodecID, &MemInfo);
+ if(ret != 0)
+ return 0;
+
+ tmp = (unsigned char *)MemInfo.VBuffer;
+
+ pMemop->Set(CodecID, tmp, 0, size + alignment);
+
+ mem_ptr =
+ (unsigned char *) ((unsigned int) (tmp + alignment - 1) &
+ (~((unsigned int) (alignment - 1))));
+
+ if (mem_ptr == tmp)
+ mem_ptr += alignment;
+
+ *(mem_ptr - 1) = (unsigned char) (mem_ptr - tmp);
+
+ return ((void *)mem_ptr);
+ }
+
+ return(0);
+}
+
+
+/*****************************************************************************
+*
+* function name: mem_free
+* description: free the memory
+*
+*******************************************************************************/
+void
+mem_free(VO_MEM_OPERATOR *pMemop, void *mem_ptr, unsigned int CodecID)
+{
+
+ unsigned char *ptr;
+
+ if (mem_ptr == 0)
+ return;
+
+ ptr = mem_ptr;
+
+ ptr -= *(ptr - 1);
+
+ pMemop->Free(CodecID, ptr);
+}
+
+
+