gstreamer/gst/gio/gstgiobasesrc.h
Thibault Saunier f1f966d987 giosrc: Add support for growing source files
Add a way for applications to specify that the underlying file is
growing which implies that the source won't EOS when reaching the end
of the file but instead start monitoring it and start reading it again
whenever a change is detected.

Also add a validate test to check the behavior

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/937>
2020-12-08 12:14:58 -03:00

81 lines
2.4 KiB
C

/* GStreamer
*
* Copyright (C) 2007 Rene Stadler <mail@renestadler.de>
* Copyright (C) 2007-2009 Sebastian Dröge <slomo@circular-chaos.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301, USA.
*/
#ifndef __GST_GIO_BASE_SRC_H__
#define __GST_GIO_BASE_SRC_H__
#include "gstgio.h"
#include <gst/base/gstbasesrc.h>
G_BEGIN_DECLS
#define GST_TYPE_GIO_BASE_SRC \
(gst_gio_base_src_get_type())
#define GST_GIO_BASE_SRC(obj) \
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GIO_BASE_SRC,GstGioBaseSrc))
#define GST_GIO_BASE_SRC_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_GIO_BASE_SRC, GstGioBaseSrcClass))
#define GST_GIO_BASE_SRC_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_GIO_BASE_SRC,GstGioBaseSrcClass))
#define GST_IS_GIO_BASE_SRC(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_GIO_BASE_SRC))
#define GST_IS_GIO_BASE_SRC_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_GIO_BASE_SRC))
typedef struct _GstGioBaseSrc GstGioBaseSrc;
typedef struct _GstGioBaseSrcClass GstGioBaseSrcClass;
struct _GstGioBaseSrc
{
GstBaseSrc src;
/* < protected > */
GCancellable *cancel;
guint64 position;
/* < private > */
GInputStream *stream;
GstBuffer *cache;
};
struct _GstGioBaseSrcClass
{
GstBaseSrcClass parent_class;
GInputStream * (*get_stream) (GstGioBaseSrc *bsrc);
/* Returns TRUE if the files grew and we should try
reading again, FALSE otherwise */
gboolean (*wait_for_data) (GstGioBaseSrc *bsrc);
void (*waited_for_data) (GstGioBaseSrc *bsrc);
gboolean close_on_stop;
};
GType gst_gio_base_src_get_type (void);
G_DEFINE_AUTOPTR_CLEANUP_FUNC (GstGioBaseSrc, gst_object_unref)
G_END_DECLS
#endif /* __GST_GIO_BASE_SRC_H__ */