From: <ler...@fr...> - 2004-09-24 08:33:29
|
CVS Root: /cvs/gstreamer Module: gst-sandbox Changes by: leroutier Date: Fri Sep 24 2004 01:33:24 PDT Log message: - update m4 files to be in sync with main copies - apply patch by Martin Eikermann for dvbsrc - adds 2 signals (DVB adapter type and Signal quality/strength) - DISEqC commands are only sent when needed Modified files: dvb-elements/dvbsrc: gstdvbsrc.c gstdvbsrc.h gstdvbtv.c libgstui/macros : as-compiler-flag.m4 videofilters/m4 : as-libtool.m4 as-version.m4 Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-sandbox/dvb-elements/dvbsrc/gstdvbsrc.c.diff?r1=1.4&r2=1.5 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-sandbox/dvb-elements/dvbsrc/gstdvbsrc.h.diff?r1=1.3&r2=1.4 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-sandbox/dvb-elements/dvbsrc/gstdvbtv.c.diff?r1=1.1&r2=1.2 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-sandbox/libgstui/macros/as-compiler-flag.m4.diff?r1=1.1&r2=1.2 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-sandbox/videofilters/m4/as-libtool.m4.diff?r1=1.1&r2=1.2 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-sandbox/videofilters/m4/as-version.m4.diff?r1=1.1&r2=1.2 ====Begin Diffs==== Index: gstdvbsrc.c =================================================================== RCS file: /cvs/gstreamer/gst-sandbox/dvb-elements/dvbsrc/gstdvbsrc.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- gstdvbsrc.c 21 Sep 2004 17:49:46 -0000 1.4 +++ gstdvbsrc.c 24 Sep 2004 08:33:09 -0000 1.5 @@ -37,8 +37,6 @@ #include "dvb-api/frontend.h" #include "dvb-api/dmx.h" -#include "dvb-api/video.h" -#include "dvb-api/audio.h" GST_DEBUG_CATEGORY_STATIC (gstdvbsrc_debug); #define GST_CAT_DEFAULT (gstdvbsrc_debug) @@ -58,6 +56,8 @@ /* Object signals and args */ enum { + ADAPTER_TYPE_SIGNAL, + QUALITY_SIGNAL, LAST_SIGNAL }; @@ -65,13 +65,13 @@ ARG_0, ARG_DVBSRC_ADAPTER_PREFIX, + ARG_DVBSRC_DISEQC_SRC, ARG_DVBSRC_FREQ, ARG_DVBSRC_POL, ARG_DVBSRC_PIDS, ARG_DVBSRC_SYM_RATE, ARG_DVBSRC_BUFFER_SIZE, - ARG_DVBSRC_TUNE, - ARG_DVBSRC_HEAD_ID + ARG_DVBSRC_TUNE static void gst_dvbsrc_base_init (GstDvbSrcClass *klass); @@ -95,6 +95,7 @@ static gboolean gst_dvbsrc_frontend_status(GstDvbSrc *object); static gboolean gst_dvbsrc_adapter_setup(GstDvbSrc* object); +static guint gst_dvbsrc_signals[LAST_SIGNAL] = { 0 }; static GstElementClass *parent_class = NULL; @@ -160,8 +161,6 @@ static void gst_dvbsrc_send_discont(GstDvbSrc *object) { - GST_DEBUG("%s", __FUNCTION__); - GstEvent *event = NULL; if (GST_PAD_IS_USABLE(object->srcpad)) { /* @@ -230,8 +229,6 @@ GObjectClass *gobject_class; GstElementClass *gstelement_class; - GST_INFO("gst_dvbsrc_class_init"); gobject_class = (GObjectClass*) klass; gstelement_class = (GstElementClass*) klass; @@ -298,14 +295,27 @@ G_PARAM_WRITABLE) ); - g_object_class_install_property (gobject_class, ARG_DVBSRC_HEAD_ID, - g_param_spec_int ("head_id", - "head_id", - "Satelite head id, starting at 0", - 0, 7, DEFAULT_HEAD_ID, + g_object_class_install_property (gobject_class, ARG_DVBSRC_DISEQC_SRC, + g_param_spec_int ("diseqc_src", + "diseqc_src", + "DISEqC selected source (-1 disabled)", + -1, 7, DEFAULT_DISEQC_SRC, G_PARAM_READWRITE) + gst_dvbsrc_signals[ADAPTER_TYPE_SIGNAL] = + g_signal_new ("adapter_type", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GstDvbSrcClass, adapter_type), NULL, NULL, + gst_marshal_VOID__INT, G_TYPE_NONE, 1, + G_TYPE_INT); + + gst_dvbsrc_signals[QUALITY_SIGNAL] = + g_signal_new ("signal-quality", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (GstDvbSrcClass, signal_quality), NULL, NULL, + gst_marshal_VOID__INT_INT, G_TYPE_NONE, 2, + G_TYPE_INT, G_TYPE_INT); gstelement_class->change_state = gst_dvbsrc_change_state; } @@ -340,20 +350,19 @@ object->buffersize = DEFAULT_BUFFER_SIZE; - object->sym_rate = DEFAULT_SYMBOL_RATE; - object->head_id = DEFAULT_HEAD_ID; + object->sym_rate = DEFAULT_SYMBOL_RATE; + object->diseqc_src = DEFAULT_DISEQC_SRC; + object->send_diseqc = FALSE; /* set to something sane for testing purpose */ /* 3SAT (Germany) on Astra 19.2 EAST - object->head_id = 1; + object->diseqc_src = 1; object->pol = DVB_POL_H; object->freq = 11954; object->sym_rate = 27500; object->pids[0] = 210; object->pids[1] = 220; - */ + //*/ object->tune_mutex = g_mutex_new(); @@ -383,9 +392,12 @@ } GST_DEBUG("Set Property: ARG_DVBSRC_ADAPTER_PREFIX"); break; - case ARG_DVBSRC_HEAD_ID: - object->head_id = g_value_get_int(value); - GST_DEBUG("Set Property: ARG_DVBSRC_HEAD_ID"); + case ARG_DVBSRC_DISEQC_SRC: + if (object->diseqc_src != g_value_get_int(value)) { + object->diseqc_src = g_value_get_int(value); + object->send_diseqc = TRUE; + } + GST_DEBUG("Set Property: ARG_DVBSRC_DISEQC_ID"); case ARG_DVBSRC_FREQ: object->freq = g_value_get_int(value); @@ -475,8 +487,8 @@ case ARG_DVBSRC_BUFFER_SIZE: g_value_set_int(value, object->buffersize); - g_value_set_int(value, object->head_id); + g_value_set_int(value, object->diseqc_src); default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -486,8 +498,6 @@ static gboolean gst_dvbsrc_close_devices(GstDvbSrc *object) - gst_dvbsrc_unset_pes_filters(object); close(object->fd_dvr); @@ -502,7 +512,6 @@ struct dvb_frontend_info fe_info; char *adapter_desc; GST_INFO("Using frontend: %s", object->frontend_dev); GST_INFO("Using dvr: %s", object->dvr_dev); @@ -532,6 +541,8 @@ g_error("Unknown frontend type: %d", object->adapter_type); } + g_signal_emit(G_OBJECT(object), gst_dvbsrc_signals[ADAPTER_TYPE_SIGNAL], 0, object->adapter_type); GST_INFO("DVB card: %s (%s)", fe_info.name, adapter_desc); @@ -627,13 +638,13 @@ gst_dvbsrc_loop (GstElement *element) - GstBuffer *buf; + static int quality_signal_rate = 0; + GstBuffer *buf; GstDvbSrc *object = NULL; g_return_if_fail (GST_IS_DVBSRC (element)); object = GST_DVBSRC(element); /* device can not be tuned during read */ g_mutex_lock(object->tune_mutex); @@ -644,6 +655,26 @@ buf = read_device(object->fd_dvr, object->dvr_dev, object->buffersize); if (buf != NULL) { gst_pad_push(object->srcpad, GST_DATA(buf)); + + if (quality_signal_rate == 10) { + guint16 strength = 0; + guint16 snr = 0; + if ( ioctl(object->fd_frontend, FE_READ_SIGNAL_STRENGTH, &strength) < 0) + g_warning("Unable to read signal strength: ", strerror(errno)); + + GST_INFO("Signal Quality: %d Strength, %d Signal Noise Ratio", strength, snr); + g_signal_emit(G_OBJECT(object), gst_dvbsrc_signals[QUALITY_SIGNAL], 0, strength, snr); + quality_signal_rate = 0; + } + else { + quality_signal_rate++; else { GST_DEBUG("Failed to read from device"); @@ -819,10 +850,11 @@ perror("FE_SET_TONE failed"); /* digital satellite equipment control, * specification is available from http://www.eutelsat.com/ */ -static int diseqc(int secfd, int sat_no, int pol_vert, int hi_band) +static void diseqc(int secfd, int sat_no, int voltage, int tone) struct diseqc_cmd cmd = { {{0xe0, 0x10, 0x38, 0xf0, 0x00, 0x00}, 4}, 0 }; @@ -831,17 +863,14 @@ * bits are: option, position, polarizaion, band */ cmd.cmd.msg[3] = - 0xf0 | (((sat_no * 4) & 0x0f) | (hi_band ? 1 : 0) | (pol_vert ? 0 : 2)); + 0xf0 | (((sat_no * 4) & 0x0f) | (tone == SEC_TONE_ON ? 1 : 0) | (voltage == SEC_VOLTAGE_13 ? 0 : 2)); - diseqc_send_msg(secfd, pol_vert ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18, - &cmd, hi_band ? SEC_TONE_ON : SEC_TONE_OFF, + diseqc_send_msg(secfd, voltage, &cmd, tone, (sat_no / 4) % 2 ? SEC_MINI_B : SEC_MINI_A); - return TRUE; gst_dvbsrc_tune (GstDvbSrc *object) @@ -877,7 +906,7 @@ GST_INFO("tuning DVB-S to L-Band:%d, Pol:%d, srate=%d, 22kHz=%s", freq, object->pol, sym_rate, object->tone == SEC_TONE_ON ? "on" : "off"); if (freq > 2200000) { // this must be an absolute frequency if (freq < SLOF) { @@ -898,12 +927,26 @@ feparams.u.qpsk.symbol_rate = sym_rate; feparams.u.qpsk.fec_inner = FEC_AUTO; - if ( object->pol == DVB_POL_V ) { pol_vert = 1; }; + if (object->pol == DVB_POL_H) + voltage = SEC_VOLTAGE_18; + else + voltage = SEC_VOLTAGE_13; - GST_DEBUG("diseqc(%d, %d, %d, %d );\n", object->fd_frontend, object->head_id, pol_vert, object->tone); - ret = diseqc(object->fd_frontend, object->head_id, object->pol, object->tone); - if (ret < 0) { - g_warning("Error setting tone and/or polarity via DISEQC : %s", strerror(errno)); + if (object->diseqc_src == -1 || object->send_diseqc == FALSE) { + if (ioctl(object->fd_frontend,FE_SET_VOLTAGE,voltage) < 0) { + g_warning("Unable to set voltage on dvb frontend device"); + } + if (ioctl(object->fd_frontend,FE_SET_TONE,object->tone) < 0) { + g_warning("Error setting tone: %s", strerror(errno)); + GST_DEBUG("Sending DISEqC"); + diseqc(object->fd_frontend, object->diseqc_src, voltage, object->tone); + /* Once diseqc source is set, do not set it again until + app decides to change it */ + object->send_diseqc = FALSE; } break; @@ -923,7 +966,7 @@ GST_INFO("Tuning DVB-T to %dKHz", freq); case FE_QAM: - fprintf(stderr,"Tuning DVB-C to %d, srate=%d\n", freq, sym_rate); + GST_DEBUG("Tuning DVB-C to %d, srate=%d", freq, sym_rate); feparams.frequency= freq; feparams.inversion= INVERSION_OFF; feparams.u.qam.fec_inner = FEC_AUTO; @@ -941,7 +984,7 @@ g_warning("Error tuning channel: %s", strerror(errno)); - /* set pid filters for audio/video */ + /* set pid filters */ gst_dvbsrc_set_pes_filter(object); return TRUE; @@ -975,7 +1018,6 @@ if (object->pids[i] == 0) continue; - /* Set Video-PES-Filter */ fd = &object->fd_filters[i]; pid = object->pids[i]; Index: gstdvbsrc.h RCS file: /cvs/gstreamer/gst-sandbox/dvb-elements/dvbsrc/gstdvbsrc.h,v retrieving revision 1.3 diff -u -d -r1.3 -r1.4 --- gstdvbsrc.h 21 Sep 2004 17:49:46 -0000 1.3 +++ gstdvbsrc.h 24 Sep 2004 08:33:09 -0000 1.4 @@ -15,6 +15,7 @@ DVB_POL_ZERO } GstDvbSrcPol; #define IPACKS 2048 #define TS_SIZE 188 #define IN_SIZE TS_SIZE*10 @@ -22,7 +23,7 @@ #define DEFAULT_ADAPTER_PREFIX "/dev/dvb/adapter0" #define DEFAULT_SYMBOL_RATE 27500 #define DEFAULT_BUFFER_SIZE 8192 -#define DEFAULT_HEAD_ID 0 +#define DEFAULT_DISEQC_SRC -1 /* disabled */ #define MAX_FILTERS 8 @@ -66,7 +67,8 @@ int freq; int sym_rate; int tone; - int head_id; + int diseqc_src; + gboolean send_diseqc; GstDvbSrcPol pol; @@ -74,7 +76,9 @@ struct _GstDvbSrcClass GstElementClass parent_class; + + void (*adapter_type) (GstElement *element, gint type); + void (*signal_quality) (GstElement *element, gint strength, gint snr); Index: gstdvbtv.c RCS file: /cvs/gstreamer/gst-sandbox/dvb-elements/dvbsrc/gstdvbtv.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- gstdvbtv.c 14 Sep 2004 19:09:26 -0000 1.1 +++ gstdvbtv.c 24 Sep 2004 08:33:09 -0000 1.2 @@ -97,6 +97,17 @@ return success; +static void +dvbsrc_signal_quality(GstElement *dvbsrc, gint strength, gint snr) { + // This would be nice to toggle into an OSD + printf("Strength: %d, SNR: %d\n", strength, snr); +} +dvbsrc_adapter_type (GstElement *dvbsrc, gint type, GObject *object) { + printf("Adapter of Type: %d\n", type); mpegdemux_new_pad (GstElement *parse, GstPad *pad, GObject *object) @@ -177,6 +188,9 @@ gst_bin_add_many(GST_BIN(work_thread), dvbsrc, ts2ps, mpegdemux, NULL); gst_element_link_many(dvbsrc, ts2ps, mpegdemux, NULL); + g_signal_connect(G_OBJECT(dvbsrc), "adapter-type", G_CALLBACK(dvbsrc_adapter_type), NULL); + g_signal_connect(G_OBJECT(dvbsrc), "signal-quality", G_CALLBACK(dvbsrc_signal_quality), NULL); #else dvbsrc = gst_element_factory_make("filesrc", "filesrc"); g_object_set(dvbsrc, "location", "/home/meiker/media/MadonnaKlein.mpg", NULL); @@ -197,8 +211,6 @@ g_assert(chn_data->video_pid >= 0); g_assert(chn_data->audio_pid < 8193); g_assert(chn_data->audio_pid >= 0); - sprintf(pids, "%d:%d", chn_data->video_pid, chn_data->audio_pid); - fprintf(stderr, "%s", chn_data->pol); g_object_set(dvbsrc, "freq", chn_data->freq, "pol", chn_data->pol, "srate",chn_data->sym_rate, Index: as-compiler-flag.m4 RCS file: /cvs/gstreamer/gst-sandbox/libgstui/macros/as-compiler-flag.m4,v --- as-compiler-flag.m4 30 Dec 2003 16:40:10 -0000 1.1 +++ as-compiler-flag.m4 24 Sep 2004 08:33:09 -0000 1.2 @@ -1,11 +1,19 @@ -dnl as-compiler-flag.m4 0.0.1 +dnl as-compiler-flag.m4 0.1.0 dnl autostars m4 macro for detection of compiler flags -dnl -dnl ds...@sc... -AC_DEFUN(AS_COMPILER_FLAG, +dnl David Schleef <ds...@sc...> +dnl $Id$ +dnl AS_COMPILER_FLAG(CFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED]) +dnl Tries to compile with the given CFLAGS. +dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags, +dnl and ACTION-IF-NOT-ACCEPTED otherwise. +AC_DEFUN([AS_COMPILER_FLAG], [ - AC_MSG_CHECKING(to see if compiler understands $1) + AC_MSG_CHECKING([to see if compiler understands $1]) save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $1" Index: as-libtool.m4 RCS file: /cvs/gstreamer/gst-sandbox/videofilters/m4/as-libtool.m4,v --- as-libtool.m4 22 Apr 2004 00:31:44 -0000 1.1 +++ as-libtool.m4 24 Sep 2004 08:33:09 -0000 1.2 @@ -1,22 +1,29 @@ -dnl as-libtool.m4 0.0.2 +dnl as-libtool.m4 0.1.4 dnl autostars m4 macro for libtool versioning -dnl th...@ap... -dnl AS_LIBTOOL(PREFIX, CURRENT, REVISION, AGE, USE_RELEASE) +dnl Thomas Vander Stichele <thomas at apestaart dot org> +dnl AS_LIBTOOL(PREFIX, CURRENT, REVISION, AGE, [RELEASE]) dnl example -dnl AS_VERSION(GST, 2, 0, 0) +dnl AS_LIBTOOL(GST, 2, 0, 0) dnl this macro -dnl - defines [$PREFIX]_CURRENT, REVISION AND AGE +dnl - defines [$PREFIX]_CURRENT, REVISION and AGE dnl - defines [$PREFIX]_LIBVERSION dnl - defines [$PREFIX]_LT_LDFLAGS to set versioning dnl - AC_SUBST's them all -dnl if USE_RELEASE = yes, then add a -release option to the LDFLAGS -dnl with the (pre-defined) [$PREFIX]_VERSION +dnl if RELEASE is given, then add a -release option to the LDFLAGS +dnl with the given release version dnl then use [$PREFIX]_LT_LDFLAGS in the relevant Makefile.am's -AC_DEFUN(AS_LIBTOOL, +dnl call AM_PROG_LIBTOOL after this call +AC_DEFUN([AS_LIBTOOL], [$1]_CURRENT=[$2] [$1]_REVISION=[$3] @@ -30,12 +37,11 @@ dnl [$1]_LT_LDFLAGS="$[$1]_LT_LDFLAGS -version-info $[$1]_LIBVERSION" if test ! -z "[$5]" then - [$1]_LT_LDFLAGS="$[$1]_LT_LDFLAGS -release $[$1]_VERSION" + [$1]_LT_LDFLAGS="$[$1]_LT_LDFLAGS -release [$5]" fi AC_SUBST([$1]_LT_LDFLAGS) AC_LIBTOOL_DLOPEN - AM_PROG_LIBTOOL case "$host" in *-*-mingw*) Index: as-version.m4 RCS file: /cvs/gstreamer/gst-sandbox/videofilters/m4/as-version.m4,v --- as-version.m4 22 Apr 2004 00:31:44 -0000 1.1 +++ as-version.m4 24 Sep 2004 08:33:09 -0000 1.2 @@ -1,12 +1,18 @@ -dnl version.m4 0.0.5 +dnl as-version.m4 0.1.0 dnl autostars m4 macro for versioning -dnl AS_VERSION(PACKAGE, PREFIX, MAJOR, MINOR, MICRO, NANO, ACTION_IF_NO_NANO, ACTION_IF_NANO) +dnl AS_VERSION(PACKAGE, PREFIX, MAJOR, MINOR, MICRO, NANO, +dnl ACTION-IF-NO-NANO, [ACTION-IF-NANO]) dnl AS_VERSION(gstreamer, GST_VERSION, 0, 3, 2,) dnl for a 0.3.2 release version dnl - defines [$PREFIX]_MAJOR, MINOR and MICRO dnl - if NANO is empty, then we're in release mode, else in cvs/dev mode @@ -18,14 +24,16 @@ dnl maintainer mode from running ok dnl dnl don't forget to put #undef [$2] and [$2]_RELEASE in acconfig.h +dnl if you use acconfig.h -AC_DEFUN(AS_VERSION, +AC_DEFUN([AS_VERSION], PACKAGE=[$1] [$2]_MAJOR=[$3] [$2]_MINOR=[$4] [$2]_MICRO=[$5] NANO=[$6] + [$2]_NANO=$NANO if test "x$NANO" = "x" || test "x$NANO" = "x0"; AC_MSG_NOTICE(configuring [$1] for release) @@ -36,7 +44,7 @@ else AC_MSG_NOTICE(configuring [$1] for development with nano $NANO) VERSION=[$3].[$4].[$5].$NANO - [$2]_RELEASE=`date +%Y%m%d_%H%M%S` + [$2]_RELEASE=0.`date +%Y%m%d.%H%M%S` dnl execute action ifelse([$8], , :, [$8]) @@ -50,6 +58,7 @@ AC_SUBST([$2]_MAJOR) AC_SUBST([$2]_MINOR) AC_SUBST([$2]_MICRO) + AC_SUBST([$2]_NANO) AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Define the package name]) AC_SUBST(PACKAGE) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Define the version]) |