tizen 2.4 release
[framework/api/mediacodec.git] / src / media_codec_util.c
1 #include <media_codec_util.h>
2
3 void *mc_aligned_malloc(int size, int alignment)
4 {
5     unsigned char *pMem;
6     unsigned char *tmp;
7
8     if ((tmp = (unsigned char *)malloc(size + alignment)) != NULL) {
9         pMem = (unsigned char *)((unsigned int)(tmp + alignment - 1) & (~(unsigned int)(alignment - 1)));
10
11         if (pMem == tmp)
12             pMem += alignment;
13
14         *(pMem - 1) = (unsigned int)(pMem - tmp);
15
16         return ((void *) pMem);
17     }
18     return NULL;
19 }
20
21 void mc_aligned_free(void *mem)
22 {
23     unsigned char *ptr;
24
25     if (mem == NULL)
26         return;
27
28     ptr = mem;
29     ptr -= *(ptr-1);
30
31     free(ptr);
32 }
33
34 mc_sem_t *mc_sem_new()
35 {
36     mc_sem_t *sem;
37     sem = g_new(mc_sem_t, 1);
38     g_cond_init(&sem->cond);
39     g_mutex_init(&sem->mutex);
40     sem->counter = 0;
41
42     return sem;
43 }
44
45 void mc_sem_free(mc_sem_t *sem)
46 {
47     g_cond_clear(&sem->cond);
48     g_mutex_clear(&sem->mutex);
49     g_free(sem);
50 }
51
52 void mc_sem_down(mc_sem_t *sem)
53 {
54     g_mutex_lock(&sem->mutex);
55
56     while (sem->counter == 0)
57         g_cond_wait(&sem->cond, &sem->mutex);
58     sem->counter--;
59
60     g_mutex_unlock(&sem->mutex);
61 }
62
63 void mc_sem_up(mc_sem_t *sem)
64 {
65     g_mutex_lock(&sem->mutex);
66
67     sem->counter++;
68     g_cond_signal(&sem->cond);
69
70     g_mutex_unlock(&sem->mutex);
71
72 }
73
74 void mc_hex_dump(char *desc, void *addr, int len)
75 {
76     int i;
77     unsigned char buff[17];
78     unsigned char *pc = (unsigned char *)addr;
79
80     if (desc != NULL)
81         printf("%s:\n", desc);
82
83     for (i = 0; i < len; i++) {
84
85         if ((i % 16) == 0) {
86             if (i != 0)
87                 printf("  %s\n", buff);
88
89             printf("  %04x ", i);
90         }
91
92         printf(" %02x", pc[i]);
93
94         if ((pc[i] < 0x20) || (pc[i] > 0x7e))
95             buff[i % 16] = '.';
96         else
97             buff[i % 16] = pc[i];
98         buff[(i % 16) + 1] = '\0';
99     }
100
101     while ((i % 16) != 0) {
102         printf("   ");
103         i++;
104     }
105     printf("  %s\n", buff);
106 }