2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 using System.Runtime.InteropServices;
19 using Tizen.Multimedia.MediaCodec;
21 internal static partial class Interop
23 internal static class MediaCodec
25 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
26 internal delegate void InputBufferUsedCallback(IntPtr mediaPacket, IntPtr arg);
28 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
29 internal delegate void OutputBufferAvailableCallback(IntPtr mediaPacket, IntPtr arg);
31 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
32 internal delegate void ErrorCallback(int errorCode, IntPtr arg);
34 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
35 internal delegate void EosCallback(IntPtr arg);
37 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
38 internal delegate void BufferStatusCallback(int statusCode, IntPtr arg);
40 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
41 internal delegate bool SupportedCodecCallback(int codecType, IntPtr arg);
43 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_create")]
44 internal static extern MediaCodecErrorCode Create(out IntPtr handle);
46 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_destroy")]
47 internal static extern MediaCodecErrorCode Destroy(IntPtr handle);
49 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_set_codec")]
50 internal static extern MediaCodecErrorCode Configure(IntPtr handle, int codecType, int flags);
52 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_set_vdec_info")]
53 internal static extern MediaCodecErrorCode SetVideoDecoderInfo(IntPtr handle, int width, int height);
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);
59 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_set_adec_info")]
60 internal static extern MediaCodecErrorCode SetAudioDecoderInfo(IntPtr handle, int sampleRate, int channel,
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);
67 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_prepare")]
68 internal static extern MediaCodecErrorCode Prepare(IntPtr handle);
70 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_unprepare")]
71 internal static extern MediaCodecErrorCode Unprepare(IntPtr handle);
73 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_process_input")]
74 internal static extern MediaCodecErrorCode Process(IntPtr handle, IntPtr mediaPacket, ulong timeoutInUs);
76 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_get_output")]
77 internal static extern MediaCodecErrorCode GetOutput(IntPtr handle, out IntPtr packet, ulong timeoutInUs);
79 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_flush_buffers")]
80 internal static extern MediaCodecErrorCode FlushBuffers(IntPtr handle);
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));
86 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_unset_input_buffer_used_cb")]
87 internal static extern MediaCodecErrorCode UnsetInputBufferUsedCb(IntPtr handle);
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));
93 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_unset_output_buffer_available_cb")]
94 internal static extern MediaCodecErrorCode UnsetOutputBufferAvailableCb(IntPtr handle);
96 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_set_error_cb")]
97 internal static extern MediaCodecErrorCode SetErrorCb(IntPtr handle, ErrorCallback cb, IntPtr arg = default(IntPtr));
99 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_unset_error_cb")]
100 internal static extern MediaCodecErrorCode UnsetErrorCb(IntPtr handle);
102 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_set_eos_cb")]
103 internal static extern MediaCodecErrorCode SetEosCb(IntPtr handle, EosCallback cb, IntPtr arg = default(IntPtr));
105 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_unset_eos_cb")]
106 internal static extern MediaCodecErrorCode UnsetEosCb(IntPtr handle);
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));
112 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_unset_buffer_status_cb")]
113 internal static extern MediaCodecErrorCode UnsetBufferStatusCb(IntPtr handle);
115 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_get_supported_type")]
116 internal static extern MediaCodecErrorCode GetSupportedType(IntPtr handle, int codecType, bool isEncoder,
119 [DllImport(Libraries.MediaCodec, EntryPoint = "mediacodec_foreach_supported_codec_static")]
120 internal static extern MediaCodecErrorCode ForeachSupportedCodec(SupportedCodecCallback cb, IntPtr arg);