Line data Source code
1 : /*
2 : * GPAC - Multimedia Framework C SDK
3 : *
4 : * Authors: Deniz Ugur, Romain Bouqueau, Sohaib Larbi
5 : * Copyright (c) Motion Spell
6 : * All rights reserved
7 : *
8 : * This file is part of the GPAC/GStreamer wrapper
9 : *
10 : * This GPAC/GStreamer wrapper is free software; you can redistribute it
11 : * and/or modify it under the terms of the GNU Affero General Public License
12 : * as published by the Free Software Foundation; either version 3, or (at
13 : * your option) any later version.
14 : *
15 : * This GPAC/GStreamer wrapper is distributed in the hope that it will be
16 : * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
17 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 : * GNU Affero General Public License for more details.
19 : *
20 : * You should have received a copy of the GNU Affero General Public
21 : * License along with this library; see the file LICENSE. If not, write to
22 : * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
23 : *
24 : */
25 :
26 : #pragma once
27 :
28 : #include "elements/common.h"
29 : #include "gpacmessages.h"
30 :
31 : #include "lib/caps.h"
32 : #include "lib/main.h"
33 : #include "lib/memio.h"
34 : #include "lib/packet.h"
35 : #include "lib/pid.h"
36 : #include "lib/properties.h"
37 : #include "lib/session.h"
38 : #include "lib/signals.h"
39 :
40 : #include <gst/base/gstaggregator.h>
41 : #include <gst/gst.h>
42 : #include <gst/video/video-event.h>
43 :
44 : G_BEGIN_DECLS
45 :
46 : #define GST_TYPE_GPAC_TF (gst_gpac_tf_get_type())
47 12448 : G_DECLARE_FINAL_TYPE(GstGpacTransform, gst_gpac_tf, GST, GPAC_TF, GstAggregator)
48 :
49 : /**
50 : * GstGpacTransform: Opaque data structure.
51 : */
52 : struct _GstGpacTransform
53 : {
54 : GstAggregator parent;
55 :
56 : /* GPAC Context */
57 : GPAC_Context gpac_ctx;
58 :
59 : /* Element specific options */
60 : guint64 global_idr_period;
61 : guint64 gpac_idr_period;
62 :
63 : /* General Pad Information */
64 : guint32 video_pad_count;
65 : guint32 audio_pad_count;
66 : guint32 subtitle_pad_count;
67 : guint32 caption_pad_count;
68 :
69 : /* Input Queue */
70 : GQueue* queue;
71 :
72 : /* Sacrificial Buffer (for syncing) */
73 : GstBuffer* sync_buffer;
74 : };
75 :
76 : /**
77 : * Accessors
78 : */
79 : // NOLINTBEGIN
80 : #define GPAC_CTX &gpac_tf->gpac_ctx
81 : #define GPAC_PROP_CTX(ctx) (ctx.prop)
82 : #define GPAC_SESS_CTX(ctx) (ctx.sess)
83 : // NOLINTEND
84 :
85 : #define GST_TYPE_GPAC_TF_PAD (gst_gpac_tf_pad_get_type())
86 27948 : G_DECLARE_FINAL_TYPE(GstGpacTransformPad,
87 : gst_gpac_tf_pad,
88 : GST,
89 : GPAC_TF_PAD,
90 : GstAggregatorPad)
91 :
92 : /**
93 : * GstGpacTransformPad: Opaque data structure.
94 : */
95 : struct _GstGpacTransformPad
96 : {
97 : GstAggregatorPad parent;
98 :
99 : /* GPAC PID */
100 : GF_FilterPid* pid;
101 : };
102 :
103 : GST_ELEMENT_REGISTER_DECLARE(gpac_tf);
104 :
105 : static GstStaticPadTemplate internal_pad_template =
106 : GST_STATIC_PAD_TEMPLATE("src",
107 : GST_PAD_SRC,
108 : GST_PAD_ALWAYS,
109 : GST_STATIC_CAPS(INTERNAL_CAPS));
110 :
111 : G_END_DECLS
|