mirror of
https://github.com/mpv-player/mpv
synced 2025-01-02 13:02:24 +00:00
stream_dvb: Add possibility to dump a full transponder.
Was already possible before by injecting the magic PID 8192 into channels.conf, the flag makes this much more useable and we also have it documented. Useful not only for debugging, but also for incomplete channels.conf (mplayer format...), multi-channel recording, or channels which do dynamic PID switchng. full-transponder is also useful for channels which switch PIDs on-the-fly. ffmpeg can handle this, but it needs the full stream with all PIDs.
This commit is contained in:
parent
545a657ab7
commit
ca32a15a22
@ -3135,11 +3135,22 @@ DVB
|
||||
Classic mplayer format channel lists are still supported (without
|
||||
these improvements), and for other card types, only limited VDR
|
||||
format channel list support is implemented (patches welcome).
|
||||
For channels with dynamic PID switching or incomplete
|
||||
``channels.conf``, ``--dvbin-full-transponder`` or the magic PID
|
||||
``8192`` are recommended.
|
||||
|
||||
``--dvbin-timeout=<1-30>``
|
||||
Maximum number of seconds to wait when trying to tune a frequency before
|
||||
giving up (default: 30).
|
||||
|
||||
``--dvbin-full-transponder=<yes|no>``
|
||||
Apply no filters on program PIDs, only tune to frequency and pass full
|
||||
transponder to demuxer. This is useful to record multiple programs
|
||||
on a single transponder, or to work around issues in the ``channels.conf``.
|
||||
It is also recommended to use this for channels which switch PIDs
|
||||
on-the-fly, e.g. for regional news.
|
||||
|
||||
Default: ``no``
|
||||
|
||||
PVR
|
||||
---
|
||||
|
@ -115,6 +115,8 @@ typedef struct dvb_params {
|
||||
int cfg_card;
|
||||
int cfg_timeout;
|
||||
char *cfg_file;
|
||||
|
||||
int cfg_full_transponder;
|
||||
} dvb_priv_t;
|
||||
|
||||
|
||||
|
@ -78,6 +78,7 @@ const struct m_sub_options stream_dvb_conf = {
|
||||
OPT_INTRANGE("card", cfg_card, 0, 1, 4),
|
||||
OPT_INTRANGE("timeout", cfg_timeout, 0, 1, 30),
|
||||
OPT_STRING("file", cfg_file, 0),
|
||||
OPT_FLAG("full-transponder", cfg_full_transponder, 0),
|
||||
{0}
|
||||
},
|
||||
.size = sizeof(struct dvb_params),
|
||||
@ -195,7 +196,7 @@ static bool parse_pid_string(struct mp_log *log, char* pid_string, dvb_channel_t
|
||||
return false;
|
||||
}
|
||||
|
||||
static dvb_channels_list *dvb_get_channels(struct mp_log *log, char *filename, int type)
|
||||
static dvb_channels_list *dvb_get_channels(struct mp_log *log, int cfg_full_transponder, char *filename, int type)
|
||||
{
|
||||
dvb_channels_list *list;
|
||||
FILE *f;
|
||||
@ -376,8 +377,12 @@ static dvb_channels_list *dvb_get_channels(struct mp_log *log, char *filename, i
|
||||
if(ptr->pids[cnt] == 0)
|
||||
has0 = 1;
|
||||
}
|
||||
if(has8192)
|
||||
{
|
||||
/* 8192 is the pseudo-PID for full TP dump,
|
||||
enforce that if requested. */
|
||||
if (!has8192 && cfg_full_transponder) {
|
||||
has8192 = 1;
|
||||
}
|
||||
if(has8192) {
|
||||
ptr->pids[0] = 8192;
|
||||
ptr->pids_cnt = 1;
|
||||
}
|
||||
@ -968,7 +973,7 @@ dvb_config_t *dvb_get_config(stream_t *stream)
|
||||
}
|
||||
}
|
||||
|
||||
list = dvb_get_channels(log, conf_file, type);
|
||||
list = dvb_get_channels(log, priv->cfg_full_transponder, conf_file, type);
|
||||
talloc_free(talloc_ctx);
|
||||
|
||||
if(list == NULL)
|
||||
|
Loading…
Reference in New Issue
Block a user