renatofilho@608: /* GStreamer
renatofilho@608:  * Copyright (C) <2006> Rosfran Borges <rosfran.borges@indt.org.br>
renatofilho@608:  *
renatofilho@608:  * This library is free software; you can redistribute it and/or
renatofilho@608:  * modify it under the terms of the GNU Library General Public
renatofilho@608:  * License as published by the Free Software Foundation; either
renatofilho@608:  * version 2 of the License, or (at your option) any later version.
renatofilho@608:  *
renatofilho@608:  * This library is distributed in the hope that it will be useful,
renatofilho@608:  * but WITHOUT ANY WARRANTY; without even the implied warranty of
renatofilho@608:  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
renatofilho@608:  * Library General Public License for more details.
renatofilho@608:  *
renatofilho@608:  * You should have received a copy of the GNU Library General Public
renatofilho@608:  * License along with this library; if not, write to the
renatofilho@608:  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
renatofilho@608:  * Boston, MA 02111-1307, USA.
renatofilho@608:  */
renatofilho@608: 
renatofilho@608: #ifndef __GST_MYTHTV_SRC_H__
renatofilho@608: #define __GST_MYTHTV_SRC_H__
renatofilho@608: 
renatofilho@608: #include <gst/gst.h>
renatofilho@608: #include <gst/base/gstbasesrc.h>
renatofilho@608: #include <gst/base/gstpushsrc.h>
renatofilho@608: #include <stdio.h>
renatofilho@608: 
renatofilho@608: #include <gmyth/gmyth_socket.h>
renatofilho@608: #include <gmyth/gmyth_file.h>
renatofilho@608: #include <gmyth/gmyth_file_transfer.h>
renatofilho@608: #include <gmyth/gmyth_file_local.h>
renatofilho@608: #include <gmyth/gmyth_livetv.h>
renatofilho@608: #include <gmyth/gmyth_backendinfo.h>
renatofilho@608: 
renatofilho@608: G_BEGIN_DECLS
renatofilho@608: #define GST_TYPE_MYTHTV_SRC \
renatofilho@608:   (gst_mythtv_src_get_type())
renatofilho@608: #define GST_MYTHTV_SRC(obj) \
renatofilho@608:   (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_MYTHTV_SRC,GstMythtvSrc))
renatofilho@608: #define GST_MYTHTV_SRC_CLASS(klass) \
renatofilho@608:   (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_MYTHTV_SRC,GstMythtvSrcClass))
renatofilho@608: #define GST_IS_MYTHTV_SRC(obj) \
renatofilho@608:   (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_MYTHTV_SRC))
renatofilho@608: #define GST_IS_MYTHTV_SRC_CLASS(klass) \
renatofilho@608:   (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_MYTHTV_SRC))
renatofilho@608: typedef struct _GstMythtvSrc GstMythtvSrc;
renatofilho@608: typedef struct _GstMythtvSrcClass GstMythtvSrcClass;
renatofilho@608: 
renatofilho@751: typedef enum
renatofilho@751: {
renatofilho@608:   GST_MYTHTV_SRC_FILE_TRANSFER,
renatofilho@608:   GST_MYTHTV_SRC_NEXT_PROGRAM_CHAIN,
renatofilho@608:   GST_MYTHTV_SRC_INVALID_DATA
renatofilho@608: } GstMythtvState;
renatofilho@608: 
renatofilho@751: struct _GstMythtvSrc
renatofilho@751: {
renatofilho@608:   GstPushSrc element;
renatofilho@608: 
renatofilho@751:  /* MythFileTransfer */
renatofilho@608:   GMythFile *file;
renatofilho@608: 
renatofilho@608:   GMythLiveTV *spawn_livetv;
renatofilho@751: 
renatofilho@608:   GMythBackendInfo *backend_info;
renatofilho@608: 
renatofilho@608:   GstMythtvState state;
renatofilho@608: 
renatofilho@608:   gchar *uri_name;
renatofilho@608:   gchar *user_agent;
renatofilho@608: 
renatofilho@608:   gchar *live_chain_id;
renatofilho@608: 
renatofilho@608:   gint mythtv_version;
renatofilho@608: 
renatofilho@608:   gint64 content_size;
renatofilho@608: 
renatofilho@608:   gint64 prev_content_size;
renatofilho@608: 
renatofilho@608:   gint64 content_size_last;
renatofilho@608: 
renatofilho@608:   guint64 bytes_read;
renatofilho@608: 
renatofilho@608:   gint64 read_offset;
renatofilho@608: 
renatofilho@608:   gint buffer_remain;
renatofilho@608: 
renatofilho@608:   gboolean eos;
renatofilho@608: 
renatofilho@608:   gboolean do_start;
renatofilho@608: 
renatofilho@608:   gboolean unique_setup;
renatofilho@608: 
renatofilho@608:   gboolean live_tv;
renatofilho@608: 
renatofilho@608:   gboolean enable_timing_position;
renatofilho@608: 
renatofilho@608:   gint live_tv_id;
renatofilho@608: 
renatofilho@751:   gchar *channel_name;
renatofilho@608: 
renatofilho@608:   guint mode;
renatofilho@608: 
renatofilho@751:  /* MythTV capabilities */
renatofilho@608:   GstCaps *mythtv_caps;
renatofilho@608: 
renatofilho@608:   GByteArray *bytes_queue;
renatofilho@608: 
renatofilho@608: #ifndef GST_DISABLE_GST_DEBUG
renatofilho@751:  /* enable Myth TV debug messages */
renatofilho@608:   gboolean mythtv_msgs_dbg;
renatofilho@608: #endif
renatofilho@608: 
renatofilho@608:   gboolean update_prog_chain;
renatofilho@608: 
renatofilho@751:  /* stablish a maximum iteration value to the IS_RECORDING message */
renatofilho@608:   guint wait_to_transfer;
renatofilho@608: 
renatofilho@751:  /* max try number to get freerecorder */
renatofilho@608:   gint max_try;
renatofilho@608:   gint try_number;
renatofilho@608: 
renatofilho@608: };
renatofilho@608: 
renatofilho@751: struct _GstMythtvSrcClass
renatofilho@751: {
renatofilho@608:   GstPushSrcClass parent_class;
renatofilho@608: };
renatofilho@608: 
renatofilho@751: GType gst_mythtv_src_get_type(void);
renatofilho@608: 
renatofilho@608: G_END_DECLS
renatofilho@608: #endif /* __GST_MYTHTV_SRC_H__ */