mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 01:00:37 +00:00
f96d80accc
Original commit message from CVS: * gst/adder/gstadder.c: (gst_adder_setcaps), (gst_adder_query_duration), (gst_adder_query), (forward_event), (gst_adder_src_event), (gst_adder_sink_event), (gst_adder_class_init), (gst_adder_finalize), (gst_adder_request_new_pad), (gst_adder_collected): * gst/adder/gstadder.h: Updated some docs. Added comments and FIXMEs all over the place. Improve debugging info. Fix leak on finalize by not calling the parent. Implement duration query. Make event forwarding threadsafe. Correctly send NEWSEGMENT at start and after flush. Handle EOS correctly. Post error when not negotiated. * tests/check/elements/adder.c: (GST_START_TEST): Added FIXME in the test.
94 lines
2.9 KiB
C
94 lines
2.9 KiB
C
/* GStreamer
|
|
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
|
|
* 2000 Wim Taymans <wtay@chello.be>
|
|
*
|
|
* gstadder.h: Header for GstAdder element
|
|
*
|
|
* 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., 59 Temple Place - Suite 330,
|
|
* Boston, MA 02111-1307, USA.
|
|
*/
|
|
|
|
#ifndef __GST_ADDER_H__
|
|
#define __GST_ADDER_H__
|
|
|
|
#include <gst/gst.h>
|
|
#include <gst/base/gstcollectpads.h>
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
#define GST_TYPE_ADDER (gst_adder_get_type())
|
|
#define GST_ADDER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_ADDER,GstAdder))
|
|
#define GST_IS_ADDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_ADDER))
|
|
#define GST_ADDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass) ,GST_TYPE_ADDER,GstAdderClass))
|
|
#define GST_IS_ADDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass) ,GST_TYPE_ADDER))
|
|
#define GST_ADDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj) ,GST_TYPE_ADDER,GstAdderClass))
|
|
|
|
typedef struct _GstAdder GstAdder;
|
|
typedef struct _GstAdderClass GstAdderClass;
|
|
typedef struct _GstAdderInputChannel GstAdderInputChannel;
|
|
|
|
typedef enum {
|
|
GST_ADDER_FORMAT_UNSET,
|
|
GST_ADDER_FORMAT_INT,
|
|
GST_ADDER_FORMAT_FLOAT
|
|
} GstAdderFormat;
|
|
|
|
typedef void (*GstAdderFunction) (gpointer out, gpointer in, guint size);
|
|
|
|
struct _GstAdder {
|
|
GstElement element;
|
|
|
|
GstPad *srcpad;
|
|
GstCollectPads *collect;
|
|
gint numpads;
|
|
|
|
/* the next are valid for both int and float */
|
|
GstAdderFormat format;
|
|
gint rate;
|
|
gint channels;
|
|
gint width;
|
|
gint endianness;
|
|
|
|
/* the next are valid only for format == GST_ADDER_FORMAT_INT */
|
|
gint depth;
|
|
gboolean is_signed;
|
|
|
|
/* number of bytes per sample, actually width/8 * channels */
|
|
gint bps;
|
|
|
|
/* function to add samples */
|
|
GstAdderFunction func;
|
|
|
|
/* counters to keep track of timestamps */
|
|
gint64 timestamp;
|
|
gint64 offset;
|
|
|
|
/* sink event handling */
|
|
GstPadEventFunction collect_event;
|
|
GstSegment segment;
|
|
gboolean segment_pending;
|
|
};
|
|
|
|
struct _GstAdderClass {
|
|
GstElementClass parent_class;
|
|
};
|
|
|
|
GType gst_adder_get_type (void);
|
|
gboolean gst_adder_factory_init (GstElementFactory *factory);
|
|
|
|
G_END_DECLS
|
|
|
|
|
|
#endif /* __GST_ADDER_H__ */
|