History

Merge remote branch 'qatar/master'

* qatar/master: vorbisdec: Rename silly "class_" variable to plain "class". simple_idct_alpha: Drop some useless casts. Simplify av_log_missing_feature(). ac3enc: remove check for mismatching channels and channel_layout If AVCodecContext.channels is 0 and AVCodecContext.channel_layout is non-zero, set channels based on channel_layout. If AVCodecContext.channel_layout and AVCodecContext.channels are both non-zero, check to make sure they do not contradict eachother. cosmetics: indentation Check AVCodec.supported_samplerates and AVCodec.channel_layouts in avcodec_open(). aacdec: remove sf_scale and sf_offset. aacdec: use a scale of 2 in the LTP MDCT rather than doubling the coefficient table values from the spec. Define POW_SF2_ZERO in aac.h and use for ff_aac_pow2sf_tabp[] offsets instead of hardcoding 200 everywhere. Large intensity stereo and PNS indices are legal. Clip them instead of erroring out. A magnitude of 100 corresponds to 2^25 so the will most likely result in clipped output anyway. qpeg: use reget_buffer() in decode_frame() ultimotion: use reget_buffer() in ulti_decode_frame() smacker: remove unnecessary call to avctx->release_buffer in decode_frame() avparser: don't av_malloc(0).

Michael Niedermayer committed 15 years ago

Commit 06651992 parents e5d80c7 b23952612 files · +96 −78Browse files

Unified · Split

12 files
  1. libavcodec/aac.h +1 −2
  2. libavcodec/aac_tablegen.h +2 −1
  3. libavcodec/aaccoder.c +4 −4
  4. libavcodec/aacdec.c +23 −28
  5. libavcodec/aacdectab.h +3 −3
  6. libavcodec/ac3enc.c +0 −2
  7. libavcodec/alpha/simple_idct_alpha.c +7 −7
  8. libavcodec/qpeg.c +3 −6
  9. libavcodec/smacker.c +0 −2
  10. libavcodec/ulti.c +2 −5
  11. libavcodec/utils.c +44 −11
  12. libavcodec/vorbisdec.c +7 −7
libavcodec/aac.h+1−2
@@ -130,6 +130,7 @@ typedef struct { · 129 unmodified lines
130#define SCALE_MAX_POS 255 ///< scalefactor index maximum value130#define SCALE_MAX_POS 255 ///< scalefactor index maximum value
131#define SCALE_MAX_DIFF 60 ///< maximum scalefactor difference allowed by standard131#define SCALE_MAX_DIFF 60 ///< maximum scalefactor difference allowed by standard
132#define SCALE_DIFF_ZERO 60 ///< codebook index corresponding to zero scalefactor indices difference132#define SCALE_DIFF_ZERO 60 ///< codebook index corresponding to zero scalefactor indices difference
133#define POW_SF2_ZERO 200 ///< ff_aac_pow2sf_tab index corresponding to pow(2, 0);
133 134
134/**135/**
135 * Long Term Prediction136 * Long Term Prediction
@@ -292,8 +293,6 @@ typedef struct { · 156 unmodified lines
292 * @{293 * @{
293 */294 */
294 float *output_data[MAX_CHANNELS]; ///< Points to each element's 'ret' buffer (PCM output).295 float *output_data[MAX_CHANNELS]; ///< Points to each element's 'ret' buffer (PCM output).
295 float sf_scale; ///< Pre-scale for correct IMDCT and dsp.float_to_int16.
296 int sf_offset; ///< offset into pow2sf_tab as appropriate for dsp.float_to_int16
297 /** @} */296 /** @} */
298 297
299 DECLARE_ALIGNED(32, float, temp)[128];298 DECLARE_ALIGNED(32, float, temp)[128];
libavcodec/aac_tablegen.h+2−1
@@ -29,13 +29,14 @@ · 28 unmodified lines
29#include "libavcodec/aac_tables.h"29#include "libavcodec/aac_tables.h"
30#else30#else
31#include "libavutil/mathematics.h"31#include "libavutil/mathematics.h"
32#include "libavcodec/aac.h"
32float ff_aac_pow2sf_tab[428];33float ff_aac_pow2sf_tab[428];
33 34
34void ff_aac_tableinit(void)35void ff_aac_tableinit(void)
35{36{
36 int i;37 int i;
37 for (i = 0; i < 428; i++)38 for (i = 0; i < 428; i++)
38 ff_aac_pow2sf_tab[i] = pow(2, (i - 200) / 4.);39 ff_aac_pow2sf_tab[i] = pow(2, (i - POW_SF2_ZERO) / 4.);
39}40}
40#endif /* CONFIG_HARDCODED_TABLES */41#endif /* CONFIG_HARDCODED_TABLES */
41 42
libavcodec/aaccoder.c+4−4
@@ -109,8 +109,8 @@ static av_always_inline float quantize_and_encode_band_cost_template( · 108 unmodified lines
109 int *bits, int BT_ZERO, int BT_UNSIGNED,109 int *bits, int BT_ZERO, int BT_UNSIGNED,
110 int BT_PAIR, int BT_ESC)110 int BT_PAIR, int BT_ESC)
111{111{
112 const float IQ = ff_aac_pow2sf_tab[200 + scale_idx - SCALE_ONE_POS + SCALE_DIV_512];112 const float IQ = ff_aac_pow2sf_tab[POW_SF2_ZERO + scale_idx - SCALE_ONE_POS + SCALE_DIV_512];
113 const float Q = ff_aac_pow2sf_tab[200 - scale_idx + SCALE_ONE_POS - SCALE_DIV_512];113 const float Q = ff_aac_pow2sf_tab[POW_SF2_ZERO - scale_idx + SCALE_ONE_POS - SCALE_DIV_512];
114 const float CLIPPED_ESCAPE = 165140.0f*IQ;114 const float CLIPPED_ESCAPE = 165140.0f*IQ;
115 int i, j;115 int i, j;
116 float cost = 0;116 float cost = 0;
@@ -281,7 +281,7 @@ static float find_max_val(int group_len, int swb_size, const float *scaled) { · 164 unmodified lines
281}281}
282 282
283static int find_min_book(float maxval, int sf) {283static int find_min_book(float maxval, int sf) {
284 float Q = ff_aac_pow2sf_tab[200 - sf + SCALE_ONE_POS - SCALE_DIV_512];284 float Q = ff_aac_pow2sf_tab[POW_SF2_ZERO - sf + SCALE_ONE_POS - SCALE_DIV_512];
285 float Q34 = sqrtf(Q * sqrtf(Q));285 float Q34 = sqrtf(Q * sqrtf(Q));
286 int qmaxval, cb;286 int qmaxval, cb;
287 qmaxval = maxval * Q34 + 0.4054f;287 qmaxval = maxval * Q34 + 0.4054f;
@@ -956,7 +956,7 @@ static void search_for_quantizers_faac(AVCodecContext *avctx, AACEncContext *s, · 668 unmodified lines
956 dist -= b;956 dist -= b;
957 }957 }
958 dist *= 1.0f / 512.0f / lambda;958 dist *= 1.0f / 512.0f / lambda;
959 quant_max = quant(maxq[w*16+g], ff_aac_pow2sf_tab[200 - scf + SCALE_ONE_POS - SCALE_DIV_512]);959 quant_max = quant(maxq[w*16+g], ff_aac_pow2sf_tab[POW_SF2_ZERO - scf + SCALE_ONE_POS - SCALE_DIV_512]);
960 if (quant_max >= 8191) { // too much, return to the previous quantizer960 if (quant_max >= 8191) { // too much, return to the previous quantizer
961 sce->sf_idx[w*16+g] = prev_scf;961 sce->sf_idx[w*16+g] = prev_scf;
962 break;962 break;
libavcodec/aacdec.c+23−28
@@ -579,12 +579,6 @@ static av_cold int aac_decode_init(AVCodecContext *avctx) · 578 unmodified lines
579 579
580 ac->random_state = 0x1f2e3d4c;580 ac->random_state = 0x1f2e3d4c;
581 581
582 // -1024 - Compensate wrong IMDCT method.
583 // 60 - Required to scale values to the correct range [-32768,32767]
584 // for float to int16 conversion. (1 << (60 / 4)) == 32768
585 ac->sf_scale = 1. / -1024.;
586 ac->sf_offset = 60;
587
588 ff_aac_tableinit();582 ff_aac_tableinit();
589 583
590 INIT_VLC_STATIC(&vlc_scalefactors,7,FF_ARRAY_ELEMS(ff_aac_scalefactor_code),584 INIT_VLC_STATIC(&vlc_scalefactors,7,FF_ARRAY_ELEMS(ff_aac_scalefactor_code),
@@ -592,9 +586,9 @@ static av_cold int aac_decode_init(AVCodecContext *avctx) · 1 unmodified line
592 ff_aac_scalefactor_code, sizeof(ff_aac_scalefactor_code[0]), sizeof(ff_aac_scalefactor_code[0]),586 ff_aac_scalefactor_code, sizeof(ff_aac_scalefactor_code[0]), sizeof(ff_aac_scalefactor_code[0]),
593 352);587 352);
594 588
595 ff_mdct_init(&ac->mdct, 11, 1, 1.0);589 ff_mdct_init(&ac->mdct, 11, 1, 1.0/1024.0);
596 ff_mdct_init(&ac->mdct_small, 8, 1, 1.0);590 ff_mdct_init(&ac->mdct_small, 8, 1, 1.0/128.0);
597 ff_mdct_init(&ac->mdct_ltp, 11, 0, 1.0);591 ff_mdct_init(&ac->mdct_ltp, 11, 0, -2.0);
598 // window initialization592 // window initialization
599 ff_kbd_window_init(ff_aac_kbd_long_1024, 4.0, 1024);593 ff_kbd_window_init(ff_aac_kbd_long_1024, 4.0, 1024);
600 ff_kbd_window_init(ff_aac_kbd_short_128, 6.0, 128);594 ff_kbd_window_init(ff_aac_kbd_short_128, 6.0, 128);
@@ -652,7 +646,7 @@ static void decode_ltp(AACContext *ac, LongTermPrediction *ltp, · 51 unmodified lines
652 int sfb;646 int sfb;
653 647
654 ltp->lag = get_bits(gb, 11);648 ltp->lag = get_bits(gb, 11);
655 ltp->coef = ltp_coef[get_bits(gb, 3)] * ac->sf_scale;649 ltp->coef = ltp_coef[get_bits(gb, 3)];
656 for (sfb = 0; sfb < FFMIN(max_sfb, MAX_LTP_LONG_SFB); sfb++)650 for (sfb = 0; sfb < FFMIN(max_sfb, MAX_LTP_LONG_SFB); sfb++)
657 ltp->used[sfb] = get_bits1(gb);651 ltp->used[sfb] = get_bits1(gb);
658}652}
@@ -790,9 +784,9 @@ static int decode_scalefactors(AACContext *ac, float sf[120], GetBitContext *gb, · 131 unmodified lines
790 enum BandType band_type[120],784 enum BandType band_type[120],
791 int band_type_run_end[120])785 int band_type_run_end[120])
792{786{
793 const int sf_offset = ac->sf_offset + (ics->window_sequence[0] == EIGHT_SHORT_SEQUENCE ? 12 : 0);
794 int g, i, idx = 0;787 int g, i, idx = 0;
795 int offset[3] = { global_gain, global_gain - 90, 100 };788 int offset[3] = { global_gain, global_gain - 90, 0 };
789 int clipped_offset;
796 int noise_flag = 1;790 int noise_flag = 1;
797 static const char *sf_str[3] = { "Global gain", "Noise gain", "Intensity stereo position" };791 static const char *sf_str[3] = { "Global gain", "Noise gain", "Intensity stereo position" };
798 for (g = 0; g < ics->num_window_groups; g++) {792 for (g = 0; g < ics->num_window_groups; g++) {
@@ -804,12 +798,14 @@ static int decode_scalefactors(AACContext *ac, float sf[120], GetBitContext *gb, · 5 unmodified lines
804 } else if ((band_type[idx] == INTENSITY_BT) || (band_type[idx] == INTENSITY_BT2)) {798 } else if ((band_type[idx] == INTENSITY_BT) || (band_type[idx] == INTENSITY_BT2)) {
805 for (; i < run_end; i++, idx++) {799 for (; i < run_end; i++, idx++) {
806 offset[2] += get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;800 offset[2] += get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
807 if (offset[2] > 255U) {801 clipped_offset = av_clip(offset[2], -155, 100);
808 av_log(ac->avctx, AV_LOG_ERROR,802 if (offset[2] != clipped_offset) {
809 "%s (%d) out of range.\n", sf_str[2], offset[2]);803 av_log_ask_for_sample(ac->avctx, "Intensity stereo "
810 return -1;804 "position clipped (%d -> %d).\nIf you heard an "
805 "audible artifact, there may be a bug in the "
806 "decoder. ", offset[2], clipped_offset);
811 }807 }
812 sf[idx] = ff_aac_pow2sf_tab[-offset[2] + 300];808 sf[idx] = ff_aac_pow2sf_tab[-clipped_offset + POW_SF2_ZERO];
813 }809 }
814 } else if (band_type[idx] == NOISE_BT) {810 } else if (band_type[idx] == NOISE_BT) {
815 for (; i < run_end; i++, idx++) {811 for (; i < run_end; i++, idx++) {
@@ -817,12 +813,14 @@ static int decode_scalefactors(AACContext *ac, float sf[120], GetBitContext *gb, · 1 unmodified line
817 offset[1] += get_bits(gb, 9) - 256;813 offset[1] += get_bits(gb, 9) - 256;
818 else814 else
819 offset[1] += get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;815 offset[1] += get_vlc2(gb, vlc_scalefactors.table, 7, 3) - 60;
820 if (offset[1] > 255U) {816 clipped_offset = av_clip(offset[1], -100, 155);
821 av_log(ac->avctx, AV_LOG_ERROR,817 if (offset[2] != clipped_offset) {
822 "%s (%d) out of range.\n", sf_str[1], offset[1]);818 av_log_ask_for_sample(ac->avctx, "Noise gain clipped "
823 return -1;819 "(%d -> %d).\nIf you heard an audible "
820 "artifact, there may be a bug in the decoder. ",
821 offset[1], clipped_offset);
824 }822 }
825 sf[idx] = -ff_aac_pow2sf_tab[offset[1] + sf_offset + 100];823 sf[idx] = -ff_aac_pow2sf_tab[clipped_offset + POW_SF2_ZERO];
826 }824 }
827 } else {825 } else {
828 for (; i < run_end; i++, idx++) {826 for (; i < run_end; i++, idx++) {
@@ -832,7 +830,7 @@ static int decode_scalefactors(AACContext *ac, float sf[120], GetBitContext *gb, · 3 unmodified lines
832 "%s (%d) out of range.\n", sf_str[0], offset[0]);830 "%s (%d) out of range.\n", sf_str[0], offset[0]);
833 return -1;831 return -1;
834 }832 }
835 sf[idx] = -ff_aac_pow2sf_tab[ offset[0] + sf_offset];833 sf[idx] = -ff_aac_pow2sf_tab[offset[0] - 100 + POW_SF2_ZERO];
836 }834 }
837 }835 }
838 }836 }
@@ -1243,7 +1241,6 @@ static av_always_inline float flt16_trunc(float pf) · 404 unmodified lines
1243}1241}
1244 1242
1245static av_always_inline void predict(PredictorState *ps, float *coef,1243static av_always_inline void predict(PredictorState *ps, float *coef,
1246 float sf_scale, float inv_sf_scale,
1247 int output_enable)1244 int output_enable)
1248{1245{
1249 const float a = 0.953125; // 61.0 / 641246 const float a = 0.953125; // 61.0 / 64
@@ -1260,9 +1257,9 @@ static av_always_inline void predict(PredictorState *ps, float *coef, · 10 unmodified lines
1260 1257
1261 pv = flt16_round(k1 * r0 + k2 * r1);1258 pv = flt16_round(k1 * r0 + k2 * r1);
1262 if (output_enable)1259 if (output_enable)
1263 *coef += pv * sf_scale;1260 *coef += pv;
1264 1261
1265 e0 = *coef * inv_sf_scale;1262 e0 = *coef;
1266 e1 = e0 - k1 * r0;1263 e1 = e0 - k1 * r0;
1267 1264
1268 ps->cor1 = flt16_trunc(alpha * cor1 + r1 * e1);1265 ps->cor1 = flt16_trunc(alpha * cor1 + r1 * e1);
@@ -1280,7 +1277,6 @@ static av_always_inline void predict(PredictorState *ps, float *coef, · 11 unmodified lines
1280static void apply_prediction(AACContext *ac, SingleChannelElement *sce)1277static void apply_prediction(AACContext *ac, SingleChannelElement *sce)
1281{1278{
1282 int sfb, k;1279 int sfb, k;
1283 float sf_scale = ac->sf_scale, inv_sf_scale = 1 / ac->sf_scale;
1284 1280
1285 if (!sce->ics.predictor_initialized) {1281 if (!sce->ics.predictor_initialized) {
1286 reset_all_predictors(sce->predictor_state);1282 reset_all_predictors(sce->predictor_state);
@@ -1291,7 +1287,6 @@ static void apply_prediction(AACContext *ac, SingleChannelElement *sce) · 4 unmodified lines
1291 for (sfb = 0; sfb < ff_aac_pred_sfb_max[ac->m4ac.sampling_index]; sfb++) {1287 for (sfb = 0; sfb < ff_aac_pred_sfb_max[ac->m4ac.sampling_index]; sfb++) {
1292 for (k = sce->ics.swb_offset[sfb]; k < sce->ics.swb_offset[sfb + 1]; k++) {1288 for (k = sce->ics.swb_offset[sfb]; k < sce->ics.swb_offset[sfb + 1]; k++) {
1293 predict(&sce->predictor_state[k], &sce->coeffs[k],1289 predict(&sce->predictor_state[k], &sce->coeffs[k],
1294 sf_scale, inv_sf_scale,
1295 sce->ics.predictor_present && sce->ics.prediction_used[sfb]);1290 sce->ics.predictor_present && sce->ics.prediction_used[sfb]);
1296 }1291 }
1297 }1292 }
libavcodec/aacdectab.h+3−3
@@ -36,11 +36,11 @@ · 35 unmodified lines
36#include <stdint.h>36#include <stdint.h>
37 37
38/* @name ltp_coef38/* @name ltp_coef
39 * Table of the LTP coefficient (multiplied by 2)39 * Table of the LTP coefficients
40 */40 */
41static const float ltp_coef[8] = {41static const float ltp_coef[8] = {
42 1.141658, 1.393232, 1.626008, 1.822608,42 0.570829, 0.696616, 0.813004, 0.911304,
43 1.969800, 2.135788, 2.2389202, 2.739066,43 0.984900, 1.067894, 1.194601, 1.369533,
44};44};
45 45
46/* @name tns_tmp2_map46/* @name tns_tmp2_map
libavcodec/ac3enc.c+0−2
@@ -1962,8 +1962,6 @@ static av_cold int set_channel_info(AC3EncodeContext *s, int channels, · 1961 unmodified lines
1962 ch_layout = *channel_layout;1962 ch_layout = *channel_layout;
1963 if (!ch_layout)1963 if (!ch_layout)
1964 ch_layout = avcodec_guess_channel_layout(channels, CODEC_ID_AC3, NULL);1964 ch_layout = avcodec_guess_channel_layout(channels, CODEC_ID_AC3, NULL);
1965 if (av_get_channel_layout_nb_channels(ch_layout) != channels)
1966 return AVERROR(EINVAL);
1967 1965
1968 s->lfe_on = !!(ch_layout & AV_CH_LOW_FREQUENCY);1966 s->lfe_on = !!(ch_layout & AV_CH_LOW_FREQUENCY);
1969 s->channels = channels;1967 s->channels = channels;
libavcodec/alpha/simple_idct_alpha.c+7−7
@@ -33,13 +33,13 @@ · 32 unmodified lines
33// cos(i * M_PI / 16) * sqrt(2) * (1 << 14)33// cos(i * M_PI / 16) * sqrt(2) * (1 << 14)
34// W4 is actually exactly 16384, but using 16383 works around34// W4 is actually exactly 16384, but using 16383 works around
35// accumulating rounding errors for some encoders35// accumulating rounding errors for some encoders
36#define W1 ((int_fast32_t) 22725)36#define W1 22725
37#define W2 ((int_fast32_t) 21407)37#define W2 21407
38#define W3 ((int_fast32_t) 19266)38#define W3 19266
39#define W4 ((int_fast32_t) 16383)39#define W4 16383
40#define W5 ((int_fast32_t) 12873)40#define W5 12873
41#define W6 ((int_fast32_t) 8867)41#define W6 8867
42#define W7 ((int_fast32_t) 4520)42#define W7 4520
43#define ROW_SHIFT 1143#define ROW_SHIFT 11
44#define COL_SHIFT 2044#define COL_SHIFT 20
45 45
libavcodec/qpeg.c+3−6
@@ -259,12 +259,9 @@ static int decode_frame(AVCodecContext *avctx, · 258 unmodified lines
259 int delta;259 int delta;
260 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL);260 const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL);
261 261
262 if(p->data[0])262 p->reference = 3;
263 avctx->release_buffer(avctx, p);263 if (avctx->reget_buffer(avctx, p) < 0) {
264 264 av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n");
265 p->reference= 0;
266 if(avctx->get_buffer(avctx, p) < 0){
267 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
268 return -1;265 return -1;
269 }266 }
270 outdata = a->pic.data[0];267 outdata = a->pic.data[0];
libavcodec/smacker.c+0−2
@@ -360,8 +360,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac · 359 unmodified lines
360 360
361 if(buf_size <= 769)361 if(buf_size <= 769)
362 return 0;362 return 0;
363 if(smk->pic.data[0])
364 avctx->release_buffer(avctx, &smk->pic);
365 363
366 smk->pic.reference = 1;364 smk->pic.reference = 1;
367 smk->pic.buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_PRESERVE | FF_BUFFER_HINTS_REUSABLE;365 smk->pic.buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_PRESERVE | FF_BUFFER_HINTS_REUSABLE;
libavcodec/ulti.c+2−5
@@ -224,13 +224,10 @@ static int ulti_decode_frame(AVCodecContext *avctx, · 223 unmodified lines
224 int skip;224 int skip;
225 int tmp;225 int tmp;
226 226
227 if(s->frame.data[0])
228 avctx->release_buffer(avctx, &s->frame);
229
230 s->frame.reference = 1;227 s->frame.reference = 1;
231 s->frame.buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_PRESERVE | FF_BUFFER_HINTS_REUSABLE;228 s->frame.buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_PRESERVE | FF_BUFFER_HINTS_REUSABLE;
232 if(avctx->get_buffer(avctx, &s->frame) < 0) {229 if (avctx->reget_buffer(avctx, &s->frame) < 0) {
233 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");230 av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n");
234 return -1;231 return -1;
235 }232 }
236 233
libavcodec/utils.c+44−11
@@ -555,15 +555,50 @@ int attribute_align_arg avcodec_open(AVCodecContext *avctx, AVCodec *codec) · 554 unmodified lines
555 ret = AVERROR(EINVAL);555 ret = AVERROR(EINVAL);
556 goto free_and_end;556 goto free_and_end;
557 }557 }
558 if (avctx->codec->sample_fmts && avctx->codec->encode) {558 if (avctx->codec->encode) {
559 int i;559 int i;
560 for (i = 0; avctx->codec->sample_fmts[i] != AV_SAMPLE_FMT_NONE; i++)560 if (avctx->codec->sample_fmts) {
561 if (avctx->sample_fmt == avctx->codec->sample_fmts[i])561 for (i = 0; avctx->codec->sample_fmts[i] != AV_SAMPLE_FMT_NONE; i++)
562 break;562 if (avctx->sample_fmt == avctx->codec->sample_fmts[i])
563 if (avctx->codec->sample_fmts[i] == AV_SAMPLE_FMT_NONE) {563 break;
564 av_log(avctx, AV_LOG_ERROR, "Specified sample_fmt is not supported.\n");564 if (avctx->codec->sample_fmts[i] == AV_SAMPLE_FMT_NONE) {
565 ret = AVERROR(EINVAL);565 av_log(avctx, AV_LOG_ERROR, "Specified sample_fmt is not supported.\n");
566 goto free_and_end;566 ret = AVERROR(EINVAL);
567 goto free_and_end;
568 }
569 }
570 if (avctx->codec->supported_samplerates) {
571 for (i = 0; avctx->codec->supported_samplerates[i] != 0; i++)
572 if (avctx->sample_rate == avctx->codec->supported_samplerates[i])
573 break;
574 if (avctx->codec->supported_samplerates[i] == 0) {
575 av_log(avctx, AV_LOG_ERROR, "Specified sample_rate is not supported\n");
576 ret = AVERROR(EINVAL);
577 goto free_and_end;
578 }
579 }
580 if (avctx->codec->channel_layouts) {
581 if (!avctx->channel_layout) {
582 av_log(avctx, AV_LOG_WARNING, "channel_layout not specified\n");
583 } else {
584 for (i = 0; avctx->codec->channel_layouts[i] != 0; i++)
585 if (avctx->channel_layout == avctx->codec->channel_layouts[i])
586 break;
587 if (avctx->codec->channel_layouts[i] == 0) {
588 av_log(avctx, AV_LOG_ERROR, "Specified channel_layout is not supported\n");
589 ret = AVERROR(EINVAL);
590 goto free_and_end;
591 }
592 }
593 }
594 if (avctx->channel_layout && avctx->channels) {
595 if (av_get_channel_layout_nb_channels(avctx->channel_layout) != avctx->channels) {
596 av_log(avctx, AV_LOG_ERROR, "channel layout does not match number of channels\n");
597 ret = AVERROR(EINVAL);
598 goto free_and_end;
599 }
600 } else if (avctx->channel_layout) {
601 avctx->channels = av_get_channel_layout_nb_channels(avctx->channel_layout);
567 }602 }
568 }603 }
569 604
@@ -1194,11 +1229,9 @@ void av_log_missing_feature(void *avc, const char *feature, int want_sample) · 624 unmodified lines
1194 av_log(avc, AV_LOG_WARNING, "%s not implemented. Update your FFmpeg "1229 av_log(avc, AV_LOG_WARNING, "%s not implemented. Update your FFmpeg "
1195 "version to the newest one from Git. If the problem still "1230 "version to the newest one from Git. If the problem still "
1196 "occurs, it means that your file has a feature which has not "1231 "occurs, it means that your file has a feature which has not "
1197 "been implemented.", feature);1232 "been implemented.\n", feature);
1198 if(want_sample)1233 if(want_sample)
1199 av_log_ask_for_sample(avc, NULL);1234 av_log_ask_for_sample(avc, NULL);
1200 else
1201 av_log(avc, AV_LOG_WARNING, "\n");
1202}1235}
1203 1236
1204void av_log_ask_for_sample(void *avc, const char *msg, ...)1237void av_log_ask_for_sample(void *avc, const char *msg, ...)
libavcodec/vorbisdec.c+7−7
@@ -1138,7 +1138,7 @@ static int vorbis_floor1_decode(vorbis_context *vc, · 1137 unmodified lines
1138 uint_fast16_t floor1_Y[258];1138 uint_fast16_t floor1_Y[258];
1139 uint_fast16_t floor1_Y_final[258];1139 uint_fast16_t floor1_Y_final[258];
1140 int floor1_flag[258];1140 int floor1_flag[258];
1141 uint_fast8_t class_;1141 uint_fast8_t class;
1142 uint_fast8_t cdim;1142 uint_fast8_t cdim;
1143 uint_fast8_t cbits;1143 uint_fast8_t cbits;
1144 uint_fast8_t csub;1144 uint_fast8_t csub;
@@ -1162,20 +1162,20 @@ static int vorbis_floor1_decode(vorbis_context *vc, · 17 unmodified lines
1162 1162
1163 offset = 2;1163 offset = 2;
1164 for (i = 0; i < vf->partitions; ++i) {1164 for (i = 0; i < vf->partitions; ++i) {
1165 class_ = vf->partition_class[i];1165 class = vf->partition_class[i];
1166 cdim = vf->class_dimensions[class_];1166 cdim = vf->class_dimensions[class];
1167 cbits = vf->class_subclasses[class_];1167 cbits = vf->class_subclasses[class];
1168 csub = (1 << cbits) - 1;1168 csub = (1 << cbits) - 1;
1169 cval = 0;1169 cval = 0;
1170 1170
1171 AV_DEBUG("Cbits %d \n", cbits);1171 AV_DEBUG("Cbits %d \n", cbits);
1172 1172
1173 if (cbits) // this reads all subclasses for this partition's class1173 if (cbits) // this reads all subclasses for this partition's class
1174 cval = get_vlc2(gb, vc->codebooks[vf->class_masterbook[class_]].vlc.table,1174 cval = get_vlc2(gb, vc->codebooks[vf->class_masterbook[class]].vlc.table,
1175 vc->codebooks[vf->class_masterbook[class_]].nb_bits, 3);1175 vc->codebooks[vf->class_masterbook[class]].nb_bits, 3);
1176 1176
1177 for (j = 0; j < cdim; ++j) {1177 for (j = 0; j < cdim; ++j) {
1178 book = vf->subclass_books[class_][cval & csub];1178 book = vf->subclass_books[class][cval & csub];
1179 1179
1180 AV_DEBUG("book %d Cbits %d cval %d bits:%d \n", book, cbits, cval, get_bits_count(gb));1180 AV_DEBUG("book %d Cbits %d cval %d bits:%d \n", book, cbits, cval, get_bits_count(gb));
1181 1181

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t