X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fmlpdec.c;h=30310db53a4cdc03a650ee910cf1d8ec3d1ed925;hb=2eba6898c96fe3c920da0a0e30b829d05bf5cce1;hp=4dc2d9f3eb803c39311465feade6177aac61ddc3;hpb=0eea212943544d40f99b05571aa7159d78667154;p=ffmpeg diff --git a/libavcodec/mlpdec.c b/libavcodec/mlpdec.c index 4dc2d9f3eb8..30310db53a4 100644 --- a/libavcodec/mlpdec.c +++ b/libavcodec/mlpdec.c @@ -38,42 +38,36 @@ /** number of bits used for VLC lookup - longest Huffman code is 9 */ #define VLC_BITS 9 - -static const char* sample_message = - "Please file a bug report following the instructions at " - "http://libav.org/bugreports.html and include " - "a sample of this file."; - typedef struct SubStream { - //! Set if a valid restart header has been read. Otherwise the substream cannot be decoded. + /// Set if a valid restart header has been read. Otherwise the substream cannot be decoded. uint8_t restart_seen; //@{ /** restart header data */ - //! The type of noise to be used in the rematrix stage. + /// The type of noise to be used in the rematrix stage. uint16_t noise_type; - //! The index of the first channel coded in this substream. + /// The index of the first channel coded in this substream. uint8_t min_channel; - //! The index of the last channel coded in this substream. + /// The index of the last channel coded in this substream. uint8_t max_channel; - //! The number of channels input into the rematrix stage. + /// The number of channels input into the rematrix stage. uint8_t max_matrix_channel; - //! For each channel output by the matrix, the output channel to map it to + /// For each channel output by the matrix, the output channel to map it to uint8_t ch_assign[MAX_CHANNELS]; - //! Channel coding parameters for channels in the substream + /// Channel coding parameters for channels in the substream ChannelParams channel_params[MAX_CHANNELS]; - //! The left shift applied to random noise in 0x31ea substreams. + /// The left shift applied to random noise in 0x31ea substreams. uint8_t noise_shift; - //! The current seed value for the pseudorandom noise generator(s). + /// The current seed value for the pseudorandom noise generator(s). uint32_t noisegen_seed; - //! Set if the substream contains extra info to check the size of VLC blocks. + /// Set if the substream contains extra info to check the size of VLC blocks. uint8_t data_check_present; - //! Bitmask of which parameter sets are conveyed in a decoding parameter block. + /// Bitmask of which parameter sets are conveyed in a decoding parameter block. uint8_t param_presence_flags; #define PARAM_BLOCKSIZE (1 << 7) #define PARAM_MATRIX (1 << 6) @@ -88,32 +82,32 @@ typedef struct SubStream { //@{ /** matrix data */ - //! Number of matrices to be applied. + /// Number of matrices to be applied. uint8_t num_primitive_matrices; - //! matrix output channel + /// matrix output channel uint8_t matrix_out_ch[MAX_MATRICES]; - //! Whether the LSBs of the matrix output are encoded in the bitstream. + /// Whether the LSBs of the matrix output are encoded in the bitstream. uint8_t lsb_bypass[MAX_MATRICES]; - //! Matrix coefficients, stored as 2.14 fixed point. + /// Matrix coefficients, stored as 2.14 fixed point. int32_t matrix_coeff[MAX_MATRICES][MAX_CHANNELS]; - //! Left shift to apply to noise values in 0x31eb substreams. + /// Left shift to apply to noise values in 0x31eb substreams. uint8_t matrix_noise_shift[MAX_MATRICES]; //@} - //! Left shift to apply to Huffman-decoded residuals. + /// Left shift to apply to Huffman-decoded residuals. uint8_t quant_step_size[MAX_CHANNELS]; - //! number of PCM samples in current audio block + /// number of PCM samples in current audio block uint16_t blocksize; - //! Number of PCM samples decoded so far in this frame. + /// Number of PCM samples decoded so far in this frame. uint16_t blockpos; - //! Left shift to apply to decoded PCM values to get final 24-bit output. + /// Left shift to apply to decoded PCM values to get final 24-bit output. int8_t output_shift[MAX_CHANNELS]; - //! Running XOR of all output samples. + /// Running XOR of all output samples. int32_t lossless_check_data; } SubStream; @@ -122,21 +116,21 @@ typedef struct MLPDecodeContext { AVCodecContext *avctx; AVFrame frame; - //! Current access unit being read has a major sync. + /// Current access unit being read has a major sync. int is_major_sync_unit; - //! Set if a valid major sync block has been read. Otherwise no decoding is possible. + /// Set if a valid major sync block has been read. Otherwise no decoding is possible. uint8_t params_valid; - //! Number of substreams contained within this stream. + /// Number of substreams contained within this stream. uint8_t num_substreams; - //! Index of the last substream to decode - further substreams are skipped. + /// Index of the last substream to decode - further substreams are skipped. uint8_t max_decoded_substream; - //! number of PCM samples contained in each frame + /// number of PCM samples contained in each frame int access_unit_size; - //! next power of two above the number of samples in each frame + /// next power of two above the number of samples in each frame int access_unit_size_pow2; SubStream substream[MAX_SUBSTREAMS]; @@ -238,7 +232,7 @@ static av_cold int mlp_decode_init(AVCodecContext *avctx) m->avctx = avctx; for (substr = 0; substr < MAX_SUBSTREAMS; substr++) m->substream[substr].lossless_check_data = 0xffffffff; - dsputil_init(&m->dsp, avctx); + ff_dsputil_init(&m->dsp, avctx); avcodec_get_frame_defaults(&m->frame); avctx->coded_frame = &m->frame; @@ -305,10 +299,10 @@ static int read_major_sync(MLPDecodeContext *m, GetBitContext *gb) return AVERROR_INVALIDDATA; } if (mh.num_substreams > MAX_SUBSTREAMS) { - av_log(m->avctx, AV_LOG_ERROR, + av_log_ask_for_sample(m->avctx, "Number of substreams %d is larger than the maximum supported " - "by the decoder. %s\n", mh.num_substreams, sample_message); - return AVERROR_INVALIDDATA; + "by the decoder.\n", mh.num_substreams); + return AVERROR_PATCHWELCOME; } m->access_unit_size = mh.access_unit_size; @@ -387,10 +381,10 @@ static int read_restart_header(MLPDecodeContext *m, GetBitContext *gbp, /* This should happen for TrueHD streams with >6 channels and MLP's noise * type. It is not yet known if this is allowed. */ if (s->max_channel > MAX_MATRIX_CHANNEL_MLP && !s->noise_type) { - av_log(m->avctx, AV_LOG_ERROR, + av_log_ask_for_sample(m->avctx, "Number of channels %d is larger than the maximum supported " - "by the decoder. %s\n", s->max_channel+2, sample_message); - return AVERROR_INVALIDDATA; + "by the decoder.\n", s->max_channel + 2); + return AVERROR_PATCHWELCOME; } if (s->min_channel > s->max_channel) { @@ -432,10 +426,10 @@ static int read_restart_header(MLPDecodeContext *m, GetBitContext *gbp, for (ch = 0; ch <= s->max_matrix_channel; ch++) { int ch_assign = get_bits(gbp, 6); if (ch_assign > s->max_matrix_channel) { - av_log(m->avctx, AV_LOG_ERROR, - "Assignment of matrix channel %d to invalid output channel %d. %s\n", - ch, ch_assign, sample_message); - return AVERROR_INVALIDDATA; + av_log_ask_for_sample(m->avctx, + "Assignment of matrix channel %d to invalid output channel %d.\n", + ch, ch_assign); + return AVERROR_PATCHWELCOME; } s->ch_assign[ch_assign] = ch; } @@ -763,8 +757,8 @@ static int read_block_data(MLPDecodeContext *m, GetBitContext *gbp, if (s->data_check_present) { expected_stream_pos = get_bits_count(gbp); expected_stream_pos += get_bits(gbp, 16); - av_log(m->avctx, AV_LOG_WARNING, "This file contains some features " - "we have not tested yet. %s\n", sample_message); + av_log_ask_for_sample(m->avctx, "This file contains some features " + "we have not tested yet.\n"); } if (s->blockpos + s->blocksize > m->access_unit_size) { @@ -1158,7 +1152,7 @@ AVCodec ff_mlp_decoder = { .init = mlp_decode_init, .decode = read_access_unit, .capabilities = CODEC_CAP_DR1, - .long_name = NULL_IF_CONFIG_SMALL("MLP (Meridian Lossless Packing)"), + .long_name = NULL_IF_CONFIG_SMALL("MLP (Meridian Lossless Packing)"), }; #if CONFIG_TRUEHD_DECODER @@ -1170,6 +1164,6 @@ AVCodec ff_truehd_decoder = { .init = mlp_decode_init, .decode = read_access_unit, .capabilities = CODEC_CAP_DR1, - .long_name = NULL_IF_CONFIG_SMALL("TrueHD"), + .long_name = NULL_IF_CONFIG_SMALL("TrueHD"), }; #endif /* CONFIG_TRUEHD_DECODER */