mirror of https://github.com/mpv-player/mpv
af: restore detaching of PCM filters when using spdif
Basically, af_fix_format_conversion() behaves stupid you insert a conversion filter that won't work, and adding back the conversion test function is the simplest fix to it.
This commit is contained in:
parent
17e8815e37
commit
3d55340c6d
|
@ -352,18 +352,23 @@ static int af_fix_format_conversion(struct af_stream *s,
|
|||
return AF_FALSE;
|
||||
int dstfmt = in.format;
|
||||
char *filter = "lavrresample";
|
||||
if (!af_lavrresample_test_conversion(actual.format, dstfmt))
|
||||
return AF_ERROR;
|
||||
if (strcmp(filter, prev->info->name) == 0) {
|
||||
if (prev->control(prev, AF_CONTROL_SET_FORMAT, &dstfmt) == AF_OK) {
|
||||
*p_af = prev;
|
||||
return AF_OK;
|
||||
}
|
||||
return AF_ERROR;
|
||||
}
|
||||
struct af_instance *new = af_prepend(s, af, filter, NULL);
|
||||
if (new == NULL)
|
||||
return AF_ERROR;
|
||||
new->auto_inserted = true;
|
||||
if (AF_OK != (rv = new->control(new, AF_CONTROL_SET_FORMAT, &dstfmt)))
|
||||
if (AF_OK != (rv = new->control(new, AF_CONTROL_SET_FORMAT, &dstfmt))) {
|
||||
af_remove(s, new);
|
||||
return rv;
|
||||
}
|
||||
*p_af = new;
|
||||
return AF_OK;
|
||||
}
|
||||
|
|
|
@ -161,4 +161,6 @@ int af_from_dB(int n, float *in, float *out, float k, float mi, float ma);
|
|||
int af_from_ms(int n, float *in, int *out, int rate, float mi, float ma);
|
||||
float af_softclip(float a);
|
||||
|
||||
bool af_lavrresample_test_conversion(int src_format, int dst_format);
|
||||
|
||||
#endif /* MPLAYER_AF_H */
|
||||
|
|
|
@ -178,6 +178,12 @@ static int check_output_conversion(int mp_format)
|
|||
return af_to_avformat(mp_format);
|
||||
}
|
||||
|
||||
bool af_lavrresample_test_conversion(int src_format, int dst_format)
|
||||
{
|
||||
return af_to_avformat(src_format) != AV_SAMPLE_FMT_NONE &&
|
||||
check_output_conversion(dst_format) != AV_SAMPLE_FMT_NONE;
|
||||
}
|
||||
|
||||
// mp_chmap_get_reorder() performs:
|
||||
// to->speaker[n] = from->speaker[src[n]]
|
||||
// but libavresample does:
|
||||
|
|
Loading…
Reference in New Issue