2 #include <media_codec.h>
3 #include <media_codec_port.h>
4 #include <media_codec_port_gst.h>
5 #include <media_codec_ini.h>
6 #include <media_codec_spec_emul.h>
7 #include <media_codec_internal.h>
9 mc_codec_spec_t spec_emul[MEDIA_CODEC_MAX_CODEC_TYPE];
12 int __convert_error_code_internal(int code, char *func_name)
14 int ret = MEDIACODEC_ERROR_INVALID_OPERATION;
15 char *msg = "MEDIACOODEC_INVALID_OPERATION";
19 ret = MEDIACODEC_ERROR_NONE;
20 msg = "MEDIACODEC_ERROR_NONE";
24 ret = MEDIACODEC_ERROR_INVALID_PARAMETER;
25 msg = "MEDIACODEC_ERROR_INVALID_PARAMETER";
27 case MC_PERMISSION_DENIED:
28 ret = MEDIACODEC_ERROR_PERMISSION_DENIED;
29 msg = "MEDIACODEC_ERROR_PERMISSION_DENIED";
31 case MC_INVALID_STATUS:
32 ret = MEDIACODEC_ERROR_INVALID_STATE;
33 msg = "MEDIACODEC_ERROR_INVALID_STATE";
35 case MC_NOT_SUPPORTED:
36 ret = MEDIACODEC_ERROR_NOT_SUPPORTED_ON_DEVICE;
37 msg = "MEDIACODEC_ERROR_NOT_SUPPORTED_ON_DEVICE";
40 case MC_INTERNAL_ERROR:
42 ret = MEDIACODEC_ERROR_INVALID_OPERATION;
43 msg = "MEDIACODEC_ERROR_INVALID_OPERATION";
45 case MC_INVALID_STREAM:
46 ret = MEDIACODEC_ERROR_INVALID_STREAM;
47 msg = "MEDIACODEC_ERROR_INVALID_STREAM";
49 case MC_CODEC_NOT_FOUND:
50 ret = MEDIACODEC_ERROR_CODEC_NOT_FOUND;
51 msg = "MEDIACODEC_ERROR_CODEC_NOT_FOUND";
54 ret = MEDIACODEC_ERROR_DECODE;
55 msg = "MEDIACODEC_ERROR_DECODE";
57 case MC_INVALID_IN_BUF:
58 ret = MEDIACODEC_ERROR_INVALID_INBUFFER;
59 msg = "MEDIACODEC_ERROR_INVALID_INBUFFER";
61 case MC_INVALID_OUT_BUF:
62 ret = MEDIACODEC_ERROR_INVALID_OUTBUFFER;
63 msg = "MEDIACODEC_ERROR_INVALID_OUTBUFFER";
65 case MC_NOT_INITIALIZED:
66 ret = MEDIACODEC_ERROR_NOT_INITIALIZED;
67 msg = "MEDIACODEC_ERROR_NOT_INITIALIZED";
69 case MC_OUTPUT_BUFFER_EMPTY:
70 case MC_OUTPUT_BUFFER_OVERFLOW:
71 ret = MEDIACODEC_ERROR_BUFFER_NOT_AVAILABLE;
72 msg = "MEDIACODEC_ERROR_BUFFER_NOT_AVAILABLE";
74 case MC_OUT_OF_MEMORY:
75 ret = MEDIACODEC_ERROR_OUT_OF_MEMORY;
76 msg = "MEDIACODEC_ERROR_OUT_OF_MEMORY";
79 ret = MEDIACODEC_ERROR_INTERNAL;
80 msg = "MEDIACODEC_ERROR_INTERNAL";
83 LOGD("[%s] %s(0x%08x) : core fw error(0x%x)", func_name, msg, ret, code);
87 int mediacodec_foreach_supported_codec_static(mediacodec_supported_codec_cb callback, void *user_data)
92 ret = mc_ini_load(&mc_ini);
93 if (ret != MC_ERROR_NONE)
99 _mc_create_codec_map_from_ini_static(&mc_ini, spec_emul);
101 LOGD("set supported_codec_cb(%p)", callback);
102 ret = _mediacodec_foreach_supported_codec(callback, user_data);
104 if (ret != MEDIACODEC_ERROR_NONE)
105 return __convert_error_code_internal(ret, (char *)__FUNCTION__);
107 return MEDIACODEC_ERROR_NONE;
110 return MEDIACODEC_ERROR_INVALID_PARAMETER;
113 int mediacodec_enable_extra_video_converter(mediacodec_h mediacodec, gboolean enable, const char *converter_name, int crop_x, int crop_y, int crop_w, int crop_h)
115 MEDIACODEC_INSTANCE_CHECK(mediacodec);
116 mediacodec_s *handle = (mediacodec_s *)mediacodec;
117 MEDIACODEC_STATE_CHECK(handle, MEDIACODEC_STATE_IDLE);
119 int ret = mc_enable_extra_video_converter(handle->mc_handle, enable, converter_name, crop_x, crop_y, crop_w, crop_h);
121 if (ret != MEDIACODEC_ERROR_NONE)
122 return __convert_error_code_internal(ret, (char *)__FUNCTION__);
124 return MEDIACODEC_ERROR_NONE;