ARG_DVBSRC_INVERSION,
ARG_DVBSRC_STATS_REPORTING_INTERVAL,
ARG_DVBSRC_TIMEOUT,
+ ARG_DVBSRC_DVB_BUFFER_SIZE
};
#define DEFAULT_ADAPTER 0
#define DEFAULT_INVERSION INVERSION_ON
#define DEFAULT_STATS_REPORTING_INTERVAL 100
#define DEFAULT_TIMEOUT 1000000 /* 1 second */
-
+#define DEFAULT_DVB_BUFFER_SIZE (10*188*1024) /* Default is the same as the kernel default */
#define DEFAULT_BUFFER_SIZE 8192 /* not a property */
static void gst_dvbsrc_output_frontend_stats (GstDvbSrc * src);
g_param_spec_uint64 ("timeout", "Timeout",
"Post a message after timeout microseconds (0 = disabled)", 0,
G_MAXUINT64, DEFAULT_TIMEOUT, G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class,
+ ARG_DVBSRC_DVB_BUFFER_SIZE,
+ g_param_spec_uint ("dvb-buffer-size",
+ "dvb-buffer-size",
+ "The kernel buffer size used by the DVB api",
+ 0, G_MAXUINT, DEFAULT_DVB_BUFFER_SIZE, G_PARAM_READWRITE));
}
/* initialize the new element
}
/* Pid 8192 on DVB gets the whole transport stream */
object->pids[0] = 8192;
-
+ object->dvb_buffer_size = DEFAULT_DVB_BUFFER_SIZE;
object->adapter_number = DEFAULT_ADAPTER;
object->frontend_number = DEFAULT_FRONTEND;
object->diseqc_src = DEFAULT_DISEQC_SRC;
case ARG_DVBSRC_TIMEOUT:
object->timeout = g_value_get_uint64 (value);
break;
+ case ARG_DVBSRC_DVB_BUFFER_SIZE:
+ object->dvb_buffer_size = g_value_get_uint (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
case ARG_DVBSRC_TIMEOUT:
g_value_set_uint64 (value, object->timeout);
break;
+ case ARG_DVBSRC_DVB_BUFFER_SIZE:
+ g_value_set_uint (value, object->dvb_buffer_size);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
return FALSE;
}
g_free (dvr_dev);
- GST_INFO_OBJECT (object, "Setting buffer size");
- if (ioctl (object->fd_dvr, DMX_SET_BUFFER_SIZE, 1024 * 1024) < 0) {
- GST_INFO_OBJECT (object, "DMX_SET_BUFFER_SIZE failed");
+
+ GST_INFO_OBJECT (object, "Setting DVB kernel buffer size to %d ",
+ object->dvb_buffer_size);
+ if (ioctl (object->fd_dvr, DMX_SET_BUFFER_SIZE, object->dvb_buffer_size) < 0) {
+ GST_INFO_OBJECT (object, "ioctl DMX_SET_BUFFER_SIZE failed (%d)", errno);
return FALSE;
}
return TRUE;
G_BEGIN_DECLS
- typedef enum
- {
- DVB_POL_H,
- DVB_POL_V,
- DVB_POL_ZERO
- } GstDvbSrcPol;
+ typedef enum
+{
+ DVB_POL_H,
+ DVB_POL_V,
+ DVB_POL_ZERO
+} GstDvbSrcPol;
#define IPACKS 2048
#define GST_IS_DVBSRC_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_DVBSRC))
- typedef struct _GstDvbSrc GstDvbSrc;
- typedef struct _GstDvbSrcClass GstDvbSrcClass;
- typedef struct _GstDvbSrcParam GstDvbSrcParam;
+typedef struct _GstDvbSrc GstDvbSrc;
+typedef struct _GstDvbSrcClass GstDvbSrcClass;
+typedef struct _GstDvbSrcParam GstDvbSrcParam;
- struct _GstDvbSrc
- {
- GstPushSrc element;
- GstPad *srcpad;
+struct _GstDvbSrc
+{
+ GstPushSrc element;
+ GstPad *srcpad;
- GMutex tune_mutex;
- gboolean need_tune;
+ GMutex tune_mutex;
+ gboolean need_tune;
- int adapter_type;
+ int adapter_type;
- int adapter_number; /* the device directory with the sub-devices */
- int frontend_number;
+ int adapter_number; /* the device directory with the sub-devices */
+ int frontend_number;
- int fd_frontend;
- int fd_dvr;
- int fd_filters[MAX_FILTERS];
- GstPoll *poll;
- GstPollFD poll_fd_dvr;
+ int fd_frontend;
+ int fd_dvr;
+ int fd_filters[MAX_FILTERS];
+ GstPoll *poll;
+ GstPollFD poll_fd_dvr;
- guint16 pids[MAX_FILTERS];
- unsigned int freq;
- unsigned int sym_rate;
- int tone;
- int diseqc_src;
- gboolean send_diseqc;
+ guint16 pids[MAX_FILTERS];
+ unsigned int freq;
+ unsigned int sym_rate;
+ int tone;
+ int diseqc_src;
+ gboolean send_diseqc;
- int bandwidth;
- int code_rate_hp;
- int code_rate_lp;
- int modulation;
- int guard_interval;
- int transmission_mode;
- int hierarchy_information;
- int inversion;
- guint64 timeout;
+ int bandwidth;
+ int code_rate_hp;
+ int code_rate_lp;
+ int modulation;
+ int guard_interval;
+ int transmission_mode;
+ int hierarchy_information;
+ int inversion;
+ guint64 timeout;
- GstDvbSrcPol pol;
- guint stats_interval;
- guint stats_counter;
- };
+ GstDvbSrcPol pol;
+ guint stats_interval;
+ guint stats_counter;
+ gboolean need_unlock;
- struct _GstDvbSrcClass
- {
- GstPushSrcClass parent_class;
+ guint dvb_buffer_size;
+};
- void (*adapter_type) (GstElement * element, gint type);
- void (*signal_quality) (GstElement * element, gint strength, gint snr);
- };
+struct _GstDvbSrcClass
+{
+ GstPushSrcClass parent_class;
+ void (*adapter_type) (GstElement * element, gint type);
+ void (*signal_quality) (GstElement * element, gint strength, gint snr);
+};
- GType gst_dvbsrc_get_type (void);
- gboolean gst_dvbsrc_plugin_init (GstPlugin *plugin);
-G_END_DECLS
+GType gst_dvbsrc_get_type (void);
+gboolean gst_dvbsrc_plugin_init (GstPlugin * plugin);
-#endif /* __GST_DVBSRC_H__ */
+G_END_DECLS
+#endif /* __GST_DVBSRC_H__ */