* 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).
Unified · Split
| @@ -130,6 +130,7 @@ typedef struct { · 129 unmodified lines | |||
| 130 | #define SCALE_MAX_POS 255 ///< scalefactor index maximum value | 130 | #define SCALE_MAX_POS 255 ///< scalefactor index maximum value |
| 131 | #define SCALE_MAX_DIFF 60 ///< maximum scalefactor difference allowed by standard | 131 | #define SCALE_MAX_DIFF 60 ///< maximum scalefactor difference allowed by standard |
| 132 | #define SCALE_DIFF_ZERO 60 ///< codebook index corresponding to zero scalefactor indices difference | 132 | #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 Prediction | 136 | * 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]; |
| @@ -29,13 +29,14 @@ · 28 unmodified lines | |||
| 29 | #include "libavcodec/aac_tables.h" | 29 | #include "libavcodec/aac_tables.h" |
| 30 | #else | 30 | #else |
| 31 | #include "libavutil/mathematics.h" | 31 | #include "libavutil/mathematics.h" |
| 32 | #include "libavcodec/aac.h" | ||
| 32 | float ff_aac_pow2sf_tab[428]; | 33 | float ff_aac_pow2sf_tab[428]; |
| 33 | 34 | ||
| 34 | void ff_aac_tableinit(void) | 35 | void 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 | ||
| @@ -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 | ||
| 283 | static int find_min_book(float maxval, int sf) { | 283 | static 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 quantizer | 960 | 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; |
| @@ -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 initialization | 592 | // 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 | else | 814 | 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 | ||
| 1245 | static av_always_inline void predict(PredictorState *ps, float *coef, | 1243 | static 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 / 64 | 1246 | 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 | |||
| 1280 | static void apply_prediction(AACContext *ac, SingleChannelElement *sce) | 1277 | static 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 | } |
| @@ -36,11 +36,11 @@ · 35 unmodified lines | |||
| 36 | #include <stdint.h> | 36 | #include <stdint.h> |
| 37 | 37 | ||
| 38 | /* @name ltp_coef | 38 | /* @name ltp_coef |
| 39 | * Table of the LTP coefficient (multiplied by 2) | 39 | * Table of the LTP coefficients |
| 40 | */ | 40 | */ |
| 41 | static const float ltp_coef[8] = { | 41 | static 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_map | 46 | /* @name tns_tmp2_map |
| @@ -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; |
| @@ -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 around | 34 | // W4 is actually exactly 16384, but using 16383 works around |
| 35 | // accumulating rounding errors for some encoders | 35 | // 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 11 | 43 | #define ROW_SHIFT 11 |
| 44 | #define COL_SHIFT 20 | 44 | #define COL_SHIFT 20 |
| 45 | 45 | ||
| @@ -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]; |
| @@ -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; |
| @@ -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 | ||
| @@ -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 | ||
| 1204 | void av_log_ask_for_sample(void *avc, const char *msg, ...) | 1237 | void av_log_ask_for_sample(void *avc, const char *msg, ...) |
| @@ -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 class | 1173 | 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 | ||