mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-10-03 09:12:19 +00:00
basetsmux: expose pcr-interval property
Instead of using a static hardcoded PCR interval, allow the user to configure it. Also revert back the default to a 40 ms interval, that was changed in recent patches for no good reason.
This commit is contained in:
parent
dae6e7964c
commit
73f92371b8
5 changed files with 42 additions and 6 deletions
|
@ -194,6 +194,7 @@ enum
|
||||||
PROP_ALIGNMENT,
|
PROP_ALIGNMENT,
|
||||||
PROP_SI_INTERVAL,
|
PROP_SI_INTERVAL,
|
||||||
PROP_BITRATE,
|
PROP_BITRATE,
|
||||||
|
PROP_PCR_INTERVAL,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define BASETSMUX_DEFAULT_ALIGNMENT -1
|
#define BASETSMUX_DEFAULT_ALIGNMENT -1
|
||||||
|
@ -1704,6 +1705,11 @@ gst_base_ts_mux_set_property (GObject * object, guint prop_id,
|
||||||
if (mux->tsmux)
|
if (mux->tsmux)
|
||||||
tsmux_set_bitrate (mux->tsmux, mux->bitrate);
|
tsmux_set_bitrate (mux->tsmux, mux->bitrate);
|
||||||
break;
|
break;
|
||||||
|
case PROP_PCR_INTERVAL:
|
||||||
|
mux->pcr_interval = g_value_get_uint (value);
|
||||||
|
if (mux->tsmux)
|
||||||
|
tsmux_set_pcr_interval (mux->tsmux, mux->pcr_interval);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
@ -1735,6 +1741,9 @@ gst_base_ts_mux_get_property (GObject * object, guint prop_id,
|
||||||
case PROP_BITRATE:
|
case PROP_BITRATE:
|
||||||
g_value_set_uint64 (value, mux->bitrate);
|
g_value_set_uint64 (value, mux->bitrate);
|
||||||
break;
|
break;
|
||||||
|
case PROP_PCR_INTERVAL:
|
||||||
|
g_value_set_uint (value, mux->pcr_interval);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
@ -1863,6 +1872,12 @@ gst_base_ts_mux_class_init (GstBaseTsMuxClass * klass)
|
||||||
0, G_MAXUINT64, TSMUX_DEFAULT_BITRATE,
|
0, G_MAXUINT64, TSMUX_DEFAULT_BITRATE,
|
||||||
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
|
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
|
||||||
|
|
||||||
|
g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_PCR_INTERVAL,
|
||||||
|
g_param_spec_uint ("pcr-interval", "PCR interval",
|
||||||
|
"Set the interval (in ticks of the 90kHz clock) for writing PCR",
|
||||||
|
1, G_MAXUINT, TSMUX_DEFAULT_PCR_INTERVAL,
|
||||||
|
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
|
||||||
|
|
||||||
gst_element_class_add_static_pad_template_with_gtype (gstelement_class,
|
gst_element_class_add_static_pad_template_with_gtype (gstelement_class,
|
||||||
&gst_base_ts_mux_src_factory, GST_TYPE_AGGREGATOR_PAD);
|
&gst_base_ts_mux_src_factory, GST_TYPE_AGGREGATOR_PAD);
|
||||||
}
|
}
|
||||||
|
@ -1876,6 +1891,7 @@ gst_base_ts_mux_init (GstBaseTsMux * mux)
|
||||||
mux->pat_interval = TSMUX_DEFAULT_PAT_INTERVAL;
|
mux->pat_interval = TSMUX_DEFAULT_PAT_INTERVAL;
|
||||||
mux->pmt_interval = TSMUX_DEFAULT_PMT_INTERVAL;
|
mux->pmt_interval = TSMUX_DEFAULT_PMT_INTERVAL;
|
||||||
mux->si_interval = TSMUX_DEFAULT_SI_INTERVAL;
|
mux->si_interval = TSMUX_DEFAULT_SI_INTERVAL;
|
||||||
|
mux->pcr_interval = TSMUX_DEFAULT_PCR_INTERVAL;
|
||||||
mux->prog_map = NULL;
|
mux->prog_map = NULL;
|
||||||
mux->alignment = BASETSMUX_DEFAULT_ALIGNMENT;
|
mux->alignment = BASETSMUX_DEFAULT_ALIGNMENT;
|
||||||
mux->bitrate = TSMUX_DEFAULT_BITRATE;
|
mux->bitrate = TSMUX_DEFAULT_BITRATE;
|
||||||
|
|
|
@ -173,6 +173,7 @@ struct GstBaseTsMux {
|
||||||
gint alignment;
|
gint alignment;
|
||||||
guint si_interval;
|
guint si_interval;
|
||||||
guint64 bitrate;
|
guint64 bitrate;
|
||||||
|
guint pcr_interval;
|
||||||
|
|
||||||
/* state */
|
/* state */
|
||||||
gboolean first;
|
gboolean first;
|
||||||
|
|
|
@ -106,9 +106,6 @@
|
||||||
* 1/8 second atm */
|
* 1/8 second atm */
|
||||||
#define TSMUX_PCR_OFFSET (TSMUX_CLOCK_FREQ / 8)
|
#define TSMUX_PCR_OFFSET (TSMUX_CLOCK_FREQ / 8)
|
||||||
|
|
||||||
/* Times per second to write PCR */
|
|
||||||
#define TSMUX_DEFAULT_PCR_FREQ (50)
|
|
||||||
|
|
||||||
/* Base for all written PCR and DTS/PTS,
|
/* Base for all written PCR and DTS/PTS,
|
||||||
* so we have some slack to go backwards */
|
* so we have some slack to go backwards */
|
||||||
#define CLOCK_BASE (TSMUX_CLOCK_FREQ * 10 * 360)
|
#define CLOCK_BASE (TSMUX_CLOCK_FREQ * 10 * 360)
|
||||||
|
@ -149,6 +146,8 @@ tsmux_new (void)
|
||||||
mux->si_changed = TRUE;
|
mux->si_changed = TRUE;
|
||||||
mux->si_interval = TSMUX_DEFAULT_SI_INTERVAL;
|
mux->si_interval = TSMUX_DEFAULT_SI_INTERVAL;
|
||||||
|
|
||||||
|
mux->pcr_interval = TSMUX_DEFAULT_PCR_INTERVAL;
|
||||||
|
|
||||||
mux->next_si_pcr = -1;
|
mux->next_si_pcr = -1;
|
||||||
|
|
||||||
mux->si_sections = g_hash_table_new_full (g_direct_hash, g_direct_equal,
|
mux->si_sections = g_hash_table_new_full (g_direct_hash, g_direct_equal,
|
||||||
|
@ -236,6 +235,21 @@ tsmux_set_pat_interval (TsMux * mux, guint freq)
|
||||||
mux->pat_interval = freq;
|
mux->pat_interval = freq;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* tsmux_set_pcr_interval:
|
||||||
|
* @mux: a #TsMux
|
||||||
|
* @freq: a new PCR interval
|
||||||
|
*
|
||||||
|
* Set the interval (in cycles of the 90kHz clock) for writing the PCR.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
tsmux_set_pcr_interval (TsMux * mux, guint freq)
|
||||||
|
{
|
||||||
|
g_return_if_fail (mux != NULL);
|
||||||
|
|
||||||
|
mux->pcr_interval = freq;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* tsmux_get_pat_interval:
|
* tsmux_get_pat_interval:
|
||||||
* @mux: a #TsMux
|
* @mux: a #TsMux
|
||||||
|
@ -1086,10 +1100,9 @@ write_new_pcr (TsMux * mux, TsMuxStream * stream, gint64 cur_pcr)
|
||||||
stream->pi.pcr = cur_pcr;
|
stream->pi.pcr = cur_pcr;
|
||||||
|
|
||||||
if (stream->next_pcr == -1)
|
if (stream->next_pcr == -1)
|
||||||
stream->next_pcr =
|
stream->next_pcr = cur_pcr + mux->pcr_interval * 300;
|
||||||
cur_pcr + TSMUX_SYS_CLOCK_FREQ / TSMUX_DEFAULT_PCR_FREQ;
|
|
||||||
else
|
else
|
||||||
stream->next_pcr += TSMUX_SYS_CLOCK_FREQ / TSMUX_DEFAULT_PCR_FREQ;
|
stream->next_pcr += mux->pcr_interval * 300;
|
||||||
} else {
|
} else {
|
||||||
cur_pcr = -1;
|
cur_pcr = -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,6 +164,9 @@ struct TsMux {
|
||||||
/* Next PAT position, 27 MHz */
|
/* Next PAT position, 27 MHz */
|
||||||
gint64 next_pat_pcr;
|
gint64 next_pat_pcr;
|
||||||
|
|
||||||
|
/* interval between PCR in MPEG PTS clock time */
|
||||||
|
guint pcr_interval;
|
||||||
|
|
||||||
/* trigger writing Service Information Tables */
|
/* trigger writing Service Information Tables */
|
||||||
gboolean si_changed;
|
gboolean si_changed;
|
||||||
/* interval between SIT in MPEG PTS clock time */
|
/* interval between SIT in MPEG PTS clock time */
|
||||||
|
@ -224,6 +227,7 @@ TsMuxStream * tsmux_find_stream (TsMux *mux, guint16 pid);
|
||||||
|
|
||||||
void tsmux_program_add_stream (TsMuxProgram *program, TsMuxStream *stream);
|
void tsmux_program_add_stream (TsMuxProgram *program, TsMuxStream *stream);
|
||||||
void tsmux_program_set_pcr_stream (TsMuxProgram *program, TsMuxStream *stream);
|
void tsmux_program_set_pcr_stream (TsMuxProgram *program, TsMuxStream *stream);
|
||||||
|
void tsmux_set_pcr_interval (TsMux * mux, guint freq);
|
||||||
|
|
||||||
/* writing stuff */
|
/* writing stuff */
|
||||||
gboolean tsmux_write_stream_packet (TsMux *mux, TsMuxStream *stream);
|
gboolean tsmux_write_stream_packet (TsMux *mux, TsMuxStream *stream);
|
||||||
|
|
|
@ -121,6 +121,8 @@ G_BEGIN_DECLS
|
||||||
#define TSMUX_DEFAULT_PMT_INTERVAL (TSMUX_CLOCK_FREQ / 10)
|
#define TSMUX_DEFAULT_PMT_INTERVAL (TSMUX_CLOCK_FREQ / 10)
|
||||||
/* SI interval (1/10th sec) */
|
/* SI interval (1/10th sec) */
|
||||||
#define TSMUX_DEFAULT_SI_INTERVAL (TSMUX_CLOCK_FREQ / 10)
|
#define TSMUX_DEFAULT_SI_INTERVAL (TSMUX_CLOCK_FREQ / 10)
|
||||||
|
/* PCR interval (1/25th sec) */
|
||||||
|
#define TSMUX_DEFAULT_PCR_INTERVAL (TSMUX_CLOCK_FREQ / 25)
|
||||||
/* Bitrate (bits per second) */
|
/* Bitrate (bits per second) */
|
||||||
#define TSMUX_DEFAULT_BITRATE 0
|
#define TSMUX_DEFAULT_BITRATE 0
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue