bdf24a5df33623e684303a557d202d7b287e3a71
[platform/core/api/mediacodec.git] / src / media_codec_internal.c
1 #include <dlog.h>
2 #include <media_codec.h>
3 #include <media_codec_port.h>
4 #include <media_codec_ini.h>
5 #include <media_codec_spec_emul.h>
6 #include <media_codec_internal.h>
7
8 mc_codec_spec_t spec_emul[MEDIA_CODEC_MAX_CODEC_TYPE];
9 mc_ini_t mc_ini;
10
11 int __convert_error_code_internal(int code, char *func_name)
12 {
13         int ret = MEDIACODEC_ERROR_INVALID_OPERATION;
14         char *msg = "MEDIACOODEC_INVALID_OPERATION";
15
16         switch (code) {
17         case MC_ERROR_NONE:
18                 ret = MEDIACODEC_ERROR_NONE;
19                 msg = "MEDIACODEC_ERROR_NONE";
20                 break;
21         case MC_PARAM_ERROR:
22         case MC_INVALID_ARG:
23                 ret = MEDIACODEC_ERROR_INVALID_PARAMETER;
24                 msg = "MEDIACODEC_ERROR_INVALID_PARAMETER";
25                 break;
26         case MC_PERMISSION_DENIED:
27                 ret = MEDIACODEC_ERROR_PERMISSION_DENIED;
28                 msg = "MEDIACODEC_ERROR_PERMISSION_DENIED";
29                 break;
30         case MC_INVALID_STATUS:
31                 ret = MEDIACODEC_ERROR_INVALID_STATE;
32                 msg = "MEDIACODEC_ERROR_INVALID_STATE";
33                 break;
34         case MC_NOT_SUPPORTED:
35                 ret = MEDIACODEC_ERROR_NOT_SUPPORTED_ON_DEVICE;
36                 msg = "MEDIACODEC_ERROR_NOT_SUPPORTED_ON_DEVICE";
37                 break;
38         case MC_ERROR:
39         case MC_INTERNAL_ERROR:
40         case MC_HW_ERROR:
41                 ret = MEDIACODEC_ERROR_INVALID_OPERATION;
42                 msg = "MEDIACODEC_ERROR_INVALID_OPERATION";
43                 break;
44         case MC_INVALID_STREAM:
45                 ret = MEDIACODEC_ERROR_INVALID_STREAM;
46                 msg = "MEDIACODEC_ERROR_INVALID_STREAM";
47                 break;
48         case MC_CODEC_NOT_FOUND:
49                 ret = MEDIACODEC_ERROR_CODEC_NOT_FOUND;
50                 msg = "MEDIACODEC_ERROR_CODEC_NOT_FOUND";
51                 break;
52         case MC_ERROR_DECODE:
53                 ret = MEDIACODEC_ERROR_DECODE;
54                 msg = "MEDIACODEC_ERROR_DECODE";
55                 break;
56         case MC_INVALID_IN_BUF:
57                 ret = MEDIACODEC_ERROR_INVALID_INBUFFER;
58                 msg = "MEDIACODEC_ERROR_INVALID_INBUFFER";
59                 break;
60         case MC_INVALID_OUT_BUF:
61                 ret = MEDIACODEC_ERROR_INVALID_OUTBUFFER;
62                 msg = "MEDIACODEC_ERROR_INVALID_OUTBUFFER";
63                 break;
64         case MC_NOT_INITIALIZED:
65                 ret = MEDIACODEC_ERROR_NOT_INITIALIZED;
66                 msg = "MEDIACODEC_ERROR_NOT_INITIALIZED";
67                 break;
68         case MC_OUTPUT_BUFFER_EMPTY:
69         case MC_OUTPUT_BUFFER_OVERFLOW:
70                 ret = MEDIACODEC_ERROR_BUFFER_NOT_AVAILABLE;
71                 msg = "MEDIACODEC_ERROR_BUFFER_NOT_AVAILABLE";
72                 break;
73         case MC_OUT_OF_MEMORY:
74                 ret = MEDIACODEC_ERROR_OUT_OF_MEMORY;
75                 msg = "MEDIACODEC_ERROR_OUT_OF_MEMORY";
76                 break;
77         default:
78                 ret = MEDIACODEC_ERROR_INTERNAL;
79                 msg = "MEDIACODEC_ERROR_INTERNAL";
80                 break;
81         }
82         LOGD("[%s] %s(0x%08x) : core fw error(0x%x)", func_name, msg, ret, code);
83         return ret;
84 }
85
86 int mediacodec_foreach_supported_codec_static(mediacodec_supported_codec_cb callback, void *user_data)
87 {
88         int ret;
89
90         if (!mc_ini.loaded) {
91                 ret = mc_ini_load(&mc_ini);
92                 if (ret != MC_ERROR_NONE)
93                         goto ERROR;
94
95                 mc_ini.loaded = TRUE;
96         }
97
98         _mc_create_codec_map_from_ini_static(&mc_ini, spec_emul);
99
100         LOGD("set supported_codec_cb(%p)", callback);
101         ret = _mediacodec_foreach_supported_codec(callback, user_data);
102
103         if (ret != MEDIACODEC_ERROR_NONE)
104                 return __convert_error_code_internal(ret, (char *)__FUNCTION__);
105         else
106                 return MEDIACODEC_ERROR_NONE;
107
108 ERROR:
109         return MEDIACODEC_ERROR_INVALID_PARAMETER;
110 }