mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-12 19:14:16 +00:00
dvbsrc: add preliminary support for ISDB-T/Tb
ISDB-T and ISDB-Tb (the Brazilian variant) are the terrestial DTV standards used by Japan, Philippines, Maldives, Thailand, most South American countries and Botswana. Changeset adds the set of previously missing (and required) ISDB-T parameters, adapter and frontend setup logic and proxies the new properties on dvbbasebin. Tested to work with the live aerial broadcast by Tv Paraíba HD in Campina Grande (Brazil). https://bugzilla.gnome.org/show_bug.cgi?id=732875
This commit is contained in:
parent
8391112af5
commit
01e7e36217
3 changed files with 485 additions and 4 deletions
|
@ -1,9 +1,11 @@
|
|||
/*
|
||||
* dvbbasebin.c -
|
||||
* Copyright (C) 2007 Alessandro Decina
|
||||
* Copyright (C) 2014 Samsung Electronics. All rights reserved.
|
||||
*
|
||||
* Authors:
|
||||
* Alessandro Decina <alessandro@nnva.org>
|
||||
* Reynaldo H. Verdejo Pinochet <r.verdejo@sisa.samsung.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
|
@ -80,6 +82,24 @@ enum
|
|||
PROP_ROLLOFF,
|
||||
PROP_STREAM_ID,
|
||||
PROP_BANDWIDTH_HZ,
|
||||
PROP_ISDBT_LAYER_ENABLED,
|
||||
PROP_ISDBT_PARTIAL_RECEPTION,
|
||||
PROP_ISDBT_SOUND_BROADCASTING,
|
||||
PROP_ISDBT_SB_SUBCHANNEL_ID,
|
||||
PROP_ISDBT_SB_SEGMENT_IDX,
|
||||
PROP_ISDBT_SB_SEGMENT_COUNT,
|
||||
PROP_ISDBT_LAYERA_FEC,
|
||||
PROP_ISDBT_LAYERA_MODULATION,
|
||||
PROP_ISDBT_LAYERA_SEGMENT_COUNT,
|
||||
PROP_ISDBT_LAYERA_TIME_INTERLEAVING,
|
||||
PROP_ISDBT_LAYERB_FEC,
|
||||
PROP_ISDBT_LAYERB_MODULATION,
|
||||
PROP_ISDBT_LAYERB_SEGMENT_COUNT,
|
||||
PROP_ISDBT_LAYERB_TIME_INTERLEAVING,
|
||||
PROP_ISDBT_LAYERC_FEC,
|
||||
PROP_ISDBT_LAYERC_MODULATION,
|
||||
PROP_ISDBT_LAYERC_SEGMENT_COUNT,
|
||||
PROP_ISDBT_LAYERC_TIME_INTERLEAVING,
|
||||
PROP_LNB_SLOF,
|
||||
PROP_LNB_LOF1,
|
||||
PROP_LNB_LOF2
|
||||
|
@ -269,6 +289,24 @@ dvb_base_bin_class_init (DvbBaseBinClass * klass)
|
|||
{PROP_ROLLOFF, "rolloff"},
|
||||
{PROP_STREAM_ID, "stream-id"},
|
||||
{PROP_BANDWIDTH_HZ, "bandwidth-hz"},
|
||||
{PROP_ISDBT_LAYER_ENABLED, "isdbt-layer-enabled"},
|
||||
{PROP_ISDBT_PARTIAL_RECEPTION, "isdbt-partial-reception"},
|
||||
{PROP_ISDBT_SOUND_BROADCASTING, "isdbt-sound-broadcasting"},
|
||||
{PROP_ISDBT_SB_SUBCHANNEL_ID, "isdbt-sb-subchannel-id"},
|
||||
{PROP_ISDBT_SB_SEGMENT_IDX, "isdbt-sb-segment-idx"},
|
||||
{PROP_ISDBT_SB_SEGMENT_COUNT, "isdbt-sb-segment-count"},
|
||||
{PROP_ISDBT_LAYERA_FEC, "isdbt-layera-fec"},
|
||||
{PROP_ISDBT_LAYERA_MODULATION, "isdbt-layera-modulation"},
|
||||
{PROP_ISDBT_LAYERA_SEGMENT_COUNT, "isdbt-layera-segment-count"},
|
||||
{PROP_ISDBT_LAYERA_TIME_INTERLEAVING, "isdbt-layera-time-interleaving"},
|
||||
{PROP_ISDBT_LAYERB_FEC, "isdbt-layerb-fec"},
|
||||
{PROP_ISDBT_LAYERB_MODULATION, "isdbt-layerb-modulation"},
|
||||
{PROP_ISDBT_LAYERB_SEGMENT_COUNT, "isdbt-layerb-segment-count"},
|
||||
{PROP_ISDBT_LAYERB_TIME_INTERLEAVING, "isdbt-layerb-time-interleaving"},
|
||||
{PROP_ISDBT_LAYERC_FEC, "isdbt-layerc-fec"},
|
||||
{PROP_ISDBT_LAYERC_MODULATION, "isdbt-layerc-modulation"},
|
||||
{PROP_ISDBT_LAYERC_SEGMENT_COUNT, "isdbt-layerc-segment-count"},
|
||||
{PROP_ISDBT_LAYERC_TIME_INTERLEAVING, "isdbt-layerc-time-interleaving"},
|
||||
{PROP_LNB_SLOF, "lnb-slof"},
|
||||
{PROP_LNB_LOF1, "lnb-lof1"},
|
||||
{PROP_LNB_LOF2, "lnb-lof2"},
|
||||
|
@ -292,7 +330,8 @@ dvb_base_bin_class_init (DvbBaseBinClass * klass)
|
|||
gst_element_class_set_static_metadata (element_class, "DVB bin",
|
||||
"Source/Bin/Video",
|
||||
"Access descramble and split DVB streams",
|
||||
"Alessandro Decina <alessandro@nnva.org>");
|
||||
"Alessandro Decina <alessandro@nnva.org>\n"
|
||||
"Reynaldo H. Verdejo Pinochet <r.verdejo@sisa.samsung.com>");
|
||||
|
||||
gobject_class = G_OBJECT_CLASS (klass);
|
||||
gobject_class->set_property = dvb_base_bin_set_property;
|
||||
|
@ -566,6 +605,24 @@ dvb_base_bin_set_property (GObject * object, guint prop_id,
|
|||
case PROP_ROLLOFF:
|
||||
case PROP_STREAM_ID:
|
||||
case PROP_BANDWIDTH_HZ:
|
||||
case PROP_ISDBT_LAYER_ENABLED:
|
||||
case PROP_ISDBT_PARTIAL_RECEPTION:
|
||||
case PROP_ISDBT_SOUND_BROADCASTING:
|
||||
case PROP_ISDBT_SB_SUBCHANNEL_ID:
|
||||
case PROP_ISDBT_SB_SEGMENT_IDX:
|
||||
case PROP_ISDBT_SB_SEGMENT_COUNT:
|
||||
case PROP_ISDBT_LAYERA_FEC:
|
||||
case PROP_ISDBT_LAYERA_MODULATION:
|
||||
case PROP_ISDBT_LAYERA_SEGMENT_COUNT:
|
||||
case PROP_ISDBT_LAYERA_TIME_INTERLEAVING:
|
||||
case PROP_ISDBT_LAYERB_FEC:
|
||||
case PROP_ISDBT_LAYERB_MODULATION:
|
||||
case PROP_ISDBT_LAYERB_SEGMENT_COUNT:
|
||||
case PROP_ISDBT_LAYERB_TIME_INTERLEAVING:
|
||||
case PROP_ISDBT_LAYERC_FEC:
|
||||
case PROP_ISDBT_LAYERC_MODULATION:
|
||||
case PROP_ISDBT_LAYERC_SEGMENT_COUNT:
|
||||
case PROP_ISDBT_LAYERC_TIME_INTERLEAVING:
|
||||
case PROP_LNB_SLOF:
|
||||
case PROP_LNB_LOF1:
|
||||
case PROP_LNB_LOF2:
|
||||
|
@ -608,6 +665,24 @@ dvb_base_bin_get_property (GObject * object, guint prop_id,
|
|||
case PROP_ROLLOFF:
|
||||
case PROP_STREAM_ID:
|
||||
case PROP_BANDWIDTH_HZ:
|
||||
case PROP_ISDBT_LAYER_ENABLED:
|
||||
case PROP_ISDBT_PARTIAL_RECEPTION:
|
||||
case PROP_ISDBT_SOUND_BROADCASTING:
|
||||
case PROP_ISDBT_SB_SUBCHANNEL_ID:
|
||||
case PROP_ISDBT_SB_SEGMENT_IDX:
|
||||
case PROP_ISDBT_SB_SEGMENT_COUNT:
|
||||
case PROP_ISDBT_LAYERA_FEC:
|
||||
case PROP_ISDBT_LAYERA_MODULATION:
|
||||
case PROP_ISDBT_LAYERA_SEGMENT_COUNT:
|
||||
case PROP_ISDBT_LAYERA_TIME_INTERLEAVING:
|
||||
case PROP_ISDBT_LAYERB_FEC:
|
||||
case PROP_ISDBT_LAYERB_MODULATION:
|
||||
case PROP_ISDBT_LAYERB_SEGMENT_COUNT:
|
||||
case PROP_ISDBT_LAYERB_TIME_INTERLEAVING:
|
||||
case PROP_ISDBT_LAYERC_FEC:
|
||||
case PROP_ISDBT_LAYERC_MODULATION:
|
||||
case PROP_ISDBT_LAYERC_SEGMENT_COUNT:
|
||||
case PROP_ISDBT_LAYERC_TIME_INTERLEAVING:
|
||||
case PROP_LNB_SLOF:
|
||||
case PROP_LNB_LOF1:
|
||||
case PROP_LNB_LOF2:
|
||||
|
|
|
@ -35,6 +35,9 @@
|
|||
* |[
|
||||
* gst-launch dvbsrc polarity="h" frequency=11302000 symbol-rate=27500 diseqc-source=0 pids=50:102:103 ! mpegtsdemux name=demux ! queue max-size-buffers=0 max-size-time=0 ! mpeg2dec ! xvimagesink demux. ! queue max-size-buffers=0 max-size-time=0 ! mad ! alsasink
|
||||
* ]| Captures and renders a transport stream from dvb card 0 that is a DVB-S card for a program at tuned frequency 11302000 Hz, symbol rate of 27500 kHz with PMT pid of 50 and elementary stream pids of 102 and 103.
|
||||
* |[
|
||||
gst-launch dvbsrc frequency=515142857 guard=16 trans-mode="8k" isdbt-layer-enabled=7 isdbt-partial-reception=1 isdbt-sound-broadcasting=0 isdbt-sb-subchannel-id=0 isdbt-sb-segment-idx=0 isdbt-sb-segment-count=0 isdbt-layera-fec="2/3" isdbt-layera-modulation="QPSK" isdbt-layera-segment-count=1 isdbt-layera-time-interleaving=4 isdbt-layerb-fec="3/4" isdbt-layerb-modulation="qam-64" isdbt-layerb-segment-count=12 isdbt-layerb-time-interleaving=2 isdbt-layerc-fec="1/2" isdbt-layerc-modulation="qam-64" isdbt-layerc-segment-count=0 isdbt-layerc-time-interleaving=0 delsys=8 ! tsdemux name=d ! "video/x-h264" ! h264parse ! queue ! avdec_h264 ! videoconvert ! queue ! autovideosink
|
||||
* ]| Captures and renders the video track of Tv Paraíba HD (Globo affiliate) in Campina Grande (Brasil). This is an ISDB-T (ISDB-Tb) broadcast.
|
||||
* </refsect2>
|
||||
*/
|
||||
|
||||
|
@ -143,7 +146,13 @@
|
|||
GST_DEBUG_CATEGORY_STATIC (gstdvbsrc_debug);
|
||||
#define GST_CAT_DEFAULT (gstdvbsrc_debug)
|
||||
|
||||
#define NUM_DTV_PROPS 16
|
||||
/**
|
||||
* Can't be greater than DTV_IOCTL_MAX_MSGS but we are
|
||||
* not using more than 25 for the largest use case (ISDB-T).
|
||||
*
|
||||
* Bump as needed.
|
||||
*/
|
||||
#define NUM_DTV_PROPS 25
|
||||
|
||||
/* Signals */
|
||||
enum
|
||||
|
@ -183,6 +192,24 @@ enum
|
|||
ARG_DVBSRC_ROLLOFF,
|
||||
ARG_DVBSRC_STREAM_ID,
|
||||
ARG_DVBSRC_BANDWIDTH_HZ,
|
||||
ARG_DVBSRC_ISDBT_LAYER_ENABLED,
|
||||
ARG_DVBSRC_ISDBT_PARTIAL_RECEPTION,
|
||||
ARG_DVBSRC_ISDBT_SOUND_BROADCASTING,
|
||||
ARG_DVBSRC_ISDBT_SB_SUBCHANNEL_ID,
|
||||
ARG_DVBSRC_ISDBT_SB_SEGMENT_IDX,
|
||||
ARG_DVBSRC_ISDBT_SB_SEGMENT_COUNT,
|
||||
ARG_DVBSRC_ISDBT_LAYERA_FEC,
|
||||
ARG_DVBSRC_ISDBT_LAYERA_MODULATION,
|
||||
ARG_DVBSRC_ISDBT_LAYERA_SEGMENT_COUNT,
|
||||
ARG_DVBSRC_ISDBT_LAYERA_TIME_INTERLEAVING,
|
||||
ARG_DVBSRC_ISDBT_LAYERB_FEC,
|
||||
ARG_DVBSRC_ISDBT_LAYERB_MODULATION,
|
||||
ARG_DVBSRC_ISDBT_LAYERB_SEGMENT_COUNT,
|
||||
ARG_DVBSRC_ISDBT_LAYERB_TIME_INTERLEAVING,
|
||||
ARG_DVBSRC_ISDBT_LAYERC_FEC,
|
||||
ARG_DVBSRC_ISDBT_LAYERC_MODULATION,
|
||||
ARG_DVBSRC_ISDBT_LAYERC_SEGMENT_COUNT,
|
||||
ARG_DVBSRC_ISDBT_LAYERC_TIME_INTERLEAVING,
|
||||
ARG_DVBSRC_LNB_SLOF,
|
||||
ARG_DVBSRC_LNB_LOF1,
|
||||
ARG_DVBSRC_LNB_LOF2
|
||||
|
@ -213,6 +240,24 @@ enum
|
|||
#define DEFAULT_PILOT PILOT_AUTO
|
||||
#define DEFAULT_ROLLOFF ROLLOFF_AUTO
|
||||
#define DEFAULT_STREAM_ID NO_STREAM_ID_FILTER
|
||||
#define DEFAULT_ISDBT_LAYER_ENABLED 7
|
||||
#define DEFAULT_ISDBT_PARTIAL_RECEPTION 1
|
||||
#define DEFAULT_ISDBT_SOUND_BROADCASTING 0
|
||||
#define DEFAULT_ISDBT_SB_SUBCHANNEL_ID -1
|
||||
#define DEFAULT_ISDBT_SB_SEGMENT_IDX 0
|
||||
#define DEFAULT_ISDBT_SB_SEGMENT_COUNT 1
|
||||
#define DEFAULT_ISDBT_LAYERA_FEC FEC_AUTO
|
||||
#define DEFAULT_ISDBT_LAYERA_MODULATION QAM_AUTO
|
||||
#define DEFAULT_ISDBT_LAYERA_SEGMENT_COUNT -1
|
||||
#define DEFAULT_ISDBT_LAYERA_TIME_INTERLEAVING -1
|
||||
#define DEFAULT_ISDBT_LAYERB_FEC FEC_AUTO
|
||||
#define DEFAULT_ISDBT_LAYERB_MODULATION QAM_AUTO
|
||||
#define DEFAULT_ISDBT_LAYERB_SEGMENT_COUNT -1
|
||||
#define DEFAULT_ISDBT_LAYERB_TIME_INTERLEAVING -1
|
||||
#define DEFAULT_ISDBT_LAYERC_FEC FEC_AUTO
|
||||
#define DEFAULT_ISDBT_LAYERC_MODULATION QAM_AUTO
|
||||
#define DEFAULT_ISDBT_LAYERC_SEGMENT_COUNT -1
|
||||
#define DEFAULT_ISDBT_LAYERC_TIME_INTERLEAVING -1
|
||||
#define DEFAULT_LNB_SLOF (11700*1000UL)
|
||||
#define DEFAULT_LNB_LOF1 (9750*1000UL)
|
||||
#define DEFAULT_LNB_LOF2 (10600*1000UL)
|
||||
|
@ -524,8 +569,9 @@ gst_dvbsrc_class_init (GstDvbSrcClass * klass)
|
|||
gst_element_class_set_static_metadata (gstelement_class, "DVB Source",
|
||||
"Source/Video",
|
||||
"Digital Video Broadcast Source",
|
||||
"P2P-VCR, C-Lab, University of Paderborn,"
|
||||
"Zaheer Abbas Merali <zaheerabbas at merali dot org>");
|
||||
"P2P-VCR, C-Lab, University of Paderborn, "
|
||||
"Zaheer Abbas Merali <zaheerabbas at merali dot org>\n"
|
||||
"Reynaldo H. Verdejo Pinochet <r.verdejo@sisa.samsung.com>");
|
||||
|
||||
gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_dvbsrc_start);
|
||||
gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_dvbsrc_stop);
|
||||
|
@ -673,6 +719,133 @@ gst_dvbsrc_class_init (GstDvbSrcClass * klass)
|
|||
"(DVB-T2 and DVB-S2 max 255, ISDB max 65535) Stream ID "
|
||||
"(-1 = disabled)", -1, 65535, DEFAULT_STREAM_ID, G_PARAM_READWRITE));
|
||||
|
||||
/* Additional ISDB-T properties */
|
||||
|
||||
/* FIXME: bitmask, double check range, is 1 - 7, allowed
|
||||
values are 0x1 0x2 0x3 |-ables */
|
||||
g_object_class_install_property (gobject_class,
|
||||
ARG_DVBSRC_ISDBT_LAYER_ENABLED,
|
||||
g_param_spec_uint ("isdbt-layer-enabled",
|
||||
"ISB-T layer enabled",
|
||||
"(ISDB-T) Layer Enabled (7 = All layers)", 1, 7,
|
||||
DEFAULT_ISDBT_LAYER_ENABLED, G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
ARG_DVBSRC_ISDBT_PARTIAL_RECEPTION,
|
||||
g_param_spec_int ("isdbt-partial-reception",
|
||||
"ISB-T partial reception",
|
||||
"(ISDB-T) Partial Reception (-1 = AUTO)", -1, 1,
|
||||
DEFAULT_ISDBT_PARTIAL_RECEPTION, G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
ARG_DVBSRC_ISDBT_SOUND_BROADCASTING,
|
||||
g_param_spec_int ("isdbt-sound-broadcasting",
|
||||
"ISB-T sound broadcasting",
|
||||
"(ISDB-T) Sound Broadcasting", 0, 1,
|
||||
DEFAULT_ISDBT_SOUND_BROADCASTING, G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
ARG_DVBSRC_ISDBT_SB_SUBCHANNEL_ID,
|
||||
g_param_spec_int ("isdbt-sb-subchannel-id",
|
||||
"ISB-T SB subchannel ID",
|
||||
"(ISDB-T) SB Subchannel ID (-1 = AUTO)", -1, 41,
|
||||
DEFAULT_ISDBT_SB_SEGMENT_IDX, G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
ARG_DVBSRC_ISDBT_SB_SEGMENT_IDX,
|
||||
g_param_spec_int ("isdbt-sb-segment-idx",
|
||||
"ISB-T SB segment IDX",
|
||||
"(ISDB-T) SB segment IDX", 0, 12,
|
||||
DEFAULT_ISDBT_SB_SEGMENT_IDX, G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
ARG_DVBSRC_ISDBT_SB_SEGMENT_COUNT,
|
||||
g_param_spec_uint ("isdbt-sb-segment-count",
|
||||
"ISB-T SB segment count",
|
||||
"(ISDB-T) SB segment count", 1, 13,
|
||||
DEFAULT_ISDBT_SB_SEGMENT_COUNT, G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class, ARG_DVBSRC_ISDBT_LAYERA_FEC,
|
||||
g_param_spec_enum ("isdbt-layera-fec",
|
||||
"ISDB-T layer A FEC", "(ISDB-T) layer A Forward Error Correction",
|
||||
GST_TYPE_DVBSRC_CODE_RATE, DEFAULT_ISDBT_LAYERA_FEC,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class, ARG_DVBSRC_ISDBT_LAYERB_FEC,
|
||||
g_param_spec_enum ("isdbt-layerb-fec",
|
||||
"ISDB-T layer B FEC", "(ISDB-T) layer B Forward Error Correction",
|
||||
GST_TYPE_DVBSRC_CODE_RATE, DEFAULT_ISDBT_LAYERB_FEC,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class, ARG_DVBSRC_ISDBT_LAYERC_FEC,
|
||||
g_param_spec_enum ("isdbt-layerc-fec",
|
||||
"ISDB-T layer A FEC", "(ISDB-T) layer C Forward Error Correction",
|
||||
GST_TYPE_DVBSRC_CODE_RATE, DEFAULT_ISDBT_LAYERC_FEC,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
ARG_DVBSRC_ISDBT_LAYERA_MODULATION,
|
||||
g_param_spec_enum ("isdbt-layera-modulation", "ISDBT layer A modulation",
|
||||
"(ISDB-T) Layer A modulation type",
|
||||
GST_TYPE_DVBSRC_MODULATION, DEFAULT_ISDBT_LAYERA_MODULATION,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
ARG_DVBSRC_ISDBT_LAYERB_MODULATION,
|
||||
g_param_spec_enum ("isdbt-layerb-modulation", "ISDBT layer B modulation",
|
||||
"(ISDB-T) Layer B modulation type",
|
||||
GST_TYPE_DVBSRC_MODULATION, DEFAULT_ISDBT_LAYERB_MODULATION,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
ARG_DVBSRC_ISDBT_LAYERC_MODULATION,
|
||||
g_param_spec_enum ("isdbt-layerc-modulation", "ISDBT layer C modulation",
|
||||
"(ISDB-T) Layer C modulation type",
|
||||
GST_TYPE_DVBSRC_MODULATION, DEFAULT_ISDBT_LAYERC_MODULATION,
|
||||
G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
ARG_DVBSRC_ISDBT_LAYERA_SEGMENT_COUNT,
|
||||
g_param_spec_int ("isdbt-layera-segment-count",
|
||||
"ISB-T layer A segment count",
|
||||
"(ISDB-T) Layer A segment count (-1 = AUTO)", -1, 13,
|
||||
DEFAULT_ISDBT_LAYERA_SEGMENT_COUNT, G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
ARG_DVBSRC_ISDBT_LAYERB_SEGMENT_COUNT,
|
||||
g_param_spec_int ("isdbt-layerb-segment-count",
|
||||
"ISB-T layer B segment count",
|
||||
"(ISDB-T) Layer B segment count (-1 = AUTO)", -1, 13,
|
||||
DEFAULT_ISDBT_LAYERB_SEGMENT_COUNT, G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
ARG_DVBSRC_ISDBT_LAYERC_SEGMENT_COUNT,
|
||||
g_param_spec_int ("isdbt-layerc-segment-count",
|
||||
"ISB-T layer C segment count",
|
||||
"(ISDB-T) Layer C segment count (-1 = AUTO)", -1, 13,
|
||||
DEFAULT_ISDBT_LAYERC_SEGMENT_COUNT, G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
ARG_DVBSRC_ISDBT_LAYERA_TIME_INTERLEAVING,
|
||||
g_param_spec_int ("isdbt-layera-time-interleaving",
|
||||
"ISB-T layer A time interleaving ",
|
||||
"(ISDB-T) Layer A time interleaving (-1 = AUTO)", -1, 8,
|
||||
DEFAULT_ISDBT_LAYERA_TIME_INTERLEAVING, G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
ARG_DVBSRC_ISDBT_LAYERB_TIME_INTERLEAVING,
|
||||
g_param_spec_int ("isdbt-layerb-time-interleaving",
|
||||
"ISB-T layer B time interleaving ",
|
||||
"(ISDB-T) Layer B time interleaving (-1 = AUTO)", -1, 8,
|
||||
DEFAULT_ISDBT_LAYERB_TIME_INTERLEAVING, G_PARAM_READWRITE));
|
||||
|
||||
g_object_class_install_property (gobject_class,
|
||||
ARG_DVBSRC_ISDBT_LAYERC_TIME_INTERLEAVING,
|
||||
g_param_spec_int ("isdbt-layerc-time-interleaving",
|
||||
"ISB-T layer C time interleaving ",
|
||||
"(ISDB-T) Layer C time interleaving (-1 = AUTO)", -1, 8,
|
||||
DEFAULT_ISDBT_LAYERC_TIME_INTERLEAVING, G_PARAM_READWRITE));
|
||||
|
||||
/* LNB properties (Satellite distribution standards) */
|
||||
|
||||
g_object_class_install_property (gobject_class, ARG_DVBSRC_LNB_SLOF,
|
||||
|
@ -772,6 +945,29 @@ gst_dvbsrc_init (GstDvbSrc * object)
|
|||
object->pilot = DEFAULT_PILOT;
|
||||
object->rolloff = DEFAULT_ROLLOFF;
|
||||
object->stream_id = DEFAULT_STREAM_ID;
|
||||
|
||||
object->isdbt_layer_enabled = DEFAULT_ISDBT_LAYER_ENABLED;
|
||||
object->isdbt_partial_reception = DEFAULT_ISDBT_PARTIAL_RECEPTION;
|
||||
object->isdbt_sound_broadcasting = DEFAULT_ISDBT_SOUND_BROADCASTING;
|
||||
object->isdbt_sb_subchannel_id = DEFAULT_ISDBT_SB_SUBCHANNEL_ID;
|
||||
object->isdbt_sb_segment_idx = DEFAULT_ISDBT_SB_SEGMENT_IDX;
|
||||
object->isdbt_sb_segment_count = DEFAULT_ISDBT_SB_SEGMENT_COUNT;
|
||||
object->isdbt_layera_fec = DEFAULT_ISDBT_LAYERA_FEC;
|
||||
object->isdbt_layera_modulation = DEFAULT_ISDBT_LAYERA_MODULATION;
|
||||
object->isdbt_layera_segment_count = DEFAULT_ISDBT_LAYERA_SEGMENT_COUNT;
|
||||
object->isdbt_layera_time_interleaving =
|
||||
DEFAULT_ISDBT_LAYERA_TIME_INTERLEAVING;
|
||||
object->isdbt_layerb_fec = DEFAULT_ISDBT_LAYERB_FEC;
|
||||
object->isdbt_layerb_modulation = DEFAULT_ISDBT_LAYERB_MODULATION;
|
||||
object->isdbt_layerb_segment_count = DEFAULT_ISDBT_LAYERB_SEGMENT_COUNT;
|
||||
object->isdbt_layerb_time_interleaving =
|
||||
DEFAULT_ISDBT_LAYERB_TIME_INTERLEAVING;
|
||||
object->isdbt_layerc_fec = DEFAULT_ISDBT_LAYERC_FEC;
|
||||
object->isdbt_layerc_modulation = DEFAULT_ISDBT_LAYERC_MODULATION;
|
||||
object->isdbt_layerc_segment_count = DEFAULT_ISDBT_LAYERC_SEGMENT_COUNT;
|
||||
object->isdbt_layerc_time_interleaving =
|
||||
DEFAULT_ISDBT_LAYERC_TIME_INTERLEAVING;
|
||||
|
||||
object->lnb_slof = DEFAULT_LNB_SLOF;
|
||||
object->lnb_lof1 = DEFAULT_LNB_LOF1;
|
||||
object->lnb_lof2 = DEFAULT_LNB_LOF2;
|
||||
|
@ -986,6 +1182,96 @@ gst_dvbsrc_set_property (GObject * _object, guint prop_id,
|
|||
case ARG_DVBSRC_STREAM_ID:
|
||||
object->stream_id = g_value_get_int (value);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYER_ENABLED:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_layer_enabled = g_value_get_uint (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_PARTIAL_RECEPTION:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_partial_reception = g_value_get_int (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_SOUND_BROADCASTING:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_sound_broadcasting = g_value_get_int (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_SB_SUBCHANNEL_ID:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_sb_subchannel_id = g_value_get_int (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_SB_SEGMENT_IDX:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_sb_segment_idx = g_value_get_int (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_SB_SEGMENT_COUNT:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_sb_segment_count = g_value_get_uint (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERA_FEC:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_layera_fec = g_value_get_enum (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERA_MODULATION:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_layera_modulation = g_value_get_enum (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERA_SEGMENT_COUNT:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_layera_segment_count = g_value_get_int (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERA_TIME_INTERLEAVING:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_layera_time_interleaving = g_value_get_int (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERB_FEC:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_layerb_fec = g_value_get_enum (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERB_MODULATION:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_layerb_modulation = g_value_get_enum (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERB_SEGMENT_COUNT:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_layerb_segment_count = g_value_get_int (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERB_TIME_INTERLEAVING:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_layerb_time_interleaving = g_value_get_int (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERC_FEC:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_layerc_fec = g_value_get_enum (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERC_MODULATION:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_layerc_modulation = g_value_get_enum (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERC_SEGMENT_COUNT:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_layerc_segment_count = g_value_get_int (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERC_TIME_INTERLEAVING:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->isdbt_layerc_time_interleaving = g_value_get_int (value);
|
||||
g_mutex_unlock (&object->tune_mutex);
|
||||
break;
|
||||
case ARG_DVBSRC_LNB_SLOF:
|
||||
g_mutex_lock (&object->tune_mutex);
|
||||
object->lnb_slof = g_value_get_uint (value);
|
||||
|
@ -1101,6 +1387,60 @@ gst_dvbsrc_get_property (GObject * _object, guint prop_id,
|
|||
case ARG_DVBSRC_STREAM_ID:
|
||||
g_value_set_int (value, object->stream_id);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYER_ENABLED:
|
||||
g_value_set_uint (value, object->isdbt_layer_enabled);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_PARTIAL_RECEPTION:
|
||||
g_value_set_int (value, object->isdbt_partial_reception);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_SOUND_BROADCASTING:
|
||||
g_value_set_int (value, object->isdbt_sound_broadcasting);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_SB_SUBCHANNEL_ID:
|
||||
g_value_set_int (value, object->isdbt_sb_subchannel_id);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_SB_SEGMENT_IDX:
|
||||
g_value_set_int (value, object->isdbt_sb_segment_idx);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_SB_SEGMENT_COUNT:
|
||||
g_value_set_uint (value, object->isdbt_sb_segment_count);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERA_FEC:
|
||||
g_value_set_enum (value, object->isdbt_layera_fec);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERA_MODULATION:
|
||||
g_value_set_enum (value, object->isdbt_layera_modulation);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERA_SEGMENT_COUNT:
|
||||
g_value_set_int (value, object->isdbt_layera_segment_count);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERA_TIME_INTERLEAVING:
|
||||
g_value_set_int (value, object->isdbt_layera_time_interleaving);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERB_FEC:
|
||||
g_value_set_enum (value, object->isdbt_layerb_fec);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERB_MODULATION:
|
||||
g_value_set_enum (value, object->isdbt_layerb_modulation);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERB_SEGMENT_COUNT:
|
||||
g_value_set_int (value, object->isdbt_layerb_segment_count);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERB_TIME_INTERLEAVING:
|
||||
g_value_set_int (value, object->isdbt_layerb_time_interleaving);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERC_FEC:
|
||||
g_value_set_enum (value, object->isdbt_layerc_fec);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERC_MODULATION:
|
||||
g_value_set_enum (value, object->isdbt_layerc_modulation);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERC_SEGMENT_COUNT:
|
||||
g_value_set_int (value, object->isdbt_layerc_segment_count);
|
||||
break;
|
||||
case ARG_DVBSRC_ISDBT_LAYERC_TIME_INTERLEAVING:
|
||||
g_value_set_int (value, object->isdbt_layerc_time_interleaving);
|
||||
break;
|
||||
case ARG_DVBSRC_LNB_SLOF:
|
||||
g_value_set_uint (value, object->lnb_slof);
|
||||
break;
|
||||
|
@ -1953,6 +2293,53 @@ gst_dvbsrc_set_fe_params (GstDvbSrc * object, struct dtv_properties *props)
|
|||
|
||||
set_prop (props->props, &n, DTV_MODULATION, object->modulation);
|
||||
break;
|
||||
case SYS_ISDBT:
|
||||
/* FIXME: This works but further parameter sanity checking
|
||||
* can be done for some property combinatios. This is still
|
||||
* safe anyway, as the current worst case scenario is just
|
||||
* a fail at tuning/locking */
|
||||
GST_INFO_OBJECT (object, "Tuning ISDB-T to %d", freq);
|
||||
set_prop (props->props, &n, DTV_BANDWIDTH_HZ, object->bandwidth);
|
||||
set_prop (props->props, &n, DTV_GUARD_INTERVAL, object->guard_interval);
|
||||
set_prop (props->props, &n, DTV_TRANSMISSION_MODE,
|
||||
object->transmission_mode);
|
||||
set_prop (props->props, &n, DTV_ISDBT_LAYER_ENABLED,
|
||||
object->isdbt_layer_enabled);
|
||||
set_prop (props->props, &n, DTV_ISDBT_PARTIAL_RECEPTION,
|
||||
object->isdbt_partial_reception);
|
||||
set_prop (props->props, &n, DTV_ISDBT_SOUND_BROADCASTING,
|
||||
object->isdbt_sound_broadcasting);
|
||||
set_prop (props->props, &n, DTV_ISDBT_SB_SUBCHANNEL_ID,
|
||||
object->isdbt_sb_subchannel_id);
|
||||
set_prop (props->props, &n, DTV_ISDBT_SB_SEGMENT_IDX,
|
||||
object->isdbt_sb_segment_idx);
|
||||
set_prop (props->props, &n, DTV_ISDBT_SB_SEGMENT_COUNT,
|
||||
object->isdbt_sb_segment_count);
|
||||
set_prop (props->props, &n, DTV_ISDBT_LAYERA_FEC,
|
||||
object->isdbt_layera_fec);
|
||||
set_prop (props->props, &n, DTV_ISDBT_LAYERA_MODULATION,
|
||||
object->isdbt_layera_modulation);
|
||||
set_prop (props->props, &n, DTV_ISDBT_LAYERA_SEGMENT_COUNT,
|
||||
object->isdbt_layera_segment_count);
|
||||
set_prop (props->props, &n, DTV_ISDBT_LAYERA_TIME_INTERLEAVING,
|
||||
object->isdbt_layera_time_interleaving);
|
||||
set_prop (props->props, &n, DTV_ISDBT_LAYERB_FEC,
|
||||
object->isdbt_layerb_fec);
|
||||
set_prop (props->props, &n, DTV_ISDBT_LAYERB_MODULATION,
|
||||
object->isdbt_layerb_modulation);
|
||||
set_prop (props->props, &n, DTV_ISDBT_LAYERB_SEGMENT_COUNT,
|
||||
object->isdbt_layerb_segment_count);
|
||||
set_prop (props->props, &n, DTV_ISDBT_LAYERB_TIME_INTERLEAVING,
|
||||
object->isdbt_layerb_time_interleaving);
|
||||
set_prop (props->props, &n, DTV_ISDBT_LAYERC_FEC,
|
||||
object->isdbt_layerc_fec);
|
||||
set_prop (props->props, &n, DTV_ISDBT_LAYERC_MODULATION,
|
||||
object->isdbt_layerc_modulation);
|
||||
set_prop (props->props, &n, DTV_ISDBT_LAYERC_SEGMENT_COUNT,
|
||||
object->isdbt_layerc_segment_count);
|
||||
set_prop (props->props, &n, DTV_ISDBT_LAYERC_TIME_INTERLEAVING,
|
||||
object->isdbt_layerc_time_interleaving);
|
||||
break;
|
||||
default:
|
||||
GST_ERROR_OBJECT (object, "Unknown frontend type %u", object->delsys);
|
||||
return FALSE;
|
||||
|
|
|
@ -105,6 +105,25 @@ struct _GstDvbSrc
|
|||
|
||||
guint dvb_buffer_size;
|
||||
|
||||
unsigned int isdbt_layer_enabled;
|
||||
int isdbt_partial_reception;
|
||||
int isdbt_sound_broadcasting;
|
||||
int isdbt_sb_subchannel_id;
|
||||
int isdbt_sb_segment_idx;
|
||||
unsigned int isdbt_sb_segment_count;
|
||||
int isdbt_layera_fec;
|
||||
int isdbt_layera_modulation;
|
||||
int isdbt_layera_segment_count;
|
||||
int isdbt_layera_time_interleaving;
|
||||
int isdbt_layerb_fec;
|
||||
int isdbt_layerb_modulation;
|
||||
int isdbt_layerb_segment_count;
|
||||
int isdbt_layerb_time_interleaving;
|
||||
int isdbt_layerc_fec;
|
||||
int isdbt_layerc_modulation;
|
||||
int isdbt_layerc_segment_count;
|
||||
int isdbt_layerc_time_interleaving;
|
||||
|
||||
/* LNB properties */
|
||||
unsigned int lnb_slof;
|
||||
unsigned int lnb_lof1;
|
||||
|
|
Loading…
Reference in a new issue