Commit eadba3e9 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge commit 'cbcd497f'

* commit 'cbcd497f':
  adxdec: use planar sample format
  adpcmdec: use planar sample format for adpcm_thp
  adpcmdec: use planar sample format for adpcm_ea_xas
  adpcmdec: use planar sample format for adpcm_ea_r1/r2/r3
  adpcmdec: use planar sample format for adpcm_xa
  adpcmdec: use planar sample format for adpcm_ima_ws for vqa version 3
  adpcmdec: use planar sample format for adpcm_4xm
  adpcmdec: use planar sample format for adpcm_ima_wav
  adpcmdec: use planar sample format for adpcm_ima_qt
  pcmdec: use planar sample format for pcm_lxf
  mace: use planar sample format
  atrac1: use planar sample format
  build: non-x86: Only compile mpegvideo optimizations when necessary
  rtpdec_mpeg4: au_headers is a single array, simple av_free is enough
  avcodec: free extended_data instead address of it
  fate: Add tests of the ff_make_absolute_url function
  url: Handle relative urls starting with two slashes
  url: Handle relative urls being just a new query string
  url: Don't treat slashes in query parameters as directory separators

Conflicts:
	libavcodec/adxdec.c
	libavcodec/mips/Makefile
	libavcodec/pcm.c
	libavcodec/utils.c
	libavformat/Makefile
	libavformat/utils.c
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents b4e516e3 cbcd497f
This diff is collapsed.
...@@ -49,7 +49,7 @@ static av_cold int adx_decode_init(AVCodecContext *avctx) ...@@ -49,7 +49,7 @@ static av_cold int adx_decode_init(AVCodecContext *avctx)
c->header_parsed = 1; c->header_parsed = 1;
} }
avctx->sample_fmt = AV_SAMPLE_FMT_S16; avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
avcodec_get_frame_defaults(&c->frame); avcodec_get_frame_defaults(&c->frame);
avctx->coded_frame = &c->frame; avctx->coded_frame = &c->frame;
...@@ -64,7 +64,8 @@ static av_cold int adx_decode_init(AVCodecContext *avctx) ...@@ -64,7 +64,8 @@ static av_cold int adx_decode_init(AVCodecContext *avctx)
* 2nd-order LPC filter applied to it to form the output signal for a single * 2nd-order LPC filter applied to it to form the output signal for a single
* channel. * channel.
*/ */
static int adx_decode(ADXContext *c, int16_t *out, const uint8_t *in, int ch) static int adx_decode(ADXContext *c, int16_t *out, int offset,
const uint8_t *in, int ch)
{ {
ADXChannelState *prev = &c->prev[ch]; ADXChannelState *prev = &c->prev[ch];
GetBitContext gb; GetBitContext gb;
...@@ -77,6 +78,7 @@ static int adx_decode(ADXContext *c, int16_t *out, const uint8_t *in, int ch) ...@@ -77,6 +78,7 @@ static int adx_decode(ADXContext *c, int16_t *out, const uint8_t *in, int ch)
return -1; return -1;
init_get_bits(&gb, in + 2, (BLOCK_SIZE - 2) * 8); init_get_bits(&gb, in + 2, (BLOCK_SIZE - 2) * 8);
out += offset;
s1 = prev->s1; s1 = prev->s1;
s2 = prev->s2; s2 = prev->s2;
for (i = 0; i < BLOCK_SAMPLES; i++) { for (i = 0; i < BLOCK_SAMPLES; i++) {
...@@ -84,8 +86,7 @@ static int adx_decode(ADXContext *c, int16_t *out, const uint8_t *in, int ch) ...@@ -84,8 +86,7 @@ static int adx_decode(ADXContext *c, int16_t *out, const uint8_t *in, int ch)
s0 = ((d << COEFF_BITS) * scale + c->coeff[0] * s1 + c->coeff[1] * s2) >> COEFF_BITS; s0 = ((d << COEFF_BITS) * scale + c->coeff[0] * s1 + c->coeff[1] * s2) >> COEFF_BITS;
s2 = s1; s2 = s1;
s1 = av_clip_int16(s0); s1 = av_clip_int16(s0);
*out = s1; *out++ = s1;
out += c->channels;
} }
prev->s1 = s1; prev->s1 = s1;
prev->s2 = s2; prev->s2 = s2;
...@@ -98,7 +99,8 @@ static int adx_decode_frame(AVCodecContext *avctx, void *data, ...@@ -98,7 +99,8 @@ static int adx_decode_frame(AVCodecContext *avctx, void *data,
{ {
int buf_size = avpkt->size; int buf_size = avpkt->size;
ADXContext *c = avctx->priv_data; ADXContext *c = avctx->priv_data;
int16_t *samples; int16_t **samples;
int samples_offset;
const uint8_t *buf = avpkt->data; const uint8_t *buf = avpkt->data;
const uint8_t *buf_end = buf + avpkt->size; const uint8_t *buf_end = buf + avpkt->size;
int num_blocks, ch, ret; int num_blocks, ch, ret;
...@@ -145,11 +147,12 @@ static int adx_decode_frame(AVCodecContext *avctx, void *data, ...@@ -145,11 +147,12 @@ static int adx_decode_frame(AVCodecContext *avctx, void *data,
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
return ret; return ret;
} }
samples = (int16_t *)c->frame.data[0]; samples = (int16_t **)c->frame.extended_data;
samples_offset = 0;
while (num_blocks--) { while (num_blocks--) {
for (ch = 0; ch < c->channels; ch++) { for (ch = 0; ch < c->channels; ch++) {
if (buf_end - buf < BLOCK_SIZE || adx_decode(c, samples + ch, buf, ch)) { if (buf_end - buf < BLOCK_SIZE || adx_decode(c, samples[ch], samples_offset, buf, ch)) {
c->eof = 1; c->eof = 1;
buf = avpkt->data + avpkt->size; buf = avpkt->data + avpkt->size;
break; break;
...@@ -157,7 +160,7 @@ static int adx_decode_frame(AVCodecContext *avctx, void *data, ...@@ -157,7 +160,7 @@ static int adx_decode_frame(AVCodecContext *avctx, void *data,
buf_size -= BLOCK_SIZE; buf_size -= BLOCK_SIZE;
buf += BLOCK_SIZE; buf += BLOCK_SIZE;
} }
samples += BLOCK_SAMPLES * c->channels; samples_offset += BLOCK_SAMPLES;
} }
*got_frame_ptr = 1; *got_frame_ptr = 1;
...@@ -183,4 +186,6 @@ AVCodec ff_adpcm_adx_decoder = { ...@@ -183,4 +186,6 @@ AVCodec ff_adpcm_adx_decoder = {
.flush = adx_decode_flush, .flush = adx_decode_flush,
.capabilities = CODEC_CAP_DR1, .capabilities = CODEC_CAP_DR1,
.long_name = NULL_IF_CONFIG_SMALL("SEGA CRI ADX ADPCM"), .long_name = NULL_IF_CONFIG_SMALL("SEGA CRI ADX ADPCM"),
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P,
AV_SAMPLE_FMT_NONE },
}; };
...@@ -2,5 +2,6 @@ OBJS += alpha/dsputil_alpha.o \ ...@@ -2,5 +2,6 @@ OBJS += alpha/dsputil_alpha.o \
alpha/dsputil_alpha_asm.o \ alpha/dsputil_alpha_asm.o \
alpha/motion_est_alpha.o \ alpha/motion_est_alpha.o \
alpha/motion_est_mvi_asm.o \ alpha/motion_est_mvi_asm.o \
alpha/mpegvideo_alpha.o \
alpha/simple_idct_alpha.o \ alpha/simple_idct_alpha.o \
OBJS-$(CONFIG_MPEGVIDEO) += alpha/mpegvideo_alpha.o
...@@ -14,6 +14,7 @@ OBJS-$(CONFIG_FLAC_DECODER) += arm/flacdsp_init_arm.o \ ...@@ -14,6 +14,7 @@ OBJS-$(CONFIG_FLAC_DECODER) += arm/flacdsp_init_arm.o \
OBJS-$(CONFIG_MPEGAUDIODSP) += arm/mpegaudiodsp_init_arm.o OBJS-$(CONFIG_MPEGAUDIODSP) += arm/mpegaudiodsp_init_arm.o
ARMV6-OBJS-$(CONFIG_MPEGAUDIODSP) += arm/mpegaudiodsp_fixed_armv6.o ARMV6-OBJS-$(CONFIG_MPEGAUDIODSP) += arm/mpegaudiodsp_fixed_armv6.o
OBJS-$(CONFIG_MPEGVIDEO) += arm/mpegvideo_arm.o
OBJS-$(CONFIG_VP3DSP) += arm/vp3dsp_init_arm.o OBJS-$(CONFIG_VP3DSP) += arm/vp3dsp_init_arm.o
OBJS-$(CONFIG_VP5_DECODER) += arm/vp56dsp_init_arm.o OBJS-$(CONFIG_VP5_DECODER) += arm/vp56dsp_init_arm.o
OBJS-$(CONFIG_VP6_DECODER) += arm/vp56dsp_init_arm.o OBJS-$(CONFIG_VP6_DECODER) += arm/vp56dsp_init_arm.o
...@@ -31,12 +32,12 @@ OBJS += arm/dsputil_init_arm.o \ ...@@ -31,12 +32,12 @@ OBJS += arm/dsputil_init_arm.o \
arm/fft_fixed_init_arm.o \ arm/fft_fixed_init_arm.o \
arm/fmtconvert_init_arm.o \ arm/fmtconvert_init_arm.o \
arm/jrevdct_arm.o \ arm/jrevdct_arm.o \
arm/mpegvideo_arm.o \
arm/simple_idct_arm.o \ arm/simple_idct_arm.o \
ARMV5TE-OBJS += arm/dsputil_init_armv5te.o \ ARMV5TE-OBJS-$(CONFIG_MPEGVIDEO) += arm/mpegvideo_armv5te.o \
arm/mpegvideo_armv5te.o \
arm/mpegvideo_armv5te_s.o \ arm/mpegvideo_armv5te_s.o \
ARMV5TE-OBJS += arm/dsputil_init_armv5te.o \
arm/simple_idct_armv5te.o \ arm/simple_idct_armv5te.o \
ARMV6-OBJS += arm/dsputil_init_armv6.o \ ARMV6-OBJS += arm/dsputil_init_armv6.o \
...@@ -70,6 +71,7 @@ NEON-OBJS-$(CONFIG_AAC_DECODER) += arm/sbrdsp_neon.o \ ...@@ -70,6 +71,7 @@ NEON-OBJS-$(CONFIG_AAC_DECODER) += arm/sbrdsp_neon.o \
NEON-OBJS-$(CONFIG_DCA_DECODER) += arm/dcadsp_neon.o \ NEON-OBJS-$(CONFIG_DCA_DECODER) += arm/dcadsp_neon.o \
arm/synth_filter_neon.o \ arm/synth_filter_neon.o \
NEON-OBJS-$(CONFIG_MPEGVIDEO) += arm/mpegvideo_neon.o
NEON-OBJS-$(CONFIG_RV30_DECODER) += arm/rv34dsp_init_neon.o \ NEON-OBJS-$(CONFIG_RV30_DECODER) += arm/rv34dsp_init_neon.o \
arm/rv34dsp_neon.o \ arm/rv34dsp_neon.o \
...@@ -92,5 +94,4 @@ NEON-OBJS += arm/dsputil_init_neon.o \ ...@@ -92,5 +94,4 @@ NEON-OBJS += arm/dsputil_init_neon.o \
arm/dsputil_neon.o \ arm/dsputil_neon.o \
arm/fmtconvert_neon.o \ arm/fmtconvert_neon.o \
arm/int_neon.o \ arm/int_neon.o \
arm/mpegvideo_neon.o \
arm/simple_idct_neon.o \ arm/simple_idct_neon.o \
...@@ -36,7 +36,6 @@ ...@@ -36,7 +36,6 @@
#include "get_bits.h" #include "get_bits.h"
#include "dsputil.h" #include "dsputil.h"
#include "fft.h" #include "fft.h"
#include "fmtconvert.h"
#include "sinewin.h" #include "sinewin.h"
#include "atrac.h" #include "atrac.h"
...@@ -80,11 +79,9 @@ typedef struct { ...@@ -80,11 +79,9 @@ typedef struct {
DECLARE_ALIGNED(32, float, mid)[256]; DECLARE_ALIGNED(32, float, mid)[256];
DECLARE_ALIGNED(32, float, high)[512]; DECLARE_ALIGNED(32, float, high)[512];
float* bands[3]; float* bands[3];
float *out_samples[AT1_MAX_CHANNELS];
FFTContext mdct_ctx[3]; FFTContext mdct_ctx[3];
int channels; int channels;
DSPContext dsp; DSPContext dsp;
FmtConvertContext fmt_conv;
} AT1Ctx; } AT1Ctx;
/** size of the transform in samples in the long mode for each QMF band */ /** size of the transform in samples in the long mode for each QMF band */
...@@ -281,7 +278,6 @@ static int atrac1_decode_frame(AVCodecContext *avctx, void *data, ...@@ -281,7 +278,6 @@ static int atrac1_decode_frame(AVCodecContext *avctx, void *data,
AT1Ctx *q = avctx->priv_data; AT1Ctx *q = avctx->priv_data;
int ch, ret; int ch, ret;
GetBitContext gb; GetBitContext gb;
float *samples;
if (buf_size < 212 * q->channels) { if (buf_size < 212 * q->channels) {
...@@ -295,7 +291,6 @@ static int atrac1_decode_frame(AVCodecContext *avctx, void *data, ...@@ -295,7 +291,6 @@ static int atrac1_decode_frame(AVCodecContext *avctx, void *data,
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
return ret; return ret;
} }
samples = (float *)q->frame.data[0];
for (ch = 0; ch < q->channels; ch++) { for (ch = 0; ch < q->channels; ch++) {
AT1SUCtx* su = &q->SUs[ch]; AT1SUCtx* su = &q->SUs[ch];
...@@ -314,13 +309,7 @@ static int atrac1_decode_frame(AVCodecContext *avctx, void *data, ...@@ -314,13 +309,7 @@ static int atrac1_decode_frame(AVCodecContext *avctx, void *data,
ret = at1_imdct_block(su, q); ret = at1_imdct_block(su, q);
if (ret < 0) if (ret < 0)
return ret; return ret;
at1_subband_synthesis(q, su, q->channels == 1 ? samples : q->out_samples[ch]); at1_subband_synthesis(q, su, (float *)q->frame.extended_data[ch]);
}
/* interleave */
if (q->channels == 2) {
q->fmt_conv.float_interleave(samples, (const float **)q->out_samples,
AT1_SU_SAMPLES, 2);
} }
*got_frame_ptr = 1; *got_frame_ptr = 1;
...@@ -334,8 +323,6 @@ static av_cold int atrac1_decode_end(AVCodecContext * avctx) ...@@ -334,8 +323,6 @@ static av_cold int atrac1_decode_end(AVCodecContext * avctx)
{ {
AT1Ctx *q = avctx->priv_data; AT1Ctx *q = avctx->priv_data;
av_freep(&q->out_samples[0]);
ff_mdct_end(&q->mdct_ctx[0]); ff_mdct_end(&q->mdct_ctx[0]);
ff_mdct_end(&q->mdct_ctx[1]); ff_mdct_end(&q->mdct_ctx[1]);
ff_mdct_end(&q->mdct_ctx[2]); ff_mdct_end(&q->mdct_ctx[2]);
...@@ -349,7 +336,7 @@ static av_cold int atrac1_decode_init(AVCodecContext *avctx) ...@@ -349,7 +336,7 @@ static av_cold int atrac1_decode_init(AVCodecContext *avctx)
AT1Ctx *q = avctx->priv_data; AT1Ctx *q = avctx->priv_data;
int ret; int ret;
avctx->sample_fmt = AV_SAMPLE_FMT_FLT; avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
if (avctx->channels < 1 || avctx->channels > AT1_MAX_CHANNELS) { if (avctx->channels < 1 || avctx->channels > AT1_MAX_CHANNELS) {
av_log(avctx, AV_LOG_ERROR, "Unsupported number of channels: %d\n", av_log(avctx, AV_LOG_ERROR, "Unsupported number of channels: %d\n",
...@@ -358,15 +345,6 @@ static av_cold int atrac1_decode_init(AVCodecContext *avctx) ...@@ -358,15 +345,6 @@ static av_cold int atrac1_decode_init(AVCodecContext *avctx)
} }
q->channels = avctx->channels; q->channels = avctx->channels;
if (avctx->channels == 2) {
q->out_samples[0] = av_malloc(2 * AT1_SU_SAMPLES * sizeof(*q->out_samples[0]));
q->out_samples[1] = q->out_samples[0] + AT1_SU_SAMPLES;
if (!q->out_samples[0]) {
av_freep(&q->out_samples[0]);
return AVERROR(ENOMEM);
}
}
/* Init the mdct transforms */ /* Init the mdct transforms */
if ((ret = ff_mdct_init(&q->mdct_ctx[0], 6, 1, -1.0/ (1 << 15))) || if ((ret = ff_mdct_init(&q->mdct_ctx[0], 6, 1, -1.0/ (1 << 15))) ||
(ret = ff_mdct_init(&q->mdct_ctx[1], 8, 1, -1.0/ (1 << 15))) || (ret = ff_mdct_init(&q->mdct_ctx[1], 8, 1, -1.0/ (1 << 15))) ||
...@@ -381,7 +359,6 @@ static av_cold int atrac1_decode_init(AVCodecContext *avctx) ...@@ -381,7 +359,6 @@ static av_cold int atrac1_decode_init(AVCodecContext *avctx)
ff_atrac_generate_tables(); ff_atrac_generate_tables();
ff_dsputil_init(&q->dsp, avctx); ff_dsputil_init(&q->dsp, avctx);
ff_fmt_convert_init(&q->fmt_conv, avctx);
q->bands[0] = q->low; q->bands[0] = q->low;
q->bands[1] = q->mid; q->bands[1] = q->mid;
...@@ -410,4 +387,6 @@ AVCodec ff_atrac1_decoder = { ...@@ -410,4 +387,6 @@ AVCodec ff_atrac1_decoder = {
.decode = atrac1_decode_frame, .decode = atrac1_decode_frame,
.capabilities = CODEC_CAP_DR1, .capabilities = CODEC_CAP_DR1,
.long_name = NULL_IF_CONFIG_SMALL("Atrac 1 (Adaptive TRansform Acoustic Coding)"), .long_name = NULL_IF_CONFIG_SMALL("Atrac 1 (Adaptive TRansform Acoustic Coding)"),
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
AV_SAMPLE_FMT_NONE },
}; };
OBJS += bfin/dsputil_bfin.o \ OBJS += bfin/dsputil_bfin.o \
bfin/fdct_bfin.o \ bfin/fdct_bfin.o \
bfin/idct_bfin.o \ bfin/idct_bfin.o \
bfin/mpegvideo_bfin.o \
bfin/pixels_bfin.o \ bfin/pixels_bfin.o \
bfin/vp3_bfin.o \ bfin/vp3_bfin.o \
bfin/vp3_idct_bfin.o \ bfin/vp3_idct_bfin.o \
OBJS-$(CONFIG_MPEGVIDEOENC) += bfin/mpegvideo_bfin.o
...@@ -187,9 +187,7 @@ static int16_t read_table(ChannelData *chd, uint8_t val, int tab_idx) ...@@ -187,9 +187,7 @@ static int16_t read_table(ChannelData *chd, uint8_t val, int tab_idx)
return current; return current;
} }
static void chomp3(ChannelData *chd, int16_t *output, uint8_t val, static void chomp3(ChannelData *chd, int16_t *output, uint8_t val, int tab_idx)
int tab_idx,
uint32_t numChannels)
{ {
int16_t current = read_table(chd, val, tab_idx); int16_t current = read_table(chd, val, tab_idx);
...@@ -200,9 +198,7 @@ static void chomp3(ChannelData *chd, int16_t *output, uint8_t val, ...@@ -200,9 +198,7 @@ static void chomp3(ChannelData *chd, int16_t *output, uint8_t val,
*output = QT_8S_2_16S(current); *output = QT_8S_2_16S(current);
} }
static void chomp6(ChannelData *chd, int16_t *output, uint8_t val, static void chomp6(ChannelData *chd, int16_t *output, uint8_t val, int tab_idx)
int tab_idx,
uint32_t numChannels)
{ {
int16_t current = read_table(chd, val, tab_idx); int16_t current = read_table(chd, val, tab_idx);
...@@ -222,8 +218,8 @@ static void chomp6(ChannelData *chd, int16_t *output, uint8_t val, ...@@ -222,8 +218,8 @@ static void chomp6(ChannelData *chd, int16_t *output, uint8_t val,
output[0] = QT_8S_2_16S(chd->previous + chd->prev2 - output[0] = QT_8S_2_16S(chd->previous + chd->prev2 -
((chd->prev2-current) >> 2)); ((chd->prev2-current) >> 2));
output[numChannels] = QT_8S_2_16S(chd->previous + current + output[1] = QT_8S_2_16S(chd->previous + current +
((chd->prev2-current) >> 2)); ((chd->prev2-current) >> 2));
chd->prev2 = chd->previous; chd->prev2 = chd->previous;
chd->previous = current; chd->previous = current;
} }
...@@ -234,7 +230,7 @@ static av_cold int mace_decode_init(AVCodecContext * avctx) ...@@ -234,7 +230,7 @@ static av_cold int mace_decode_init(AVCodecContext * avctx)
if (avctx->channels > 2 || avctx->channels <= 0) if (avctx->channels > 2 || avctx->channels <= 0)
return -1; return -1;
avctx->sample_fmt = AV_SAMPLE_FMT_S16; avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
avcodec_get_frame_defaults(&ctx->frame); avcodec_get_frame_defaults(&ctx->frame);
avctx->coded_frame = &ctx->frame; avctx->coded_frame = &ctx->frame;
...@@ -247,7 +243,7 @@ static int mace_decode_frame(AVCodecContext *avctx, void *data, ...@@ -247,7 +243,7 @@ static int mace_decode_frame(AVCodecContext *avctx, void *data,
{ {
const uint8_t *buf = avpkt->data; const uint8_t *buf = avpkt->data;
int buf_size = avpkt->size; int buf_size = avpkt->size;
int16_t *samples; int16_t **samples;
MACEContext *ctx = avctx->priv_data; MACEContext *ctx = avctx->priv_data;
int i, j, k, l, ret; int i, j, k, l, ret;
int is_mace3 = (avctx->codec_id == AV_CODEC_ID_MACE3); int is_mace3 = (avctx->codec_id == AV_CODEC_ID_MACE3);
...@@ -258,10 +254,10 @@ static int mace_decode_frame(AVCodecContext *avctx, void *data, ...@@ -258,10 +254,10 @@ static int mace_decode_frame(AVCodecContext *avctx, void *data,
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
return ret; return ret;
} }
samples = (int16_t *)ctx->frame.data[0]; samples = (int16_t **)ctx->frame.extended_data;
for(i = 0; i < avctx->channels; i++) { for(i = 0; i < avctx->channels; i++) {
int16_t *output = samples + i; int16_t *output = samples[i];
for (j=0; j < buf_size / (avctx->channels << is_mace3); j++) for (j=0; j < buf_size / (avctx->channels << is_mace3); j++)
for (k=0; k < (1 << is_mace3); k++) { for (k=0; k < (1 << is_mace3); k++) {
...@@ -273,13 +269,11 @@ static int mace_decode_frame(AVCodecContext *avctx, void *data, ...@@ -273,13 +269,11 @@ static int mace_decode_frame(AVCodecContext *avctx, void *data,
for (l=0; l < 3; l++) { for (l=0; l < 3; l++) {
if (is_mace3) if (is_mace3)
chomp3(&ctx->chd[i], output, val[1][l], l, chomp3(&ctx->chd[i], output, val[1][l], l);
avctx->channels);
else else
chomp6(&ctx->chd[i], output, val[0][l], l, chomp6(&ctx->chd[i], output, val[0][l], l);
avctx->channels);
output += avctx->channels << (1-is_mace3); output += 1 << (1-is_mace3);
} }
} }
} }
...@@ -299,6 +293,8 @@ AVCodec ff_mace3_decoder = { ...@@ -299,6 +293,8 @@ AVCodec ff_mace3_decoder = {
.decode = mace_decode_frame, .decode = mace_decode_frame,
.capabilities = CODEC_CAP_DR1, .capabilities = CODEC_CAP_DR1,
.long_name = NULL_IF_CONFIG_SMALL("MACE (Macintosh Audio Compression/Expansion) 3:1"), .long_name = NULL_IF_CONFIG_SMALL("MACE (Macintosh Audio Compression/Expansion) 3:1"),
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P,
AV_SAMPLE_FMT_NONE },
}; };
AVCodec ff_mace6_decoder = { AVCodec ff_mace6_decoder = {
...@@ -310,4 +306,6 @@ AVCodec ff_mace6_decoder = { ...@@ -310,4 +306,6 @@ AVCodec ff_mace6_decoder = {
.decode = mace_decode_frame, .decode = mace_decode_frame,
.capabilities = CODEC_CAP_DR1, .capabilities = CODEC_CAP_DR1,
.long_name = NULL_IF_CONFIG_SMALL("MACE (Macintosh Audio Compression/Expansion) 6:1"), .long_name = NULL_IF_CONFIG_SMALL("MACE (Macintosh Audio Compression/Expansion) 6:1"),
.sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P,
AV_SAMPLE_FMT_NONE },
}; };
MMI-OBJS += mips/dsputil_mmi.o \ MMI-OBJS += mips/dsputil_mmi.o \
mips/idct_mmi.o \ mips/idct_mmi.o \
mips/mpegvideo_mmi.o
MMI-OBJS-$(CONFIG_MPEGVIDEO) += mips/mpegvideo_mmi.o
MIPSFPU-OBJS-$(CONFIG_AMRNB_DECODER) += mips/acelp_filters_mips.o \ MIPSFPU-OBJS-$(CONFIG_AMRNB_DECODER) += mips/acelp_filters_mips.o \
mips/celp_filters_mips.o \ mips/celp_filters_mips.o \
......
...@@ -446,22 +446,21 @@ static int pcm_decode_frame(AVCodecContext *avctx, void *data, ...@@ -446,22 +446,21 @@ static int pcm_decode_frame(AVCodecContext *avctx, void *data,
{ {
int i; int i;
n /= avctx->channels; n /= avctx->channels;
//unpack
for (c = 0; c < avctx->channels; c++) { for (c = 0; c < avctx->channels; c++) {
dst_int32_t = (int32_t *)s->frame.data[c]; dst_int32_t = (int32_t *)s->frame.extended_data[c];
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
//extract low 20 bits and expand to 32 bits // extract low 20 bits and expand to 32 bits
*dst_int32_t++ = (src[2] << 28) | *dst_int32_t++ = (src[2] << 28) |
(src[1] << 20) | (src[1] << 20) |
(src[0] << 12) | (src[0] << 12) |
((src[2] & 0xF) << 8) | ((src[2] & 0x0F) << 8) |
src[1]; src[1];
//extract high 20 bits and expand to 32 bits // extract high 20 bits and expand to 32 bits
*dst_int32_t++ = (src[4] << 24) | *dst_int32_t++ = (src[4] << 24) |
(src[3] << 16) | (src[3] << 16) |
((src[2] & 0xF0) << 8) | ((src[2] & 0xF0) << 8) |
(src[4] << 4) | (src[4] << 4) |
(src[3] >> 4); (src[3] >> 4);
src += 5; src += 5;
} }
} }
......
...@@ -7,6 +7,7 @@ ALTIVEC-OBJS-$(CONFIG_FFT) += ppc/fft_altivec.o \ ...@@ -7,6 +7,7 @@ ALTIVEC-OBJS-$(CONFIG_FFT) += ppc/fft_altivec.o \
$(FFT-OBJS-yes) $(FFT-OBJS-yes)
ALTIVEC-OBJS-$(CONFIG_H264DSP) += ppc/h264_altivec.o ALTIVEC-OBJS-$(CONFIG_H264DSP) += ppc/h264_altivec.o
ALTIVEC-OBJS-$(CONFIG_MPEGAUDIODSP) += ppc/mpegaudiodec_altivec.o ALTIVEC-OBJS-$(CONFIG_MPEGAUDIODSP) += ppc/mpegaudiodec_altivec.o
ALTIVEC-OBJS-$(CONFIG_MPEGVIDEO) += ppc/mpegvideo_altivec.o
ALTIVEC-OBJS-$(CONFIG_VC1_DECODER) += ppc/vc1dsp_altivec.o ALTIVEC-OBJS-$(CONFIG_VC1_DECODER) += ppc/vc1dsp_altivec.o
ALTIVEC-OBJS-$(CONFIG_VP8_DECODER) += ppc/vp8dsp_altivec.o ALTIVEC-OBJS-$(CONFIG_VP8_DECODER) += ppc/vp8dsp_altivec.o
...@@ -17,4 +18,3 @@ ALTIVEC-OBJS += ppc/dsputil_altivec.o \ ...@@ -17,4 +18,3 @@ ALTIVEC-OBJS += ppc/dsputil_altivec.o \
ppc/gmc_altivec.o \ ppc/gmc_altivec.o \
ppc/idct_altivec.o \ ppc/idct_altivec.o \
ppc/int_altivec.o \ ppc/int_altivec.o \
ppc/mpegvideo_altivec.o \
...@@ -393,7 +393,7 @@ static int audio_get_buffer(AVCodecContext *avctx, AVFrame *frame) ...@@ -393,7 +393,7 @@ static int audio_get_buffer(AVCodecContext *avctx, AVFrame *frame)
if (buf->extended_data[0] && buf_size > buf->audio_data_size) { if (buf->extended_data[0] && buf_size > buf->audio_data_size) {
av_free(buf->extended_data[0]); av_free(buf->extended_data[0]);
if (buf->extended_data != buf->data) if (buf->extended_data != buf->data)
av_freep(&buf->extended_data); av_free(buf->extended_data);
buf->extended_data = NULL; buf->extended_data = NULL;
buf->data[0] = NULL; buf->data[0] = NULL;
} }
......
...@@ -412,7 +412,8 @@ OBJS-$(CONFIG_UDP_PROTOCOL) += udp.o ...@@ -412,7 +412,8 @@ OBJS-$(CONFIG_UDP_PROTOCOL) += udp.o
SKIPHEADERS-$(CONFIG_FFRTMPCRYPT_PROTOCOL) += rtmpdh.h SKIPHEADERS-$(CONFIG_FFRTMPCRYPT_PROTOCOL) += rtmpdh.h
SKIPHEADERS-$(CONFIG_NETWORK) += network.h rtsp.h SKIPHEADERS-$(CONFIG_NETWORK) += network.h rtsp.h
TESTPROGS = seek TESTPROGS = seek \
url \
TOOLS = aviocat \ TOOLS = aviocat \
ismindex \ ismindex \
......
...@@ -93,15 +93,7 @@ static PayloadContext *new_context(void) ...@@ -93,15 +93,7 @@ static PayloadContext *new_context(void)
static void free_context(PayloadContext * data) static void free_context(PayloadContext * data)
{ {
int i; av_free(data->au_headers);
for (i = 0; i < data->nb_au_headers; i++) {
/* according to rtp_parse_mp4_au, we treat multiple
* au headers as one, so nb_au_headers is always 1.
* loop anyway in case this changes.
* (note: changes done carelessly might lead to a double free)
*/
av_free(&data->au_headers[i]);
}
av_free(data->mode); av_free(data->mode);
av_free(data); av_free(data);
} }
......
/*
* Copyright (c) 2012 Martin Storsjo
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "internal.h"
#undef printf
#undef exit
static void test(const char *base, const char *rel)
{
char buf[200], buf2[200];
ff_make_absolute_url(buf, sizeof(buf), base, rel);
printf("%s\n", buf);
if (base) {
/* Test in-buffer replacement */
snprintf(buf2, sizeof(buf2), "%s", base);
ff_make_absolute_url(buf2, sizeof(buf2), buf2, rel);
if (strcmp(buf, buf2)) {
printf("In-place handling of %s + %s failed\n", base, rel);
exit(1);
}
}
}
int main(void)
{
test(NULL, "baz");
test("/foo/bar", "baz");
test("/foo/bar", "../baz");
test("/foo/bar", "/baz");
test("http://server/foo/", "baz");
test("http://server/foo/bar", "baz");
test("http://server/foo/", "../baz");
test("http://server/foo/bar/123", "../../baz");
test("http://server/foo/bar/123", "/baz");
test("http://server/foo/bar/123", "https://other/url");
test("http://server/foo/bar?param=value/with/slashes", "/baz");
test("http://server/foo/bar?param&otherparam", "?someparam");
test("http://server/foo/bar", "//other/url");
return 0;
}
...@@ -3824,9 +3824,9 @@ void ff_make_absolute_url(char *buf, int size, const char *base, ...@@ -3824,9 +3824,9 @@ void ff_make_absolute_url(char *buf, int size, const char *base,
sep = strstr(buf, "://"); sep = strstr(buf, "://");
if (sep) { if (sep) {
/* Take scheme from base url */ /* Take scheme from base url */
if (rel[1] == '/') if (rel[1] == '/') {
sep[1] = '\0'; sep[1] = '\0';
else { } else {
/* Take scheme and host from base url */ /* Take scheme and host from base url */
sep += 3; sep += 3;
sep = strchr(sep, '/'); sep = strchr(sep, '/');
......
...@@ -69,6 +69,7 @@ include $(SRC_PATH)/tests/fate/h264.mak ...@@ -69,6 +69,7 @@ include $(SRC_PATH)/tests/fate/h264.mak
include $(SRC_PATH)/tests/fate/image.mak include $(SRC_PATH)/tests/fate/image.mak
include $(SRC_PATH)/tests/fate/indeo.mak include $(SRC_PATH)/tests/fate/indeo.mak
include $(SRC_PATH)/tests/fate/libavcodec.mak include $(SRC_PATH)/tests/fate/libavcodec.mak
include $(SRC_PATH)/tests/fate/libavformat.mak
include $(SRC_PATH)/tests/fate/libavutil.mak include $(SRC_PATH)/tests/fate/libavutil.mak
include $(SRC_PATH)/tests/fate/mapchan.mak include $(SRC_PATH)/tests/fate/mapchan.mak
include $(SRC_PATH)/tests/fate/lossless-audio.mak include $(SRC_PATH)/tests/fate/lossless-audio.mak
...@@ -108,6 +109,7 @@ FATE-$(CONFIG_FFMPEG) += $(FATE_FFMPEG) ...@@ -108,6 +109,7 @@ FATE-$(CONFIG_FFMPEG) += $(FATE_FFMPEG)
FATE-$(CONFIG_FFPROBE) += $(FATE_FFPROBE) FATE-$(CONFIG_FFPROBE) += $(FATE_FFPROBE)
FATE-$(CONFIG_AVCODEC) += $(FATE_LIBAVCODEC) FATE-$(CONFIG_AVCODEC) += $(FATE_LIBAVCODEC)
FATE-$(CONFIG_AVFORMAT) += $(FATE_LIBAVFORMAT)
FATE_EXTERN-$(CONFIG_FFMPEG) += $(FATE_SAMPLES_AVCONV) $(FATE_SAMPLES_FFMPEG) FATE_EXTERN-$(CONFIG_FFMPEG) += $(FATE_SAMPLES_AVCONV) $(FATE_SAMPLES_FFMPEG)
FATE_EXTERN += $(FATE_EXTERN-yes) FATE_EXTERN += $(FATE_EXTERN-yes)
......
FATE_LIBAVFORMAT += fate-url
fate-url: libavformat/url-test$(EXESUF)
fate-url: CMD = run libavformat/url-test
fate-libavformat: $(FATE_LIBAVFORMAT)
baz
/foo/baz
/baz
/baz
http://server/foo/baz
http://server/foo/baz
http://server/baz
http://server/baz
http://server/baz
https://other/url
http://server/baz
http://server/foo/bar?someparam
http://other/url
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment