mirror of
https://github.com/mpv-player/mpv
synced 2024-12-16 03:45:23 +00:00
0b144eac39
This commit adds an --audio-channel=auto-safe mode, and makes it the default. This mode behaves like "auto" with most AOs, except with ao_alsa. The intention is to allow multichannel output by default on sane APIs. ALSA is not sane as in it's so low level that it will e.g. configure any layout over HDMI, even if the connected A/V receiver does not support it. The HDMI fuckup is of course not ALSA's fault, but other audio APIs normally isolate applications from dealing with this and require the user to globally configure the correct output layout. This will help with other AOs too. ao_lavc (encoding) is changed to the new semantics as well, because it used to force stereo (perhaps because encoding mode is supposed to produce safe files for crap devices?). Exclusive mode output on Windows might need to be adjusted accordingly, as it grants the same kind of low level access as ALSA (requires more research). In addition to the things mentioned above, the --audio-channels option is extended to accept a set of channel layouts. This is supposed to be the correct way to configure mpv ALSA multichannel output. You need to put a list of channel layouts that your A/V receiver supports.
53 lines
1.8 KiB
C
53 lines
1.8 KiB
C
/*
|
|
* This file is part of mpv.
|
|
*
|
|
* mpv is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* mpv is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with mpv. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef MP_CHMAP_SEL_H
|
|
#define MP_CHMAP_SEL_H
|
|
|
|
#include <stdbool.h>
|
|
|
|
#include "chmap.h"
|
|
|
|
struct mp_chmap_sel {
|
|
// should be considered opaque
|
|
bool allow_any, allow_waveext;
|
|
bool speakers[MP_SPEAKER_ID_COUNT];
|
|
struct mp_chmap *chmaps;
|
|
int num_chmaps;
|
|
|
|
struct mp_chmap chmaps_storage[20];
|
|
|
|
void *tmp; // set to any talloc context to allow more chmaps entries
|
|
};
|
|
|
|
void mp_chmap_sel_add_any(struct mp_chmap_sel *s);
|
|
void mp_chmap_sel_add_waveext(struct mp_chmap_sel *s);
|
|
void mp_chmap_sel_add_waveext_def(struct mp_chmap_sel *s);
|
|
void mp_chmap_sel_add_map(struct mp_chmap_sel *s, const struct mp_chmap *map);
|
|
void mp_chmap_sel_add_speaker(struct mp_chmap_sel *s, int id);
|
|
bool mp_chmap_sel_adjust(const struct mp_chmap_sel *s, struct mp_chmap *map);
|
|
bool mp_chmap_sel_fallback(const struct mp_chmap_sel *s, struct mp_chmap *map);
|
|
bool mp_chmap_sel_get_def(const struct mp_chmap_sel *s, struct mp_chmap *map,
|
|
int num);
|
|
|
|
struct mp_log;
|
|
void mp_chmal_sel_log(const struct mp_chmap_sel *s, struct mp_log *log, int lev);
|
|
|
|
void mp_chmap_sel_list(struct mp_chmap *c, struct mp_chmap *maps, int num_maps);
|
|
|
|
#endif
|