mirror of
https://github.com/mpv-player/mpv
synced 2025-01-18 21:31:13 +00:00
Add a --dtshd option
The spdif decoder was hardcoded to assume that the spdif output is capable of accepting high (>1.5Mbps) bitrates. While this is true for modern HDMI spdif interfaces, the original coax/toslink system cannot deal with this and will fail to work. This patch adds an option --dtshd which can be enabled if you use a DTS-capable receiver behind a HDMI link.
This commit is contained in:
parent
7bab84050f
commit
879ebe0655
@ -531,6 +531,13 @@
|
||||
Time in milliseconds to recognize two consecutive button presses as a
|
||||
double-click (default: 300).
|
||||
|
||||
--dtshd, --no-dtshd
|
||||
When using DTS passthrough, output any DTS-HD track as-is.
|
||||
With ``--no-dts`` (the default) only the DTS Core parts will be output.
|
||||
|
||||
DTS-HD tracks can be sent over HDMI but not over the original
|
||||
coax/toslink S/PDIF system.
|
||||
|
||||
--dvbin=<options>
|
||||
Pass the following parameters to the DVB input module, in order to
|
||||
override the default ones:
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include "config.h"
|
||||
#include "core/mp_msg.h"
|
||||
#include "core/av_common.h"
|
||||
#include "core/options.h"
|
||||
#include "ad_internal.h"
|
||||
|
||||
LIBAD_EXTERN(spdif)
|
||||
@ -162,19 +163,27 @@ static int init(sh_audio_t *sh, const char *decoder)
|
||||
sh->channels = 2;
|
||||
sh->i_bps = bps;
|
||||
break;
|
||||
case CODEC_ID_DTS: // FORCE USE DTS-HD
|
||||
opt = av_opt_find(&lavf_ctx->oformat->priv_class,
|
||||
"dtshd_rate", NULL, 0, 0);
|
||||
if (!opt)
|
||||
goto fail;
|
||||
dtshd_rate = (int*)(((uint8_t*)lavf_ctx->priv_data) +
|
||||
opt->offset);
|
||||
*dtshd_rate = 192000*4;
|
||||
spdif_ctx->iec61937_packet_size = 32768;
|
||||
sh->sample_format = AF_FORMAT_IEC61937_LE;
|
||||
sh->samplerate = 192000; // DTS core require 48000
|
||||
sh->channels = 2*4;
|
||||
sh->i_bps = bps;
|
||||
case CODEC_ID_DTS:
|
||||
if(sh->opts->dtshd) {
|
||||
opt = av_opt_find(&lavf_ctx->oformat->priv_class,
|
||||
"dtshd_rate", NULL, 0, 0);
|
||||
if (!opt)
|
||||
goto fail;
|
||||
dtshd_rate = (int*)(((uint8_t*)lavf_ctx->priv_data) +
|
||||
opt->offset);
|
||||
*dtshd_rate = 192000*4;
|
||||
spdif_ctx->iec61937_packet_size = 32768;
|
||||
sh->sample_format = AF_FORMAT_IEC61937_LE;
|
||||
sh->samplerate = 192000; // DTS core require 48000
|
||||
sh->channels = 2*4;
|
||||
sh->i_bps = bps;
|
||||
} else {
|
||||
spdif_ctx->iec61937_packet_size = 32768;
|
||||
sh->sample_format = AF_FORMAT_AC3_LE;
|
||||
sh->samplerate = srate;
|
||||
sh->channels = 2;
|
||||
sh->i_bps = bps;
|
||||
}
|
||||
break;
|
||||
case CODEC_ID_EAC3:
|
||||
spdif_ctx->iec61937_packet_size = 24576;
|
||||
|
@ -441,6 +441,7 @@ const m_option_t common_opts[] = {
|
||||
|
||||
OPT_STRING("ad", audio_decoders, 0),
|
||||
OPT_STRING("vd", video_decoders, 0),
|
||||
OPT_FLAG("dtshd", dtshd, 0),
|
||||
|
||||
OPT_CHOICE("hwdec", hwdec_api, 0,
|
||||
({"no", 0},
|
||||
|
@ -132,6 +132,7 @@ typedef struct MPOpts {
|
||||
|
||||
int audio_output_channels;
|
||||
int audio_output_format;
|
||||
int dtshd;
|
||||
float playback_speed;
|
||||
float drc_level;
|
||||
struct m_obj_settings *vf_settings;
|
||||
|
Loading…
Reference in New Issue
Block a user