This file is indexed.

/usr/include/QtGStreamer/QGst/Utils/applicationsink.h is in libqtgstreamer-dev 1.2.0-3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
/*
    Copyright (C) 2011 Collabora Ltd. <info@collabora.co.uk>
      @author George Kiagiadakis <george.kiagiadakis@collabora.co.uk>

    This library is free software; you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published
    by the Free Software Foundation; either version 2.1 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef QGST_UTILS_APPLICATIONSINK_H
#define QGST_UTILS_APPLICATIONSINK_H

#include "global.h"
#include "../element.h"
#include "../sample.h"

namespace QGst {
namespace Utils {

/*! \headerfile applicationsink.h <QGst/Utils/ApplicationSink>
 * \brief Helper class for using a GstAppSink
 *
 * Appsink is a sink plugin that supports many different methods for making the application
 * get a handle on the GStreamer data in a pipeline. Unlike most GStreamer elements, appsink
 * provides external API functions. This class exports those API functions in the bindings
 * and makes it easy to implement a custom sink.
 *
 * The normal way of retrieving sample from appsink is by using the pullSample() and pullPreroll()
 * methods. These methods block until a sample becomes available in the sink or when the sink is
 * shut down or reaches EOS.
 *
 * Appsink will internally use a queue to collect samples from the streaming thread. If the
 * application is not pulling samples fast enough, this queue will consume a lot of memory over
 * time. setMaxBuffers() can be used to limit the queue size. enableDrop() controls whether the
 * streaming thread blocks or if older samples are dropped when the maximum queue size is reached.
 * Note that blocking the streaming thread can negatively affect real-time performance and
 * should be avoided.
 *
 * If a blocking behaviour is not desirable, you can subclass this class and implement the
 * newPreroll(), newSample() and newBufferList() which will be called to notify you when a new
 * sample is available.
 *
 * setCaps() can be used to control the formats that appsink can receive. This property can contain
 * non-fixed caps. The format of the pulled samples can be obtained by getting the sample caps.
 *
 * If one of the pullPreroll() or pullSample() methods return NULL, the appsink is stopped or in
 * the EOS state. You can check for the EOS state with isEos(). The eos() virtual method can also
 * be reimplemented to be informed when the EOS state is reached to avoid polling.
 *
 * The actuall appsink element can be retrieved with element() and set with setElement(). It is
 * not necessary to set an appsink, as this class will create one as soon as it is needed.
 *
 * \note It is not necessary to use this class in order to use GstAppSink. GstAppSink
 * also provides signals and properties that fully substitute the functionality of this class.
 *
 * \sa ApplicationSource
 */
class QTGSTREAMERUTILS_EXPORT ApplicationSink
{
public:
    ApplicationSink();
    virtual ~ApplicationSink();

    /*! \returns the appsink element */
    ElementPtr element() const;

    /*! Sets the appsink element that will be used by this class */
    void setElement(const ElementPtr & appsink);


    /*! \returns the caps that the appsink is configured to accept */
    CapsPtr caps() const;

    /*! Sets the caps that appsink will accept */
    void setCaps(const CapsPtr & caps);


    /*! \returns true if the appsink has received an End Of Stream event
     * or if it is not in PAUSED or PLAYING state. */
    bool isEos() const;


    /*! \returns the maximum number of buffers that the sink is
     * configured to hold in its internal queue. 0 means unlimited. */
    uint maxBuffers() const;

    /*! Sets the maximum number of buffers that the sink will hold in its queue.
     * After this amount of buffers are queued in appsink, any more buffers will
     * block upstream elements until a buffer is pulled from appsink. */
    void setMaxBuffers(uint maxbuffers);


    /*! \returns whether the sink is configured to drop old buffers
     * when the maximum amount of queued buffers is reached. */
    bool dropEnabled() const;

    /*! Enables dropping old buffers when the maximum amount of queued buffers is reached. */
    void enableDrop(bool enable);

    /*! Get the last preroll sample in appsink. This was the sample that caused the appsink
     * to preroll in the PAUSED state. This sample can be pulled many times and remains
     * available to the application even after EOS.
     *
     * This function is typically used when dealing with a pipeline in the PAUSED state.
     * Calling this function after doing a seek will give the sample right after the seek position.
     *
     * Note that the preroll sample will also be returned as the first sample when calling
     * pullSample().
     *
     * If an EOS event was received before any samples, this function returns a null SamplePtr.
     * Use isEos() to check for the EOS condition.
     *
     * This function blocks until a preroll sample or EOS is received or the appsink element
     * is set to the READY/NULL state.
     */
    SamplePtr pullPreroll();

    /*! This function blocks until a sample or EOS becomes available or the appsink
     * element is set to the READY/NULL state.
     *
     * This function will only return samples when the appsink is in the PLAYING state.
     * All rendered samples will be put in a queue so that the application can pull samples
     * at its own rate. Note that when the application does not pull samples fast enough, the
     * queued samples could consume a lot of memory, especially when dealing with raw video frames.
     *
     * If an EOS event was received before any samples, this function returns a null SamplePtr.
     * Use isEos() to check for the EOS condition.
     */
    SamplePtr pullSample();

    /*! This function blocks until a sample list or EOS becomes available or the appsink
     * element is set to the READY/NULL state.
     *
     * This function will only return sample lists when the appsink is in the PLAYING state.
     * All rendered sample lists will be put in a queue so that the application can pull sample
     * lists at its own rate. Note that when the application does not pull sample lists fast
     * enough, the queued sample lists could consume a lot of memory, especially when dealing
     * with raw video frames.
     *
     * If an EOS event was received before any sample lists, this function returns a null
     * SampleListPtr. Use isEos() to check for the EOS condition.
     */
    BufferListPtr pullBufferList();

protected:
    /*! Called when the end-of-stream has been reached.
     * \note This function is called from the steaming thread. */
    virtual void eos();

    /*! Called when a new preroll sample is available. The new preroll sample can be
     * retrieved with pullPreroll() either from this function or from any other thread.
     * \note This function is called from the steaming thread. */
    virtual FlowReturn newPreroll();

    /*! Called when a new sample is available. The new sample can be retrieved
     * with pullSample() either from this function or from any other thread.
     * \note This function is called from the steaming thread. */
    virtual FlowReturn newSample();

private:
    /* vtable padding */
    virtual void reservedVirtual1() {}
    virtual void reservedVirtual2() {}
    virtual void reservedVirtual3() {}

private:
    struct Priv;
    friend struct Priv;
    Priv *const d;
    Q_DISABLE_COPY(ApplicationSink)
};

} //namespace Utils
} //namespace QGst

#endif // QGST_APPLICATIONSINK_H