2 * Copyright (c) 2022 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.
17 #ifndef __TIZEN_MEDIA_TRANSPORTER_CALLBACK_H__
18 #define __TIZEN_MEDIA_TRANSPORTER_CALLBACK_H__
22 #include <media_packet.h>
24 #include <glib-object.h>
27 #include "MediaTransporter.h"
33 namespace tizen_media_transporter {
35 using VariantData = std::variant<mtprError, media_packet_h, unsigned int,
36 mtprMediaType, mtprPacketSourceBufferState,
37 mtprConnectionStatsPropInfo>;
42 virtual ~IInvokable() = default;
44 virtual void invoke() = 0;
45 virtual void invoke(VariantData data) = 0;
46 virtual void invoke(VariantData data1, VariantData data2) = 0;
47 virtual bool invokeReturn(VariantData data) = 0;
50 class AbstractCallback : public IInvokable
53 AbstractCallback(void* handle, void* userdata) :
54 _handle(handle), _userdata(userdata) {}
55 virtual ~AbstractCallback() = default;
57 void invoke() override {}
58 void invoke(VariantData data) override {}
59 void invoke(VariantData data1, VariantData data2) override {}
60 bool invokeReturn(VariantData data) override { return false; }
67 using InvokablePtr = std::unique_ptr<IInvokable>;
69 struct CallbackFactory
71 static InvokablePtr createTrackAddedCallback(void* handle, mtprTrackAddedCallback cb, void* userdata);
72 static InvokablePtr createNoMoreTrackCallback(void* handle, mtprNoMoreTrackCallback cb, void* userdata);
73 static InvokablePtr createPacketCallback(void* handle, mtprMediaType type, mtprPacketCallback cb, void* userdata);
74 static InvokablePtr createErrorCallback(void* handle, mtprErrorCallback cb, void* userdata);
75 static InvokablePtr createPacketSourceBufferStateCallback(void* handle, mtprPacketSourceBufferStateCallback cb, void* userdata);
76 static InvokablePtr createConnectionStatsCallback(void* handle, mtprConnectionStatsCallback cb, void* userdata);
79 class TrackAddedCallback : public AbstractCallback
82 TrackAddedCallback(void* handle, mtprTrackAddedCallback cb, void* userdata);
83 virtual ~TrackAddedCallback() = default;
85 void invoke(VariantData data1, VariantData data2) override;
88 mtprTrackAddedCallback _callback;
91 class NoMoreTrackCallback : public AbstractCallback
94 NoMoreTrackCallback(void* handle, mtprNoMoreTrackCallback cb, void* userdata);
95 virtual ~NoMoreTrackCallback() = default;
97 void invoke() override;
100 mtprNoMoreTrackCallback _callback;
103 class PacketCallback : public AbstractCallback
106 PacketCallback(void* handle, mtprMediaType type, mtprPacketCallback cb, void* userdata);
107 virtual ~PacketCallback() = default;
109 void invoke(VariantData data1, VariantData data2) override;
113 mtprPacketCallback _callback;
116 class ErrorCallback : public AbstractCallback
119 ErrorCallback(void* handle, mtprErrorCallback cb, void* userdata);
120 virtual ~ErrorCallback() = default;
122 void invoke(VariantData data) override;
125 mtprErrorCallback _callback;
128 class PacketSourceBufferStateCallback : public AbstractCallback
131 PacketSourceBufferStateCallback(void* handle, mtprPacketSourceBufferStateCallback cb, void* userdata);
132 virtual ~PacketSourceBufferStateCallback() = default;
134 void invoke(VariantData data1, VariantData data2) override;
137 mtprPacketSourceBufferStateCallback _callback;
140 class ConnectionStatsCallback : public AbstractCallback
143 ConnectionStatsCallback(void* handle, mtprConnectionStatsCallback cb, void* userdata);
144 virtual ~ConnectionStatsCallback() = default;
146 bool invokeReturn(VariantData data) override;
149 mtprConnectionStatsCallback _callback;
156 #endif /* __cplusplus */
158 #endif /* __TIZEN_MEDIA_TRANSPORTER_CALLBACK_H__ */