Merge remote-tracking branch 'qatar/master'

* qatar/master:
  dv: Initialize encoder tables during encoder init.
  dv: Replace some magic numbers by the appropriate #define.
  FATE: pass the decoded output format and audio source file to enc_dec_pcm
  FATE: specify the input format when decoding in enc_dec_pcm()
  x86inc: support AVX abstraction for 2-operand instructions
  configure: detect PGI compiler and set suitable flags
  avconv: check for an incompatible changing channel layout
  avio: make AVIOContext.av_class pointer to const
  nutdec: add malloc check and fix const to non-const conversion warnings

Conflicts:
	ffmpeg.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2012-04-19 20:46:37 +02:00
commit 2a976debc1
12 changed files with 112 additions and 67 deletions

18
configure vendored
View File

@ -2344,6 +2344,24 @@ elif $cc -v 2>&1 | grep -q Open64; then
speed_cflags='-O2' speed_cflags='-O2'
size_cflags='-Os' size_cflags='-Os'
filter_cflags='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros' filter_cflags='filter_out -Wdisabled-optimization|-Wtype-limits|-fno-signed-zeros'
elif $cc -V 2>&1 | grep -q Portland; then
cc_type=pgi
cc_version='AV_STRINGIFY(__PGIC__.__PGIC_MINOR__.__PGIC_PATCHLEVEL__)'
cc_ident="PGI $($cc -V 2>&1 | awk '/^pgcc/ { print $2; exit }')"
opt_common='-alias=ansi -Mlre -Mpre'
speed_cflags="-O3 -Mautoinline -Munroll=c:4 $opt_common"
size_cflags="-O2 -Munroll=c:1 $opt_common"
noopt_cflags="-O1"
filter_cflags=pgi_flags
pgi_flags(){
for flag; do
case $flag in
-fomit-frame-pointer) echo -Mnoframe ;;
-g) echo -gopt ;;
*) echo $flag ;;
esac
done
}
fi fi
test -n "$cc_type" && enable $cc_type || test -n "$cc_type" && enable $cc_type ||

View File

@ -1381,6 +1381,58 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
} }
} }
static void get_default_channel_layouts(OutputStream *ost, InputStream *ist)
{
char layout_name[256];
AVCodecContext *enc = ost->st->codec;
AVCodecContext *dec = ist->st->codec;
if (dec->channel_layout &&
av_get_channel_layout_nb_channels(dec->channel_layout) != dec->channels) {
av_get_channel_layout_string(layout_name, sizeof(layout_name),
dec->channels, dec->channel_layout);
av_log(NULL, AV_LOG_ERROR, "New channel layout (%s) is invalid\n",
layout_name);
dec->channel_layout = 0;
}
if (!dec->channel_layout) {
if (enc->channel_layout && dec->channels == enc->channels) {
dec->channel_layout = enc->channel_layout;
} else {
dec->channel_layout = av_get_default_channel_layout(dec->channels);
if (!dec->channel_layout) {
av_log(NULL, AV_LOG_FATAL, "Unable to find default channel "
"layout for Input Stream #%d.%d\n", ist->file_index,
ist->st->index);
exit_program(1);
}
}
av_get_channel_layout_string(layout_name, sizeof(layout_name),
dec->channels, dec->channel_layout);
av_log(NULL, AV_LOG_WARNING, "Guessed Channel Layout for Input Stream "
"#%d.%d : %s\n", ist->file_index, ist->st->index, layout_name);
}
if (!enc->channel_layout) {
if (dec->channels == enc->channels) {
enc->channel_layout = dec->channel_layout;
return;
} else {
enc->channel_layout = av_get_default_channel_layout(enc->channels);
}
if (!enc->channel_layout) {
av_log(NULL, AV_LOG_FATAL, "Unable to find default channel layout "
"for Output Stream #%d.%d\n", ost->file_index,
ost->st->index);
exit_program(1);
}
av_get_channel_layout_string(layout_name, sizeof(layout_name),
enc->channels, enc->channel_layout);
av_log(NULL, AV_LOG_WARNING, "Guessed Channel Layout for Output Stream "
"#%d.%d : %s\n", ost->file_index, ost->st->index, layout_name);
}
}
static void generate_silence(uint8_t* buf, enum AVSampleFormat sample_fmt, size_t size) static void generate_silence(uint8_t* buf, enum AVSampleFormat sample_fmt, size_t size)
{ {
int fill_char = 0x00; int fill_char = 0x00;
@ -1515,6 +1567,8 @@ static void do_audio_out(AVFormatContext *s, OutputStream *ost,
for(i=0; i<planes; i++) for(i=0; i<planes; i++)
buf[i]= decoded_frame->data[i]; buf[i]= decoded_frame->data[i];
get_default_channel_layouts(ost, ist);
if (alloc_audio_output_buf(dec, enc, decoded_frame->nb_samples) < 0) { if (alloc_audio_output_buf(dec, enc, decoded_frame->nb_samples) < 0) {
av_log(NULL, AV_LOG_FATAL, "Error allocating audio buffer\n"); av_log(NULL, AV_LOG_FATAL, "Error allocating audio buffer\n");
exit_program(1); exit_program(1);
@ -2742,51 +2796,6 @@ static void print_sdp(void)
av_freep(&avc); av_freep(&avc);
} }
static void get_default_channel_layouts(OutputStream *ost, InputStream *ist)
{
char layout_name[256];
AVCodecContext *enc = ost->st->codec;
AVCodecContext *dec = ist->st->codec;
if (!dec->channel_layout) {
if (enc->channel_layout && dec->channels == enc->channels) {
dec->channel_layout = enc->channel_layout;
} else {
dec->channel_layout = av_get_default_channel_layout(dec->channels);
if (!dec->channel_layout) {
av_log(NULL, AV_LOG_FATAL, "Unable to find default channel "
"layout for Input Stream #%d.%d\n", ist->file_index,
ist->st->index);
exit_program(1);
}
}
av_get_channel_layout_string(layout_name, sizeof(layout_name),
dec->channels, dec->channel_layout);
av_log(NULL, AV_LOG_WARNING, "Guessed Channel Layout for Input Stream "
"#%d.%d : %s\n", ist->file_index, ist->st->index, layout_name);
}
if (!enc->channel_layout) {
if (dec->channels == enc->channels) {
enc->channel_layout = dec->channel_layout;
return;
} else {
enc->channel_layout = av_get_default_channel_layout(enc->channels);
}
if (!enc->channel_layout) {
av_log(NULL, AV_LOG_FATAL, "Unable to find default channel layout "
"for Output Stream #%d.%d\n", ost->file_index,
ost->st->index);
exit_program(1);
}
av_get_channel_layout_string(layout_name, sizeof(layout_name),
enc->channels, enc->channel_layout);
av_log(NULL, AV_LOG_WARNING, "Guessed Channel Layout for Output Stream "
"#%d.%d : %s\n", ost->file_index, ost->st->index, layout_name);
}
}
static int init_input_stream(int ist_index, char *error, int error_len) static int init_input_stream(int ist_index, char *error, int error_len)
{ {
int i; int i;

View File

@ -294,8 +294,6 @@ av_cold int ff_dvvideo_init(AVCodecContext *avctx)
ff_dv_rl_vlc[i].run = run; ff_dv_rl_vlc[i].run = run;
} }
ff_free_vlc(&dv_vlc); ff_free_vlc(&dv_vlc);
dv_vlc_map_tableinit();
} }
/* Generic DSP setup */ /* Generic DSP setup */
@ -338,6 +336,8 @@ static av_cold int dvvideo_init_encoder(AVCodecContext *avctx)
return AVERROR(EINVAL); return AVERROR(EINVAL);
} }
dv_vlc_map_tableinit();
return ff_dvvideo_init(avctx); return ff_dvvideo_init(avctx);
} }

View File

@ -36,7 +36,7 @@
* between (run, level) and vlc is not 1-1. So you have to watch out for that * between (run, level) and vlc is not 1-1. So you have to watch out for that
* when building misc. tables. E.g. (1, 0) can be either 0x7cf or 0x1f82. * when building misc. tables. E.g. (1, 0) can be either 0x7cf or 0x1f82.
*/ */
static const uint16_t dv_vlc_bits[409] = { static const uint16_t dv_vlc_bits[NB_DV_VLC] = {
0x0000, 0x0002, 0x0007, 0x0008, 0x0009, 0x0014, 0x0015, 0x0016, 0x0000, 0x0002, 0x0007, 0x0008, 0x0009, 0x0014, 0x0015, 0x0016,
0x0017, 0x0030, 0x0031, 0x0032, 0x0033, 0x0068, 0x0069, 0x006a, 0x0017, 0x0030, 0x0031, 0x0032, 0x0033, 0x0068, 0x0069, 0x006a,
0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x00e0, 0x00e1, 0x00e2, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x00e0, 0x00e1, 0x00e2,
@ -91,7 +91,7 @@ static const uint16_t dv_vlc_bits[409] = {
0x0006, 0x0006,
}; };
static const uint8_t dv_vlc_len[409] = { static const uint8_t dv_vlc_len[NB_DV_VLC] = {
2, 3, 4, 4, 4, 5, 5, 5, 2, 3, 4, 4, 4, 5, 5, 5,
5, 6, 6, 6, 6, 7, 7, 7, 5, 6, 6, 6, 6, 7, 7, 7,
7, 7, 7, 7, 7, 8, 8, 8, 7, 7, 7, 7, 7, 8, 8, 8,
@ -146,7 +146,7 @@ static const uint8_t dv_vlc_len[409] = {
4, 4,
}; };
static const uint8_t dv_vlc_run[409] = { static const uint8_t dv_vlc_run[NB_DV_VLC] = {
0, 0, 1, 0, 0, 2, 1, 0, 0, 0, 1, 0, 0, 2, 1, 0,
0, 3, 4, 0, 0, 5, 6, 2, 0, 3, 4, 0, 0, 5, 6, 2,
1, 1, 0, 0, 0, 7, 8, 9, 1, 1, 0, 0, 0, 7, 8, 9,
@ -201,7 +201,7 @@ static const uint8_t dv_vlc_run[409] = {
127, 127,
}; };
static const uint8_t dv_vlc_level[409] = { static const uint8_t dv_vlc_level[NB_DV_VLC] = {
1, 2, 1, 3, 4, 1, 2, 5, 1, 2, 1, 3, 4, 1, 2, 5,
6, 1, 1, 7, 8, 1, 1, 2, 6, 1, 1, 7, 8, 1, 1, 2,
3, 4, 9, 10, 11, 1, 1, 1, 3, 4, 9, 10, 11, 1, 1, 1,

View File

@ -78,7 +78,7 @@ typedef struct {
* warning -- this field can be NULL, be sure to not pass this AVIOContext * warning -- this field can be NULL, be sure to not pass this AVIOContext
* to any av_opt_* functions in that case. * to any av_opt_* functions in that case.
*/ */
AVClass *av_class; const AVClass *av_class;
unsigned char *buffer; /**< Start of the buffer. */ unsigned char *buffer; /**< Start of the buffer. */
int buffer_size; /**< Maximum buffer size */ int buffer_size; /**< Maximum buffer size */
unsigned char *buf_ptr; /**< Current position in the buffer */ unsigned char *buf_ptr; /**< Current position in the buffer */

View File

@ -305,14 +305,18 @@ static int decode_main_header(NUTContext *nut)
GET_V(nut->header_count, tmp < 128U) GET_V(nut->header_count, tmp < 128U)
nut->header_count++; nut->header_count++;
for (i = 1; i < nut->header_count; i++) { for (i = 1; i < nut->header_count; i++) {
uint8_t *hdr;
GET_V(nut->header_len[i], tmp > 0 && tmp < 256); GET_V(nut->header_len[i], tmp > 0 && tmp < 256);
rem -= nut->header_len[i]; rem -= nut->header_len[i];
if (rem < 0) { if (rem < 0) {
av_log(s, AV_LOG_ERROR, "invalid elision header\n"); av_log(s, AV_LOG_ERROR, "invalid elision header\n");
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
nut->header[i] = av_malloc(nut->header_len[i]); hdr = av_malloc(nut->header_len[i]);
avio_read(bc, nut->header[i], nut->header_len[i]); if (!hdr)
return AVERROR(ENOMEM);
avio_read(bc, hdr, nut->header_len[i]);
nut->header[i] = hdr;
} }
assert(nut->header_len[0] == 0); assert(nut->header_len[0] == 0);
} }

View File

@ -856,7 +856,7 @@ INIT_XMM
;%1 == instruction ;%1 == instruction
;%2 == 1 if float, 0 if int ;%2 == 1 if float, 0 if int
;%3 == 1 if 4-operand (xmm, xmm, xmm, imm), 0 if 3-operand (xmm, xmm, xmm) ;%3 == 1 if 4-operand (xmm, xmm, xmm, imm), 0 if 2- or 3-operand (xmm, xmm, xmm)
;%4 == number of operands given ;%4 == number of operands given
;%5+: operands ;%5+: operands
%macro RUN_AVX_INSTR 6-7+ %macro RUN_AVX_INSTR 6-7+
@ -866,7 +866,11 @@ INIT_XMM
%define %%size mmsize %define %%size mmsize
%endif %endif
%if %%size==32 %if %%size==32
v%1 %5, %6, %7 %if %0 >= 7
v%1 %5, %6, %7
%else
v%1 %5, %6
%endif
%else %else
%if %%size==8 %if %%size==8
%define %%regmov movq %define %%regmov movq
@ -952,6 +956,8 @@ AVX_INSTR cmppd, 1, 0, 0
AVX_INSTR cmpps, 1, 0, 0 AVX_INSTR cmpps, 1, 0, 0
AVX_INSTR cmpsd, 1, 0, 0 AVX_INSTR cmpsd, 1, 0, 0
AVX_INSTR cmpss, 1, 0, 0 AVX_INSTR cmpss, 1, 0, 0
AVX_INSTR cvtdq2ps, 1, 0, 0
AVX_INSTR cvtps2dq, 1, 0, 0
AVX_INSTR divpd, 1, 0, 0 AVX_INSTR divpd, 1, 0, 0
AVX_INSTR divps, 1, 0, 0 AVX_INSTR divps, 1, 0, 0
AVX_INSTR divsd, 1, 0, 0 AVX_INSTR divsd, 1, 0, 0

View File

@ -28,6 +28,11 @@ errfile="${outdir}/${test}.err"
cmpfile="${outdir}/${test}.diff" cmpfile="${outdir}/${test}.diff"
repfile="${outdir}/${test}.rep" repfile="${outdir}/${test}.rep"
target_path(){
test ${1} = ${1#/} && p=${target_path}/
echo ${p}${1}
}
# $1=value1, $2=value2, $3=threshold # $1=value1, $2=value2, $3=threshold
# prints 0 if absolute difference between value1 and value2 is <= threshold # prints 0 if absolute difference between value1 and value2 is <= threshold
compare(){ compare(){
@ -86,12 +91,15 @@ pcm(){
enc_dec_pcm(){ enc_dec_pcm(){
out_fmt=$1 out_fmt=$1
pcm_fmt=$2 dec_fmt=$2
shift 2 pcm_fmt=$3
src_file=$(target_path $4)
shift 4
encfile="${outdir}/${test}.${out_fmt}" encfile="${outdir}/${test}.${out_fmt}"
cleanfiles=$encfile cleanfiles=$encfile
avconv -i $ref "$@" -f $out_fmt -y ${target_path}/${encfile} || return encfile=$(target_path ${encfile})
avconv -i ${target_path}/${encfile} -c:a pcm_${pcm_fmt} -f wav - avconv -i $src_file "$@" -f $out_fmt -y ${encfile} || return
avconv -i ${encfile} -c:a pcm_${pcm_fmt} -f ${dec_fmt} -
} }
regtest(){ regtest(){

View File

@ -73,7 +73,7 @@ FATE_AAC += $(FATE_AAC_CT:%=fate-aac-ct-%)
FATE_AAC_ENCODE += fate-aac-aref-encode FATE_AAC_ENCODE += fate-aac-aref-encode
fate-aac-aref-encode: $(AREF) fate-aac-aref-encode: $(AREF)
fate-aac-aref-encode: CMD = enc_dec_pcm adts s16le -strict -2 -c:a aac -b:a 512k fate-aac-aref-encode: CMD = enc_dec_pcm adts wav s16le $(REF) -strict -2 -c:a aac -b:a 512k
fate-aac-aref-encode: CMP = stddev fate-aac-aref-encode: CMP = stddev
fate-aac-aref-encode: REF = ./tests/data/acodec.ref.wav fate-aac-aref-encode: REF = ./tests/data/acodec.ref.wav
fate-aac-aref-encode: CMP_SHIFT = -4096 fate-aac-aref-encode: CMP_SHIFT = -4096
@ -81,7 +81,7 @@ fate-aac-aref-encode: CMP_TARGET = 1862
fate-aac-aref-encode: SIZE_TOLERANCE = 2464 fate-aac-aref-encode: SIZE_TOLERANCE = 2464
FATE_AAC_ENCODE += fate-aac-ln-encode FATE_AAC_ENCODE += fate-aac-ln-encode
fate-aac-ln-encode: CMD = enc_dec_pcm adts s16le -strict -2 -c:a aac -b:a 512k fate-aac-ln-encode: CMD = enc_dec_pcm adts wav s16le $(REF) -strict -2 -c:a aac -b:a 512k
fate-aac-ln-encode: CMP = stddev fate-aac-ln-encode: CMP = stddev
fate-aac-ln-encode: REF = $(SAMPLES)/audio-reference/luckynight_2ch_44kHz_s16.wav fate-aac-ln-encode: REF = $(SAMPLES)/audio-reference/luckynight_2ch_44kHz_s16.wav
fate-aac-ln-encode: CMP_SHIFT = -4096 fate-aac-ln-encode: CMP_SHIFT = -4096

View File

@ -29,7 +29,7 @@ fate-eac3-4: CMP = oneoff
fate-eac3-4: REF = $(SAMPLES)/eac3/serenity_english_5.1_1536_small.pcm fate-eac3-4: REF = $(SAMPLES)/eac3/serenity_english_5.1_1536_small.pcm
FATE_AC3 += fate-ac3-encode FATE_AC3 += fate-ac3-encode
fate-ac3-encode: CMD = enc_dec_pcm ac3 s16le -c:a ac3 -b:a 128k fate-ac3-encode: CMD = enc_dec_pcm ac3 wav s16le $(REF) -c:a ac3 -b:a 128k
fate-ac3-encode: CMP = stddev fate-ac3-encode: CMP = stddev
fate-ac3-encode: REF = $(SAMPLES)/audio-reference/luckynight_2ch_44kHz_s16.wav fate-ac3-encode: REF = $(SAMPLES)/audio-reference/luckynight_2ch_44kHz_s16.wav
fate-ac3-encode: CMP_SHIFT = -1024 fate-ac3-encode: CMP_SHIFT = -1024
@ -37,7 +37,7 @@ fate-ac3-encode: CMP_TARGET = 399.62
fate-ac3-encode: SIZE_TOLERANCE = 488 fate-ac3-encode: SIZE_TOLERANCE = 488
FATE_AC3 += fate-eac3-encode FATE_AC3 += fate-eac3-encode
fate-eac3-encode: CMD = enc_dec_pcm eac3 s16le -c:a eac3 -b:a 128k fate-eac3-encode: CMD = enc_dec_pcm eac3 wav s16le $(REF) -c:a eac3 -b:a 128k
fate-eac3-encode: CMP = stddev fate-eac3-encode: CMP = stddev
fate-eac3-encode: REF = $(SAMPLES)/audio-reference/luckynight_2ch_44kHz_s16.wav fate-eac3-encode: REF = $(SAMPLES)/audio-reference/luckynight_2ch_44kHz_s16.wav
fate-eac3-encode: CMP_SHIFT = -1024 fate-eac3-encode: CMP_SHIFT = -1024

View File

@ -30,7 +30,7 @@ fate-nellymoser: REF = $(SAMPLES)/nellymoser/nellymoser.pcm
FATE_AUDIO += fate-nellymoser-aref-encode FATE_AUDIO += fate-nellymoser-aref-encode
fate-nellymoser-aref-encode: $(AREF) fate-nellymoser-aref-encode: $(AREF)
fate-nellymoser-aref-encode: CMD = enc_dec_pcm flv s16le -c:a nellymoser fate-nellymoser-aref-encode: CMD = enc_dec_pcm flv wav s16le $(REF) -c:a nellymoser
fate-nellymoser-aref-encode: CMP = stddev fate-nellymoser-aref-encode: CMP = stddev
fate-nellymoser-aref-encode: REF = ./tests/data/acodec-16000-1.ref.wav fate-nellymoser-aref-encode: REF = ./tests/data/acodec-16000-1.ref.wav
fate-nellymoser-aref-encode: CMP_SHIFT = -1172 fate-nellymoser-aref-encode: CMP_SHIFT = -1172

View File

@ -38,7 +38,7 @@ FATE_TESTS += $(FATE_WMAVOICE)
fate-wmavoice: $(FATE_WMAVOICE) fate-wmavoice: $(FATE_WMAVOICE)
FATE_WMA_ENCODE += fate-wmav1-encode FATE_WMA_ENCODE += fate-wmav1-encode
fate-wmav1-encode: CMD = enc_dec_pcm asf s16le -c:a wmav1 -b:a 128k fate-wmav1-encode: CMD = enc_dec_pcm asf wav s16le $(REF) -c:a wmav1 -b:a 128k
fate-wmav1-encode: CMP = stddev fate-wmav1-encode: CMP = stddev
fate-wmav1-encode: REF = $(SAMPLES)/audio-reference/luckynight_2ch_44kHz_s16.wav fate-wmav1-encode: REF = $(SAMPLES)/audio-reference/luckynight_2ch_44kHz_s16.wav
fate-wmav1-encode: CMP_SHIFT = -8192 fate-wmav1-encode: CMP_SHIFT = -8192
@ -46,7 +46,7 @@ fate-wmav1-encode: CMP_TARGET = 291.06
fate-wmav1-encode: SIZE_TOLERANCE = 4632 fate-wmav1-encode: SIZE_TOLERANCE = 4632
FATE_WMA_ENCODE += fate-wmav2-encode FATE_WMA_ENCODE += fate-wmav2-encode
fate-wmav2-encode: CMD = enc_dec_pcm asf s16le -c:a wmav2 -b:a 128k fate-wmav2-encode: CMD = enc_dec_pcm asf wav s16le $(REF) -c:a wmav2 -b:a 128k
fate-wmav2-encode: CMP = stddev fate-wmav2-encode: CMP = stddev
fate-wmav2-encode: REF = $(SAMPLES)/audio-reference/luckynight_2ch_44kHz_s16.wav fate-wmav2-encode: REF = $(SAMPLES)/audio-reference/luckynight_2ch_44kHz_s16.wav
fate-wmav2-encode: CMP_SHIFT = -8192 fate-wmav2-encode: CMP_SHIFT = -8192