提交 494f868e 编写于 作者: H Hendrik Leppkes

avcodec: set AV_CODEC_CAP_CHANNEL_CONF on decoders which set their own channels

The decoders in this set either have a fixed channel count, or read it
from the bitstream, and thus do not require the channel count as
external information.

Fixes various regressions since
81503ac5, which requires a valid channel
count for decoders which do not set this capability.
Signed-off-by: NHendrik Leppkes <h.leppkes@gmail.com>
上级 412c3b37
...@@ -625,7 +625,7 @@ AVCodec ff_alac_decoder = { ...@@ -625,7 +625,7 @@ AVCodec ff_alac_decoder = {
.init = alac_decode_init, .init = alac_decode_init,
.close = alac_decode_close, .close = alac_decode_close,
.decode = alac_decode_frame, .decode = alac_decode_frame,
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_CHANNEL_CONF,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.priv_class = &alac_class .priv_class = &alac_class
}; };
...@@ -2179,6 +2179,6 @@ AVCodec ff_als_decoder = { ...@@ -2179,6 +2179,6 @@ AVCodec ff_als_decoder = {
.close = decode_end, .close = decode_end,
.decode = decode_frame, .decode = decode_frame,
.flush = flush, .flush = flush,
.capabilities = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
}; };
...@@ -1088,7 +1088,7 @@ AVCodec ff_amrnb_decoder = { ...@@ -1088,7 +1088,7 @@ AVCodec ff_amrnb_decoder = {
.priv_data_size = sizeof(AMRContext), .priv_data_size = sizeof(AMRContext),
.init = amrnb_decode_init, .init = amrnb_decode_init,
.decode = amrnb_decode_frame, .decode = amrnb_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT, .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT,
AV_SAMPLE_FMT_NONE }, AV_SAMPLE_FMT_NONE },
}; };
...@@ -1283,7 +1283,7 @@ AVCodec ff_amrwb_decoder = { ...@@ -1283,7 +1283,7 @@ AVCodec ff_amrwb_decoder = {
.priv_data_size = sizeof(AMRWBContext), .priv_data_size = sizeof(AMRWBContext),
.init = amrwb_decode_init, .init = amrwb_decode_init,
.decode = amrwb_decode_frame, .decode = amrwb_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT, .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT,
AV_SAMPLE_FMT_NONE }, AV_SAMPLE_FMT_NONE },
}; };
...@@ -996,5 +996,5 @@ AVCodec ff_atrac9_decoder = { ...@@ -996,5 +996,5 @@ AVCodec ff_atrac9_decoder = {
.decode = atrac9_decode_frame, .decode = atrac9_decode_frame,
.flush = atrac9_decode_flush, .flush = atrac9_decode_flush,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP,
.capabilities = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
}; };
...@@ -595,7 +595,7 @@ static av_cold int ffat_close_decoder(AVCodecContext *avctx) ...@@ -595,7 +595,7 @@ static av_cold int ffat_close_decoder(AVCodecContext *avctx)
.flush = ffat_decode_flush, \ .flush = ffat_decode_flush, \
.priv_class = &ffat_##NAME##_dec_class, \ .priv_class = &ffat_##NAME##_dec_class, \
.bsfs = bsf_name, \ .bsfs = bsf_name, \
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, \ .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_CHANNEL_CONF, \
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, \ .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, \
.wrapper_name = "at", \ .wrapper_name = "at", \
}; };
......
...@@ -85,5 +85,5 @@ AVCodec ff_bmv_audio_decoder = { ...@@ -85,5 +85,5 @@ AVCodec ff_bmv_audio_decoder = {
.id = AV_CODEC_ID_BMV_AUDIO, .id = AV_CODEC_ID_BMV_AUDIO,
.init = bmv_aud_decode_init, .init = bmv_aud_decode_init,
.decode = bmv_aud_decode_frame, .decode = bmv_aud_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
}; };
...@@ -173,7 +173,7 @@ AVCodec ff_comfortnoise_decoder = { ...@@ -173,7 +173,7 @@ AVCodec ff_comfortnoise_decoder = {
.close = cng_decode_close, .close = cng_decode_close,
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16, .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_S16,
AV_SAMPLE_FMT_NONE }, AV_SAMPLE_FMT_NONE },
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE |
FF_CODEC_CAP_INIT_CLEANUP, FF_CODEC_CAP_INIT_CLEANUP,
}; };
...@@ -129,5 +129,5 @@ AVCodec ff_dsicinaudio_decoder = { ...@@ -129,5 +129,5 @@ AVCodec ff_dsicinaudio_decoder = {
.priv_data_size = sizeof(CinAudioContext), .priv_data_size = sizeof(CinAudioContext),
.init = cinaudio_decode_init, .init = cinaudio_decode_init,
.decode = cinaudio_decode_frame, .decode = cinaudio_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
}; };
...@@ -781,5 +781,5 @@ AVCodec ff_dss_sp_decoder = { ...@@ -781,5 +781,5 @@ AVCodec ff_dss_sp_decoder = {
.priv_data_size = sizeof(DssSpContext), .priv_data_size = sizeof(DssSpContext),
.init = dss_sp_decode_init, .init = dss_sp_decode_init,
.decode = dss_sp_decode_frame, .decode = dss_sp_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
}; };
...@@ -935,7 +935,7 @@ AVCodec ff_evrc_decoder = { ...@@ -935,7 +935,7 @@ AVCodec ff_evrc_decoder = {
.id = AV_CODEC_ID_EVRC, .id = AV_CODEC_ID_EVRC,
.init = evrc_decode_init, .init = evrc_decode_init,
.decode = evrc_decode_frame, .decode = evrc_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.priv_data_size = sizeof(EVRCContext), .priv_data_size = sizeof(EVRCContext),
.priv_class = &evrcdec_class, .priv_class = &evrcdec_class,
}; };
...@@ -147,6 +147,6 @@ AVCodec ff_adpcm_g722_decoder = { ...@@ -147,6 +147,6 @@ AVCodec ff_adpcm_g722_decoder = {
.priv_data_size = sizeof(G722Context), .priv_data_size = sizeof(G722Context),
.init = g722_decode_init, .init = g722_decode_init,
.decode = g722_decode_frame, .decode = g722_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.priv_class = &g722_decoder_class, .priv_class = &g722_decoder_class,
}; };
...@@ -513,7 +513,7 @@ AVCodec ff_adpcm_g726_decoder = { ...@@ -513,7 +513,7 @@ AVCodec ff_adpcm_g726_decoder = {
.init = g726_decode_init, .init = g726_decode_init,
.decode = g726_decode_frame, .decode = g726_decode_frame,
.flush = g726_decode_flush, .flush = g726_decode_flush,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
}; };
#endif #endif
...@@ -526,7 +526,7 @@ AVCodec ff_adpcm_g726le_decoder = { ...@@ -526,7 +526,7 @@ AVCodec ff_adpcm_g726le_decoder = {
.init = g726_decode_init, .init = g726_decode_init,
.decode = g726_decode_frame, .decode = g726_decode_frame,
.flush = g726_decode_flush, .flush = g726_decode_flush,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.long_name = NULL_IF_CONFIG_SMALL("G.726 ADPCM little-endian"), .long_name = NULL_IF_CONFIG_SMALL("G.726 ADPCM little-endian"),
}; };
#endif #endif
...@@ -120,7 +120,7 @@ AVCodec ff_gsm_decoder = { ...@@ -120,7 +120,7 @@ AVCodec ff_gsm_decoder = {
.init = gsm_init, .init = gsm_init,
.decode = gsm_decode_frame, .decode = gsm_decode_frame,
.flush = gsm_flush, .flush = gsm_flush,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
}; };
#endif #endif
#if CONFIG_GSM_MS_DECODER #if CONFIG_GSM_MS_DECODER
...@@ -133,6 +133,6 @@ AVCodec ff_gsm_ms_decoder = { ...@@ -133,6 +133,6 @@ AVCodec ff_gsm_ms_decoder = {
.init = gsm_init, .init = gsm_init,
.decode = gsm_decode_frame, .decode = gsm_decode_frame,
.flush = gsm_flush, .flush = gsm_flush,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
}; };
#endif #endif
...@@ -1484,6 +1484,6 @@ AVCodec ff_ilbc_decoder = { ...@@ -1484,6 +1484,6 @@ AVCodec ff_ilbc_decoder = {
.id = AV_CODEC_ID_ILBC, .id = AV_CODEC_ID_ILBC,
.init = ilbc_decode_init, .init = ilbc_decode_init,
.decode = ilbc_decode_frame, .decode = ilbc_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.priv_data_size = sizeof(ILBCContext), .priv_data_size = sizeof(ILBCContext),
}; };
...@@ -1092,7 +1092,7 @@ AVCodec ff_imc_decoder = { ...@@ -1092,7 +1092,7 @@ AVCodec ff_imc_decoder = {
.close = imc_decode_close, .close = imc_decode_close,
.decode = imc_decode_frame, .decode = imc_decode_frame,
.flush = flush, .flush = flush,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
AV_SAMPLE_FMT_NONE }, AV_SAMPLE_FMT_NONE },
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
......
...@@ -189,7 +189,7 @@ AVCodec ff_libcodec2_decoder = { ...@@ -189,7 +189,7 @@ AVCodec ff_libcodec2_decoder = {
.init = libcodec2_init_decoder, .init = libcodec2_init_decoder,
.close = libcodec2_close, .close = libcodec2_close,
.decode = libcodec2_decode, .decode = libcodec2_decode,
.capabilities = 0, .capabilities = AV_CODEC_CAP_CHANNEL_CONF,
.supported_samplerates = (const int[]){ 8000, 0 }, .supported_samplerates = (const int[]){ 8000, 0 },
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE }, .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_NONE },
.channel_layouts = (const uint64_t[]) { AV_CH_LAYOUT_MONO, 0 }, .channel_layouts = (const uint64_t[]) { AV_CH_LAYOUT_MONO, 0 },
......
...@@ -134,7 +134,7 @@ AVCodec ff_libgsm_decoder = { ...@@ -134,7 +134,7 @@ AVCodec ff_libgsm_decoder = {
.close = libgsm_decode_close, .close = libgsm_decode_close,
.decode = libgsm_decode_frame, .decode = libgsm_decode_frame,
.flush = libgsm_flush, .flush = libgsm_flush,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.wrapper_name = "libgsm", .wrapper_name = "libgsm",
}; };
#endif #endif
...@@ -149,7 +149,7 @@ AVCodec ff_libgsm_ms_decoder = { ...@@ -149,7 +149,7 @@ AVCodec ff_libgsm_ms_decoder = {
.close = libgsm_decode_close, .close = libgsm_decode_close,
.decode = libgsm_decode_frame, .decode = libgsm_decode_frame,
.flush = libgsm_flush, .flush = libgsm_flush,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.wrapper_name = "libgsm", .wrapper_name = "libgsm",
}; };
#endif #endif
...@@ -111,7 +111,7 @@ AVCodec ff_libilbc_decoder = { ...@@ -111,7 +111,7 @@ AVCodec ff_libilbc_decoder = {
.priv_data_size = sizeof(ILBCDecContext), .priv_data_size = sizeof(ILBCDecContext),
.init = ilbc_decode_init, .init = ilbc_decode_init,
.decode = ilbc_decode_frame, .decode = ilbc_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.priv_class = &ilbc_dec_class, .priv_class = &ilbc_dec_class,
}; };
......
...@@ -139,7 +139,7 @@ AVCodec ff_libopencore_amrnb_decoder = { ...@@ -139,7 +139,7 @@ AVCodec ff_libopencore_amrnb_decoder = {
.init = amr_nb_decode_init, .init = amr_nb_decode_init,
.close = amr_nb_decode_close, .close = amr_nb_decode_close,
.decode = amr_nb_decode_frame, .decode = amr_nb_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
}; };
#endif /* CONFIG_LIBOPENCORE_AMRNB_DECODER */ #endif /* CONFIG_LIBOPENCORE_AMRNB_DECODER */
...@@ -379,7 +379,7 @@ AVCodec ff_libopencore_amrwb_decoder = { ...@@ -379,7 +379,7 @@ AVCodec ff_libopencore_amrwb_decoder = {
.init = amr_wb_decode_init, .init = amr_wb_decode_init,
.close = amr_wb_decode_close, .close = amr_wb_decode_close,
.decode = amr_wb_decode_frame, .decode = amr_wb_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.wrapper_name = "libopencore_amrwb", .wrapper_name = "libopencore_amrwb",
}; };
......
...@@ -235,7 +235,7 @@ AVCodec ff_libopus_decoder = { ...@@ -235,7 +235,7 @@ AVCodec ff_libopus_decoder = {
.close = libopus_decode_close, .close = libopus_decode_close,
.decode = libopus_decode, .decode = libopus_decode,
.flush = libopus_flush, .flush = libopus_flush,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT, .sample_fmts = (const enum AVSampleFormat[]){ AV_SAMPLE_FMT_FLT,
AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16,
......
...@@ -199,6 +199,6 @@ AVCodec ff_libspeex_decoder = { ...@@ -199,6 +199,6 @@ AVCodec ff_libspeex_decoder = {
.close = libspeex_decode_close, .close = libspeex_decode_close,
.decode = libspeex_decode_frame, .decode = libspeex_decode_frame,
.flush = libspeex_decode_flush, .flush = libspeex_decode_flush,
.capabilities = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.wrapper_name = "libspeex", .wrapper_name = "libspeex",
}; };
...@@ -217,5 +217,5 @@ AVCodec ff_libvorbis_decoder = { ...@@ -217,5 +217,5 @@ AVCodec ff_libvorbis_decoder = {
.init = oggvorbis_decode_init, .init = oggvorbis_decode_init,
.decode = oggvorbis_decode_frame, .decode = oggvorbis_decode_frame,
.close = oggvorbis_decode_close, .close = oggvorbis_decode_close,
.capabilities = AV_CODEC_CAP_DELAY, .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_CHANNEL_CONF,
}; };
...@@ -385,7 +385,7 @@ AVCodec ff_metasound_decoder = { ...@@ -385,7 +385,7 @@ AVCodec ff_metasound_decoder = {
.init = metasound_decode_init, .init = metasound_decode_init,
.close = ff_twinvq_decode_close, .close = ff_twinvq_decode_close,
.decode = ff_twinvq_decode_frame, .decode = ff_twinvq_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
AV_SAMPLE_FMT_NONE }, AV_SAMPLE_FMT_NONE },
}; };
...@@ -1338,7 +1338,7 @@ AVCodec ff_mlp_decoder = { ...@@ -1338,7 +1338,7 @@ AVCodec ff_mlp_decoder = {
.priv_data_size = sizeof(MLPDecodeContext), .priv_data_size = sizeof(MLPDecodeContext),
.init = mlp_decode_init, .init = mlp_decode_init,
.decode = read_access_unit, .decode = read_access_unit,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
}; };
#endif #endif
...@@ -1351,7 +1351,7 @@ AVCodec ff_truehd_decoder = { ...@@ -1351,7 +1351,7 @@ AVCodec ff_truehd_decoder = {
.priv_data_size = sizeof(MLPDecodeContext), .priv_data_size = sizeof(MLPDecodeContext),
.init = mlp_decode_init, .init = mlp_decode_init,
.decode = read_access_unit, .decode = read_access_unit,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
}; };
#endif /* CONFIG_TRUEHD_DECODER */ #endif /* CONFIG_TRUEHD_DECODER */
...@@ -392,7 +392,7 @@ AVCodec ff_mpc8_decoder = { ...@@ -392,7 +392,7 @@ AVCodec ff_mpc8_decoder = {
.init = mpc8_decode_init, .init = mpc8_decode_init,
.decode = mpc8_decode_frame, .decode = mpc8_decode_frame,
.flush = mpc8_decode_flush, .flush = mpc8_decode_flush,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P, .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P,
AV_SAMPLE_FMT_NONE }, AV_SAMPLE_FMT_NONE },
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
......
...@@ -194,7 +194,7 @@ AVCodec ff_nellymoser_decoder = { ...@@ -194,7 +194,7 @@ AVCodec ff_nellymoser_decoder = {
.init = decode_init, .init = decode_init,
.close = decode_end, .close = decode_end,
.decode = decode_tag, .decode = decode_tag,
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_PARAM_CHANGE, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_PARAM_CHANGE | AV_CODEC_CAP_CHANNEL_CONF,
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLT, .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLT,
AV_SAMPLE_FMT_NONE }, AV_SAMPLE_FMT_NONE },
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
......
...@@ -737,5 +737,5 @@ AVCodec ff_opus_decoder = { ...@@ -737,5 +737,5 @@ AVCodec ff_opus_decoder = {
.close = opus_decode_close, .close = opus_decode_close,
.decode = opus_decode_packet, .decode = opus_decode_packet,
.flush = opus_decode_flush, .flush = opus_decode_flush,
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_CHANNEL_CONF,
}; };
...@@ -307,7 +307,7 @@ AVCodec ff_pcm_bluray_decoder = { ...@@ -307,7 +307,7 @@ AVCodec ff_pcm_bluray_decoder = {
.type = AVMEDIA_TYPE_AUDIO, .type = AVMEDIA_TYPE_AUDIO,
.id = AV_CODEC_ID_PCM_BLURAY, .id = AV_CODEC_ID_PCM_BLURAY,
.decode = pcm_bluray_decode_frame, .decode = pcm_bluray_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.sample_fmts = (const enum AVSampleFormat[]){ .sample_fmts = (const enum AVSampleFormat[]){
AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_NONE AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_NONE
}, },
......
...@@ -797,6 +797,6 @@ AVCodec ff_qcelp_decoder = { ...@@ -797,6 +797,6 @@ AVCodec ff_qcelp_decoder = {
.id = AV_CODEC_ID_QCELP, .id = AV_CODEC_ID_QCELP,
.init = qcelp_decode_init, .init = qcelp_decode_init,
.decode = qcelp_decode_frame, .decode = qcelp_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.priv_data_size = sizeof(QCELPContext), .priv_data_size = sizeof(QCELPContext),
}; };
...@@ -1877,6 +1877,6 @@ AVCodec ff_qdm2_decoder = { ...@@ -1877,6 +1877,6 @@ AVCodec ff_qdm2_decoder = {
.init = qdm2_decode_init, .init = qdm2_decode_init,
.close = qdm2_decode_close, .close = qdm2_decode_close,
.decode = qdm2_decode_frame, .decode = qdm2_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
}; };
...@@ -735,5 +735,5 @@ AVCodec ff_qdmc_decoder = { ...@@ -735,5 +735,5 @@ AVCodec ff_qdmc_decoder = {
.close = qdmc_decode_close, .close = qdmc_decode_close,
.decode = qdmc_decode_frame, .decode = qdmc_decode_frame,
.flush = qdmc_flush, .flush = qdmc_flush,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
}; };
...@@ -134,5 +134,5 @@ AVCodec ff_ra_144_decoder = { ...@@ -134,5 +134,5 @@ AVCodec ff_ra_144_decoder = {
.priv_data_size = sizeof(RA144Context), .priv_data_size = sizeof(RA144Context),
.init = ra144_decode_init, .init = ra144_decode_init,
.decode = ra144_decode_frame, .decode = ra144_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
}; };
...@@ -244,5 +244,5 @@ AVCodec ff_ra_288_decoder = { ...@@ -244,5 +244,5 @@ AVCodec ff_ra_288_decoder = {
.priv_data_size = sizeof(RA288Context), .priv_data_size = sizeof(RA288Context),
.init = ra288_decode_init, .init = ra288_decode_init,
.decode = ra288_decode_frame, .decode = ra288_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
}; };
...@@ -370,7 +370,7 @@ AVCodec ff_sbc_decoder = { ...@@ -370,7 +370,7 @@ AVCodec ff_sbc_decoder = {
.priv_data_size = sizeof(SBCDecContext), .priv_data_size = sizeof(SBCDecContext),
.init = sbc_decode_init, .init = sbc_decode_init,
.decode = sbc_decode_frame, .decode = sbc_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
.channel_layouts = (const uint64_t[]) { AV_CH_LAYOUT_MONO, .channel_layouts = (const uint64_t[]) { AV_CH_LAYOUT_MONO,
AV_CH_LAYOUT_STEREO, 0}, AV_CH_LAYOUT_STEREO, 0},
......
...@@ -570,6 +570,6 @@ AVCodec ff_sipr_decoder = { ...@@ -570,6 +570,6 @@ AVCodec ff_sipr_decoder = {
.priv_data_size = sizeof(SiprContext), .priv_data_size = sizeof(SiprContext),
.init = sipr_decoder_init, .init = sipr_decoder_init,
.decode = sipr_decode_frame, .decode = sipr_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
}; };
...@@ -1081,7 +1081,7 @@ AVCodec ff_sonic_decoder = { ...@@ -1081,7 +1081,7 @@ AVCodec ff_sonic_decoder = {
.init = sonic_decode_init, .init = sonic_decode_init,
.close = sonic_decode_close, .close = sonic_decode_close,
.decode = sonic_decode_frame, .decode = sonic_decode_frame,
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_EXPERIMENTAL, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_EXPERIMENTAL | AV_CODEC_CAP_CHANNEL_CONF,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
}; };
#endif /* CONFIG_SONIC_DECODER */ #endif /* CONFIG_SONIC_DECODER */
......
...@@ -947,7 +947,7 @@ AVCodec ff_tak_decoder = { ...@@ -947,7 +947,7 @@ AVCodec ff_tak_decoder = {
.close = tak_decode_close, .close = tak_decode_close,
.decode = tak_decode_frame, .decode = tak_decode_frame,
.update_thread_context = ONLY_IF_THREADS_ENABLED(update_thread_context), .update_thread_context = ONLY_IF_THREADS_ENABLED(update_thread_context),
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_CHANNEL_CONF,
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_U8P, .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_U8P,
AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_S16P,
AV_SAMPLE_FMT_S32P, AV_SAMPLE_FMT_S32P,
......
...@@ -423,6 +423,6 @@ AVCodec ff_tta_decoder = { ...@@ -423,6 +423,6 @@ AVCodec ff_tta_decoder = {
.init = tta_decode_init, .init = tta_decode_init,
.close = tta_decode_close, .close = tta_decode_close,
.decode = tta_decode_frame, .decode = tta_decode_frame,
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_CHANNEL_CONF,
.priv_class = &tta_decoder_class, .priv_class = &tta_decoder_class,
}; };
...@@ -422,7 +422,7 @@ AVCodec ff_twinvq_decoder = { ...@@ -422,7 +422,7 @@ AVCodec ff_twinvq_decoder = {
.init = twinvq_decode_init, .init = twinvq_decode_init,
.close = ff_twinvq_decode_close, .close = ff_twinvq_decode_close,
.decode = ff_twinvq_decode_frame, .decode = ff_twinvq_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
AV_SAMPLE_FMT_NONE }, AV_SAMPLE_FMT_NONE },
}; };
...@@ -214,5 +214,5 @@ AVCodec ff_adpcm_vima_decoder = { ...@@ -214,5 +214,5 @@ AVCodec ff_adpcm_vima_decoder = {
.id = AV_CODEC_ID_ADPCM_VIMA, .id = AV_CODEC_ID_ADPCM_VIMA,
.init = decode_init, .init = decode_init,
.decode = decode_frame, .decode = decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
}; };
...@@ -1890,7 +1890,7 @@ AVCodec ff_vorbis_decoder = { ...@@ -1890,7 +1890,7 @@ AVCodec ff_vorbis_decoder = {
.close = vorbis_decode_close, .close = vorbis_decode_close,
.decode = vorbis_decode_frame, .decode = vorbis_decode_frame,
.flush = vorbis_decode_flush, .flush = vorbis_decode_flush,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.channel_layouts = ff_vorbis_channel_layouts, .channel_layouts = ff_vorbis_channel_layouts,
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP, .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
......
...@@ -1711,7 +1711,7 @@ AVCodec ff_wavpack_decoder = { ...@@ -1711,7 +1711,7 @@ AVCodec ff_wavpack_decoder = {
.flush = wavpack_decode_flush, .flush = wavpack_decode_flush,
.update_thread_context = ONLY_IF_THREADS_ENABLED(update_thread_context), .update_thread_context = ONLY_IF_THREADS_ENABLED(update_thread_context),
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS |
AV_CODEC_CAP_SLICE_THREADS, AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_CHANNEL_CONF,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP | .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP |
FF_CODEC_CAP_ALLOCATE_PROGRESS, FF_CODEC_CAP_ALLOCATE_PROGRESS,
}; };
...@@ -177,6 +177,6 @@ AVCodec ff_ws_snd1_decoder = { ...@@ -177,6 +177,6 @@ AVCodec ff_ws_snd1_decoder = {
.id = AV_CODEC_ID_WESTWOOD_SND1, .id = AV_CODEC_ID_WESTWOOD_SND1,
.init = ws_snd_decode_init, .init = ws_snd_decode_init,
.decode = ws_snd_decode_frame, .decode = ws_snd_decode_frame,
.capabilities = AV_CODEC_CAP_DR1, .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE,
}; };
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册