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, mtprMediaType,
36 mtprPacketSourceBufferState, std::string, const GValue*, std::map<std::string, mtprConnectionStatsProp>>;
41 virtual ~IInvokable() = default;
43 virtual void invoke() = 0;
44 virtual void invoke(VariantData data) = 0;
45 virtual void invoke(VariantData data1, VariantData data2) = 0;
46 virtual bool invoke(VariantData data1, VariantData data2, VariantData data3) = 0;
49 class AbstractCallback : public IInvokable
52 AbstractCallback(void* handle, void* userdata) :
53 _handle(handle), _userdata(userdata) {}
54 virtual ~AbstractCallback() = default;
56 void invoke() override {}
57 void invoke(VariantData data) override {}
58 void invoke(VariantData data1, VariantData data2) override {}
59 bool invoke(VariantData data1, VariantData data2, VariantData data3) override { return TRUE; }
66 using InvokablePtr = std::unique_ptr<IInvokable>;
68 struct CallbackFactory
70 static InvokablePtr createTrackAddedCallback(void* handle, mtprTrackAddedCallback cb, void* userdata);
71 static InvokablePtr createNoMoreTrackCallback(void* handle, mtprNoMoreTrackCallback cb, void* userdata);
72 static InvokablePtr createPacketCallback(void* handle, mtprMediaType type, mtprPacketCallback cb, void* userdata);
73 static InvokablePtr createErrorCallback(void* handle, mtprErrorCallback cb, void* userdata);
74 static InvokablePtr createPacketSourceBufferStateCallback(void* handle, mtprPacketSourceBufferStateCallback cb, void* userdata);
75 static InvokablePtr createConnectionStatsCallback(void* handle, mtprConnectionStatsCallback cb, void* userdata);
78 class TrackAddedCallback : public AbstractCallback
81 TrackAddedCallback(void* handle, mtprTrackAddedCallback cb, void* userdata);
82 virtual ~TrackAddedCallback() = default;
84 void invoke(VariantData data1, VariantData data2) override;
87 mtprTrackAddedCallback _callback;
90 class NoMoreTrackCallback : public AbstractCallback
93 NoMoreTrackCallback(void* handle, mtprNoMoreTrackCallback cb, void* userdata);
94 virtual ~NoMoreTrackCallback() = default;
96 void invoke() override;
99 mtprNoMoreTrackCallback _callback;
102 class PacketCallback : public AbstractCallback
105 PacketCallback(void* handle, mtprMediaType type, mtprPacketCallback cb, void* userdata);
106 virtual ~PacketCallback() = default;
108 void invoke(VariantData data1, VariantData data2) override;
112 mtprPacketCallback _callback;
115 class ErrorCallback : public AbstractCallback
118 ErrorCallback(void* handle, mtprErrorCallback cb, void* userdata);
119 virtual ~ErrorCallback() = default;
121 void invoke(VariantData data) override;
124 mtprErrorCallback _callback;
127 class PacketSourceBufferStateCallback : public AbstractCallback
130 PacketSourceBufferStateCallback(void* handle, mtprPacketSourceBufferStateCallback cb, void* userdata);
131 virtual ~PacketSourceBufferStateCallback() = default;
133 void invoke(VariantData data1, VariantData data2) override;
136 mtprPacketSourceBufferStateCallback _callback;
139 class ConnectionStatsCallback : public AbstractCallback
142 ConnectionStatsCallback(void* handle, mtprConnectionStatsCallback cb, void* userdata);
143 virtual ~ConnectionStatsCallback() = default;
145 bool invoke(VariantData data1, VariantData data2, VariantData data3) override;
148 mtprConnectionStatsCallback _callback;
155 #endif /* __cplusplus */
157 #endif /* __TIZEN_MEDIA_TRANSPORTER_CALLBACK_H__ */