Line data Source code
1 : /* SPDX-License-Identifier: LGPL-2.1-only */
2 : /**
3 : * GStreamer / NNStreamer gRPC support
4 : * Copyright (C) 2020 Dongju Chae <dongju.chae@samsung.com>
5 : */
6 : /**
7 : * @file nnstreamer_grpc_common.h
8 : * @date 21 Oct 2020
9 : * @brief Common header for NNStreamer gRPC support
10 : * @see https://github.com/nnstreamer/nnstreamer
11 : * @author Dongju Chae <dongju.chae@samsung.com>
12 : * @bug No known bugs except for NYI items
13 : */
14 :
15 : #ifndef __NNS_GRPC_COMMON_H__
16 : #define __NNS_GRPC_COMMON_H__
17 :
18 : #include "nnstreamer_grpc.h"
19 :
20 : #include <gst/base/gstdataqueue.h>
21 : #include <grpcpp/grpcpp.h>
22 :
23 : #include <cstring>
24 : #include <string>
25 : #include <thread>
26 :
27 : namespace grpc {
28 :
29 : /**
30 : * @brief NNStreamer RPC service
31 : */
32 : class NNStreamerRPC {
33 : public:
34 : static NNStreamerRPC * createInstance (const grpc_config *config);
35 :
36 : NNStreamerRPC (const grpc_config *config);
37 : virtual ~NNStreamerRPC ();
38 :
39 : gboolean start ();
40 : void stop ();
41 : gboolean send (GstBuffer *buffer);
42 :
43 : /** @brief get gRPC listening port (server only) */
44 12 : int getListeningPort () {
45 12 : if (is_server_)
46 12 : return port_;
47 : else
48 0 : return -EINVAL;
49 : }
50 :
51 : /** @brief set library module handle */
52 28 : void setModuleHandle (void * handle) {
53 28 : if (handle_ == NULL)
54 28 : handle_ = handle;
55 28 : }
56 :
57 : /** @brief get library module handle */
58 12 : void *getModuleHandle () {
59 12 : return handle_;
60 : }
61 :
62 : /** @brief get the grpc direction */
63 16 : grpc_direction getDirection () {
64 16 : return direction_;
65 : }
66 :
67 : protected:
68 : const gchar *host_;
69 : gint port_;
70 :
71 : gboolean is_server_;
72 : gboolean is_blocking_;
73 :
74 : grpc_direction direction_;
75 :
76 : grpc_cb cb_;
77 : void * cb_data_;
78 :
79 : GstTensorsConfig *config_;
80 : GstDataQueue *queue_;
81 :
82 : std::unique_ptr<Server> server_instance_;
83 : std::unique_ptr<ServerCompletionQueue> completion_queue_;
84 :
85 : std::thread worker_;
86 :
87 : void * handle_;
88 : gboolean stop_;
89 :
90 : private:
91 : /** @brief start gRPC server */
92 0 : virtual gboolean start_server (std::string address) { return FALSE; }
93 : /** @brief start gRPC client */
94 0 : virtual gboolean start_client (std::string address) { return FALSE; }
95 :
96 : gboolean _start_server ();
97 : gboolean _start_client ();
98 :
99 : static gboolean _data_queue_check_full_cb (GstDataQueue * queue,
100 : guint visible, guint bytes, guint64 time, gpointer checkdata);
101 : static void _data_queue_item_free (GstDataQueueItem * item);
102 : };
103 :
104 : }; /* namespace grpc */
105 :
106 : #endif /* __NNS_GRPC_COMMON_H__ */
|