[MediaCodec] Add exception handling code (#211)
[platform/core/csapi/tizenfx.git] / src / Tizen.Multimedia.MediaCodec / Interop / Interop.MediaCodec.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
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 using System;
18 using System.Runtime.InteropServices;
19 using Tizen.Multimedia.MediaCodec;
20
21 internal static partial class Interop
22 {
23     internal static class MediaCodec
24     {
25         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
26         internal delegate void InputBufferUsedCallback(IntPtr mediaPacket, IntPtr arg);
27
28         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
29         internal delegate void OutputBufferAvailableCallback(IntPtr mediaPacket, IntPtr arg);
30
31         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
32         internal delegate void ErrorCallback(int errorCode, IntPtr arg);
33
34         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
35         internal delegate void EosCallback(IntPtr arg);
36
37         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
38         internal delegate void BufferStatusCallback(int statusCode, IntPtr arg);
39
40         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
41         internal delegate bool SupportedCodecCallback(int codecType, IntPtr arg);
42
43         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_create")]
44         internal static extern MediaCodecErrorCode Create(out IntPtr handle);
45
46         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_destroy")]
47         internal static extern MediaCodecErrorCode Destroy(IntPtr handle);
48
49         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_set_codec")]
50         internal static extern MediaCodecErrorCode Configure(IntPtr handle, int codecType, int flags);
51
52         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_set_vdec_info")]
53         internal static extern MediaCodecErrorCode SetVideoDecoderInfo(IntPtr handle, int width, int height);
54
55         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_set_venc_info")]
56         internal static extern MediaCodecErrorCode SetVideoEncoderInfo(IntPtr handle, int width, int height,
57             int fps, int targetBits);
58
59         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_set_adec_info")]
60         internal static extern MediaCodecErrorCode SetAudioDecoderInfo(IntPtr handle, int sampleRate, int channel,
61             int bit);
62
63         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_set_aenc_info")]
64         internal static extern MediaCodecErrorCode SetAudioEncoderInfo(IntPtr handle, int sampleRate, int channel,
65             int bit, int bitRate);
66
67         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_prepare")]
68         internal static extern MediaCodecErrorCode Prepare(IntPtr handle);
69
70         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_unprepare")]
71         internal static extern MediaCodecErrorCode Unprepare(IntPtr handle);
72
73         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_process_input")]
74         internal static extern MediaCodecErrorCode Process(IntPtr handle, IntPtr mediaPacket, ulong timeoutInUs);
75
76         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_get_output")]
77         internal static extern MediaCodecErrorCode GetOutput(IntPtr handle, out IntPtr packet, ulong timeoutInUs);
78
79         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_flush_buffers")]
80         internal static extern MediaCodecErrorCode FlushBuffers(IntPtr handle);
81
82         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_set_input_buffer_used_cb")]
83         internal static extern MediaCodecErrorCode SetInputBufferUsedCb(IntPtr handle,
84             InputBufferUsedCallback cb, IntPtr arg = default(IntPtr));
85
86         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_unset_input_buffer_used_cb")]
87         internal static extern MediaCodecErrorCode UnsetInputBufferUsedCb(IntPtr handle);
88
89         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_set_output_buffer_available_cb")]
90         internal static extern MediaCodecErrorCode SetOutputBufferAvailableCb(IntPtr handle,
91             OutputBufferAvailableCallback cb, IntPtr arg = default(IntPtr));
92
93         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_unset_output_buffer_available_cb")]
94         internal static extern MediaCodecErrorCode UnsetOutputBufferAvailableCb(IntPtr handle);
95
96         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_set_error_cb")]
97         internal static extern MediaCodecErrorCode SetErrorCb(IntPtr handle, ErrorCallback cb, IntPtr arg = default(IntPtr));
98
99         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_unset_error_cb")]
100         internal static extern MediaCodecErrorCode UnsetErrorCb(IntPtr handle);
101
102         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_set_eos_cb")]
103         internal static extern MediaCodecErrorCode SetEosCb(IntPtr handle, EosCallback cb, IntPtr arg = default(IntPtr));
104
105         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_unset_eos_cb")]
106         internal static extern MediaCodecErrorCode UnsetEosCb(IntPtr handle);
107
108         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_set_buffer_status_cb")]
109         internal static extern MediaCodecErrorCode SetBufferStatusCb(IntPtr handle, BufferStatusCallback cb,
110             IntPtr arg = default(IntPtr));
111
112         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_unset_buffer_status_cb")]
113         internal static extern MediaCodecErrorCode UnsetBufferStatusCb(IntPtr handle);
114
115         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_get_supported_type")]
116         internal static extern MediaCodecErrorCode GetSupportedType(IntPtr handle, int codecType, bool isEncoder,
117             out int value);
118
119         [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_foreach_supported_codec_static")]
120         internal static extern MediaCodecErrorCode ForeachSupportedCodec(SupportedCodecCallback cb, IntPtr arg);
121     }
122 }
123