/* * Farstream - Farstream RTP Packet modder * * Copyright 2010 Collabora Ltd. * @author: Olivier Crete * Copyright 2010 Nokia Corp. * * fs-rtp-packet-modder.h - Filter to modify RTP packets * * 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 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef __FS_RTP_PACKET_MODDER_H__ #define __FS_RTP_PACKET_MODDER_H__ #include G_BEGIN_DECLS #define FS_TYPE_RTP_PACKET_MODDER \ (fs_rtp_packet_modder_get_type ()) #define FS_RTP_PACKET_MODDER(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj),FS_TYPE_RTP_PACKET_MODDER, \ FsRtpPacketModder)) #define FS_RTP_PACKET_MODDER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass),FS_TYPE_RTP_PACKET_MODDER, \ FsRtpPacketModderClass)) #define FS_IS_RTP_PACKET_MODDER(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj),FS_TYPE_RTP_PACKET_MODDER)) #define FS_IS_RTP_PACKET_MODDER_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass),FS_TYPE_RTP_PACKET_MODDER)) typedef struct _FsRtpPacketModder FsRtpPacketModder; typedef struct _FsRtpPacketModderClass FsRtpPacketModderClass; typedef GstBuffer *(*FsRtpPacketModderFunc) (FsRtpPacketModder *modder, GstBuffer *buffer, GstClockTime sync_time, gpointer user_data); typedef GstClockTime (*FsRtpPacketModderSyncTimeFunc) ( FsRtpPacketModder *modder, GstBuffer *buffer, gpointer user_data); /** * FsRtpPacketModder: * * Opaque #FsRtpPacketModder data structure. */ struct _FsRtpPacketModder { GstElement element; GstPad *srcpad; GstPad *sinkpad; FsRtpPacketModderFunc modder_func; FsRtpPacketModderSyncTimeFunc sync_func; gpointer user_data; /* for sync */ GstSegment segment; GstClockID clock_id; gboolean unscheduled; /* the latency of the upstream peer, we have to take this into account when * synchronizing the buffers. */ GstClockTime peer_latency; }; struct _FsRtpPacketModderClass { GstElementClass parent_class; }; GType fs_rtp_packet_modder_get_type (void); FsRtpPacketModder *fs_rtp_packet_modder_new ( FsRtpPacketModderFunc modder_func, FsRtpPacketModderSyncTimeFunc sync_func, gpointer user_data); G_END_DECLS #endif /* __FS_RTP_PACKET_MODDER_H__ */