1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

Merge remote-tracking branch 'qatar/master'

* qatar/master:
  movenc: Rudimentary IODs support.
  v410enc: fix output buffer size check
  v410enc: include correct headers
  fate: add -pix_fmt rgb48le to r210 test
  flvenc: Support muxing 16 kHz nellymoser
  configure: refactor list of programs into a variable
  fate: add r210 decoder test
  fate: split off Indeo FATE tests into their own file
  fate: split off ATRAC FATE tests into their own file
  fate: Add FATE tests for v410 encoder and decoder
  ARM: fix external symbol refs in rv40 asm
  westwood: Make sure audio header info is present when parsing audio packets
  libgsm: Reset the MS mode of GSM in the flush function
  libgsm: Set options on the right object
  ARM: dca: disable optimised decode_blockcodes() for old gcc

Conflicts:
	configure
	libavformat/movenc.c
	libavformat/movenc.h
	tests/fate2.mak
	tests/ref/acodec/alac
	tests/ref/vsynth1/mpeg4
	tests/ref/vsynth2/mpeg4

Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2011-12-16 01:23:15 +01:00
commit 175cc378b3
18 changed files with 101 additions and 59 deletions

21
configure vendored
View File

@ -978,8 +978,17 @@ COMPONENT_LIST="
protocols protocols
" "
PROGRAM_LIST="
avconv
ffplay
ffprobe
ffserver
ffmpeg
"
CONFIG_LIST=" CONFIG_LIST="
$COMPONENT_LIST $COMPONENT_LIST
$PROGRAM_LIST
aandct aandct
ac3dsp ac3dsp
avcodec avcodec
@ -994,11 +1003,6 @@ CONFIG_LIST="
dwt dwt
dxva2 dxva2
fastdiv fastdiv
ffmpeg
avconv
ffplay
ffprobe
ffserver
fft fft
frei0r frei0r
gnutls gnutls
@ -1790,6 +1794,8 @@ target_os_default=$(tolower $(uname -s))
host_os=$target_os_default host_os=$target_os_default
# configurable options # configurable options
enable $PROGRAM_LIST
enable avcodec enable avcodec
enable avdevice enable avdevice
enable avfilter enable avfilter
@ -1800,11 +1806,6 @@ enable stripping
enable swresample enable swresample
enable swscale enable swscale
enable ffmpeg
enable ffplay
enable ffprobe
enable ffserver
enable asm enable asm
enable debug enable debug
enable doc enable doc

View File

@ -25,7 +25,7 @@
#include "config.h" #include "config.h"
#include "libavutil/intmath.h" #include "libavutil/intmath.h"
#if HAVE_ARMV6 && HAVE_INLINE_ASM #if HAVE_ARMV6 && HAVE_INLINE_ASM && AV_GCC_VERSION_AT_LEAST(4,4)
#define decode_blockcodes decode_blockcodes #define decode_blockcodes decode_blockcodes
static inline int decode_blockcodes(int code1, int code2, int levels, static inline int decode_blockcodes(int code1, int code2, int levels,

View File

@ -372,7 +372,7 @@ endfunc
function ff_\type\()_rv40_qpel8_mc33_neon, export=1 function ff_\type\()_rv40_qpel8_mc33_neon, export=1
mov r3, #8 mov r3, #8
b ff_\type\()_pixels8_xy2_neon b X(ff_\type\()_pixels8_xy2_neon)
endfunc endfunc
function ff_\type\()_rv40_qpel8_mc13_neon, export=1 function ff_\type\()_rv40_qpel8_mc13_neon, export=1
@ -652,7 +652,7 @@ endfunc
function ff_\type\()_rv40_qpel16_mc33_neon, export=1 function ff_\type\()_rv40_qpel16_mc33_neon, export=1
mov r3, #16 mov r3, #16
b ff_\type\()_pixels16_xy2_neon b X(ff_\type\()_pixels16_xy2_neon)
endfunc endfunc
.endm .endm

View File

@ -155,7 +155,7 @@ static av_cold int libgsm_decode_init(AVCodecContext *avctx) {
break; break;
case CODEC_ID_GSM_MS: { case CODEC_ID_GSM_MS: {
int one = 1; int one = 1;
gsm_option(avctx->priv_data, GSM_OPT_WAV49, &one); gsm_option(s->state, GSM_OPT_WAV49, &one);
avctx->frame_size = 2 * GSM_FRAME_SIZE; avctx->frame_size = 2 * GSM_FRAME_SIZE;
avctx->block_align = GSM_MS_BLOCK_SIZE; avctx->block_align = GSM_MS_BLOCK_SIZE;
} }
@ -212,9 +212,12 @@ static int libgsm_decode_frame(AVCodecContext *avctx, void *data,
static void libgsm_flush(AVCodecContext *avctx) { static void libgsm_flush(AVCodecContext *avctx) {
LibGSMDecodeContext *s = avctx->priv_data; LibGSMDecodeContext *s = avctx->priv_data;
int one = 1;
gsm_destroy(s->state); gsm_destroy(s->state);
s->state = gsm_create(); s->state = gsm_create();
if (avctx->codec_id == CODEC_ID_GSM_MS)
gsm_option(s->state, GSM_OPT_WAV49, &one);
} }
AVCodec ff_libgsm_decoder = { AVCodec ff_libgsm_decoder = {

View File

@ -20,8 +20,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/ */
#include "libavutil/intreadwrite.h"
#include "avcodec.h" #include "avcodec.h"
#include "put_bits.h"
static av_cold int v410_encode_init(AVCodecContext *avctx) static av_cold int v410_encode_init(AVCodecContext *avctx)
{ {
@ -50,7 +50,7 @@ static int v410_encode_frame(AVCodecContext *avctx, uint8_t *buf,
int i, j; int i, j;
int output_size = 0; int output_size = 0;
if (buf_size < avctx->width * avctx->height * 3) { if (buf_size < avctx->width * avctx->height * 4) {
av_log(avctx, AV_LOG_ERROR, "Out buffer is too small.\n"); av_log(avctx, AV_LOG_ERROR, "Out buffer is too small.\n");
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
} }

View File

@ -93,6 +93,7 @@ static int get_audio_flags(AVCodecContext *enc){
case 11025: case 11025:
flags |= FLV_SAMPLERATE_11025HZ; flags |= FLV_SAMPLERATE_11025HZ;
break; break;
case 16000: //nellymoser only
case 8000: //nellymoser only case 8000: //nellymoser only
case 5512: //not mp3 case 5512: //not mp3
if(enc->codec_id != CODEC_ID_MP3){ if(enc->codec_id != CODEC_ID_MP3){
@ -128,6 +129,8 @@ static int get_audio_flags(AVCodecContext *enc){
case CODEC_ID_NELLYMOSER: case CODEC_ID_NELLYMOSER:
if (enc->sample_rate == 8000) { if (enc->sample_rate == 8000) {
flags |= FLV_CODECID_NELLYMOSER_8KHZ_MONO | FLV_SAMPLESSIZE_16BIT; flags |= FLV_CODECID_NELLYMOSER_8KHZ_MONO | FLV_SAMPLESSIZE_16BIT;
} else if (enc->sample_rate == 16000) {
flags |= FLV_CODECID_NELLYMOSER_16KHZ_MONO | FLV_SAMPLESSIZE_16BIT;
} else { } else {
flags |= FLV_CODECID_NELLYMOSER | FLV_SAMPLESSIZE_16BIT; flags |= FLV_CODECID_NELLYMOSER | FLV_SAMPLESSIZE_16BIT;
} }

View File

@ -49,6 +49,9 @@ static const AVOption options[] = {
{ "frag_size", "maximum fragment size", offsetof(MOVMuxContext, max_fragment_size), AV_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, 0 }, { "frag_size", "maximum fragment size", offsetof(MOVMuxContext, max_fragment_size), AV_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, 0 },
{ "frag_duration", "maximum fragment duration", offsetof(MOVMuxContext, max_fragment_duration), AV_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, 0 }, { "frag_duration", "maximum fragment duration", offsetof(MOVMuxContext, max_fragment_duration), AV_OPT_TYPE_INT, {.dbl = 0}, 0, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, 0 },
FF_RTP_FLAG_OPTS(MOVMuxContext, rtp_flags), FF_RTP_FLAG_OPTS(MOVMuxContext, rtp_flags),
{ "skip_iods", "Skip writing iods atom.", offsetof(MOVMuxContext, iods_skip), AV_OPT_TYPE_INT, {.dbl = 0}, 0, 1, AV_OPT_FLAG_ENCODING_PARAM},
{ "iods_audio_profile", "iods audio profile atom.", offsetof(MOVMuxContext, iods_audio_profile), AV_OPT_TYPE_INT, {.dbl = -1}, -1, 255, AV_OPT_FLAG_ENCODING_PARAM},
{ "iods_video_profile", "iods video profile atom.", offsetof(MOVMuxContext, iods_video_profile), AV_OPT_TYPE_INT, {.dbl = -1}, -1, 255, AV_OPT_FLAG_ENCODING_PARAM},
{ NULL }, { NULL },
}; };
@ -1489,21 +1492,34 @@ static int mov_write_traf_tag(AVIOContext *pb, MOVTrack *track, AVStream *st)
return updateSize(pb, pos); return updateSize(pb, pos);
} }
#if 0
/* TODO: Not sorted out, but not necessary either */
static int mov_write_iods_tag(AVIOContext *pb, MOVMuxContext *mov) static int mov_write_iods_tag(AVIOContext *pb, MOVMuxContext *mov)
{ {
avio_wb32(pb, 0x15); /* size */ int i, has_audio = 0, has_video = 0;
int64_t pos = avio_tell(pb);
int audio_profile = mov->iods_audio_profile;
int video_profile = mov->iods_video_profile;
for (i = 0; i < mov->nb_streams; i++) {
if(mov->tracks[i].entry > 0) {
has_audio |= mov->tracks[i].enc->codec_type == AVMEDIA_TYPE_AUDIO;
has_video |= mov->tracks[i].enc->codec_type == AVMEDIA_TYPE_VIDEO;
}
}
if (audio_profile < 0)
audio_profile = 0xFF - has_audio;
if (video_profile < 0)
video_profile = 0xFF - has_video;
avio_wb32(pb, 0x0); /* size */
ffio_wfourcc(pb, "iods"); ffio_wfourcc(pb, "iods");
avio_wb32(pb, 0); /* version & flags */ avio_wb32(pb, 0); /* version & flags */
avio_wb16(pb, 0x1007); putDescr(pb, 0x10, 7);
avio_w8(pb, 0); avio_wb16(pb, 0x004f);
avio_wb16(pb, 0x4fff); avio_w8(pb, 0xff);
avio_wb16(pb, 0xfffe); avio_w8(pb, 0xff);
avio_wb16(pb, 0x01ff); avio_w8(pb, audio_profile);
return 0x15; avio_w8(pb, video_profile);
avio_w8(pb, 0xff);
return updateSize(pb, pos);
} }
#endif
static int mov_write_mvhd_tag(AVIOContext *pb, MOVMuxContext *mov) static int mov_write_mvhd_tag(AVIOContext *pb, MOVMuxContext *mov)
{ {
@ -1968,7 +1984,8 @@ static int mov_write_moov_tag(AVIOContext *pb, MOVMuxContext *mov,
} }
mov_write_mvhd_tag(pb, mov); mov_write_mvhd_tag(pb, mov);
//mov_write_iods_tag(pb, mov); if (mov->mode != MODE_MOV && !mov->iods_skip)
mov_write_iods_tag(pb, mov);
for (i=0; i<mov->nb_streams; i++) { for (i=0; i<mov->nb_streams; i++) {
if(mov->tracks[i].entry > 0) { if(mov->tracks[i].entry > 0) {
mov_write_trak_tag(pb, mov, &(mov->tracks[i]), i < s->nb_streams ? s->streams[i] : NULL); mov_write_trak_tag(pb, mov, &(mov->tracks[i]), i < s->nb_streams ? s->streams[i] : NULL);

View File

@ -125,6 +125,10 @@ typedef struct MOVMuxContext {
int64_t reserved_moov_pos; int64_t reserved_moov_pos;
int max_fragment_duration; int max_fragment_duration;
int max_fragment_size; int max_fragment_size;
int iods_skip;
int iods_video_profile;
int iods_audio_profile;
} MOVMuxContext; } MOVMuxContext;
#define FF_MOV_FLAG_RTP_HINT 1 #define FF_MOV_FLAG_RTP_HINT 1

View File

@ -331,6 +331,11 @@ static int wsvqa_read_packet(AVFormatContext *s,
skip_byte = chunk_size & 0x01; skip_byte = chunk_size & 0x01;
if ((chunk_type == SND2_TAG || chunk_type == SND1_TAG) && wsvqa->audio_channels == 0) {
av_log(s, AV_LOG_ERROR, "audio chunk without any audio header information found\n");
return AVERROR_INVALIDDATA;
}
if ((chunk_type == SND1_TAG) || (chunk_type == SND2_TAG) || (chunk_type == VQFR_TAG)) { if ((chunk_type == SND1_TAG) || (chunk_type == SND2_TAG) || (chunk_type == VQFR_TAG)) {
ret= av_get_packet(pb, pkt, chunk_size); ret= av_get_packet(pb, pkt, chunk_size);

View File

@ -48,10 +48,12 @@ include $(SRC_PATH)/tests/fate/ac3.mak
include $(SRC_PATH)/tests/fate/als.mak include $(SRC_PATH)/tests/fate/als.mak
include $(SRC_PATH)/tests/fate/amrnb.mak include $(SRC_PATH)/tests/fate/amrnb.mak
include $(SRC_PATH)/tests/fate/amrwb.mak include $(SRC_PATH)/tests/fate/amrwb.mak
include $(SRC_PATH)/tests/fate/atrac.mak
include $(SRC_PATH)/tests/fate/dct.mak include $(SRC_PATH)/tests/fate/dct.mak
include $(SRC_PATH)/tests/fate/fft.mak include $(SRC_PATH)/tests/fate/fft.mak
include $(SRC_PATH)/tests/fate/h264.mak 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/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

View File

@ -126,12 +126,6 @@ FATE_TESTS += fate-iff-ilbm
fate-iff-ilbm: CMD = framecrc -i $(SAMPLES)/iff/lms-matriks.ilbm -pix_fmt rgb24 fate-iff-ilbm: CMD = framecrc -i $(SAMPLES)/iff/lms-matriks.ilbm -pix_fmt rgb24
FATE_TESTS += fate-iff-pcm FATE_TESTS += fate-iff-pcm
fate-iff-pcm: CMD = md5 -i $(SAMPLES)/iff/Bells -f s16le fate-iff-pcm: CMD = md5 -i $(SAMPLES)/iff/Bells -f s16le
FATE_TESTS += fate-indeo2
fate-indeo2: CMD = framecrc -i $(SAMPLES)/rt21/VPAR0026.AVI
FATE_TESTS += fate-indeo3
fate-indeo3: CMD = framecrc -i $(SAMPLES)/iv32/cubes.mov
FATE_TESTS += fate-indeo5
fate-indeo5: CMD = framecrc -i $(SAMPLES)/iv50/Educ_Movie_DeadlyForce.avi -an
FATE_TESTS += fate-interplay-mve-16bit FATE_TESTS += fate-interplay-mve-16bit
fate-interplay-mve-16bit: CMD = framecrc -i $(SAMPLES)/interplay-mve/descent3-level5-16bit-partial.mve -pix_fmt rgb24 fate-interplay-mve-16bit: CMD = framecrc -i $(SAMPLES)/interplay-mve/descent3-level5-16bit-partial.mve -pix_fmt rgb24
FATE_TESTS += fate-interplay-mve-8bit FATE_TESTS += fate-interplay-mve-8bit

19
tests/fate/atrac.mak Normal file
View File

@ -0,0 +1,19 @@
FATE_TESTS += fate-atrac1
fate-atrac1: CMD = pcm -i $(SAMPLES)/atrac1/test_tones_small.aea
fate-atrac1: CMP = oneoff
fate-atrac1: REF = $(SAMPLES)/atrac1/test_tones_small.pcm
FATE_TESTS += fate-atrac3-1
fate-atrac3-1: CMD = pcm -i $(SAMPLES)/atrac3/mc_sich_at3_066_small.wav
fate-atrac3-1: CMP = oneoff
fate-atrac3-1: REF = $(SAMPLES)/atrac3/mc_sich_at3_066_small.pcm
FATE_TESTS += fate-atrac3-2
fate-atrac3-2: CMD = pcm -i $(SAMPLES)/atrac3/mc_sich_at3_105_small.wav
fate-atrac3-2: CMP = oneoff
fate-atrac3-2: REF = $(SAMPLES)/atrac3/mc_sich_at3_105_small.pcm
FATE_TESTS += fate-atrac3-3
fate-atrac3-3: CMD = pcm -i $(SAMPLES)/atrac3/mc_sich_at3_132_small.wav
fate-atrac3-3: CMP = oneoff
fate-atrac3-3: REF = $(SAMPLES)/atrac3/mc_sich_at3_132_small.pcm

8
tests/fate/indeo.mak Normal file
View File

@ -0,0 +1,8 @@
FATE_TESTS += fate-indeo2
fate-indeo2: CMD = framecrc -i $(SAMPLES)/rt21/VPAR0026.AVI
FATE_TESTS += fate-indeo3
fate-indeo3: CMD = framecrc -i $(SAMPLES)/iv32/cubes.mov
FATE_TESTS += fate-indeo5
fate-indeo5: CMD = framecrc -i $(SAMPLES)/iv50/Educ_Movie_DeadlyForce.avi -an

View File

@ -40,26 +40,6 @@ fate-truespeech: CMD = pcm -i $(SAMPLES)/truespeech/a6.wav
fate-truespeech: CMP = oneoff fate-truespeech: CMP = oneoff
fate-truespeech: REF = $(SAMPLES)/truespeech/a6.pcm fate-truespeech: REF = $(SAMPLES)/truespeech/a6.pcm
FATE_TESTS += fate-atrac1
fate-atrac1: CMD = pcm -i $(SAMPLES)/atrac1/test_tones_small.aea
fate-atrac1: CMP = oneoff
fate-atrac1: REF = $(SAMPLES)/atrac1/test_tones_small.pcm
FATE_TESTS += fate-atrac3-1
fate-atrac3-1: CMD = pcm -i $(SAMPLES)/atrac3/mc_sich_at3_066_small.wav
fate-atrac3-1: CMP = oneoff
fate-atrac3-1: REF = $(SAMPLES)/atrac3/mc_sich_at3_066_small.pcm
FATE_TESTS += fate-atrac3-2
fate-atrac3-2: CMD = pcm -i $(SAMPLES)/atrac3/mc_sich_at3_105_small.wav
fate-atrac3-2: CMP = oneoff
fate-atrac3-2: REF = $(SAMPLES)/atrac3/mc_sich_at3_105_small.pcm
FATE_TESTS += fate-atrac3-3
fate-atrac3-3: CMD = pcm -i $(SAMPLES)/atrac3/mc_sich_at3_132_small.wav
fate-atrac3-3: CMP = oneoff
fate-atrac3-3: REF = $(SAMPLES)/atrac3/mc_sich_at3_132_small.pcm
FATE_TESTS += fate-gsm FATE_TESTS += fate-gsm
fate-gsm: CMD = framecrc -i $(SAMPLES)/gsm/sample-gsm-8000.mov -t 10 fate-gsm: CMD = framecrc -i $(SAMPLES)/gsm/sample-gsm-8000.mov -t 10
@ -132,3 +112,6 @@ fate-v410dec: CMD = framecrc -i $(SAMPLES)/v410/lenav410.mov -pix_fmt yuv444p10l
FATE_TESTS += fate-v410enc FATE_TESTS += fate-v410enc
fate-v410enc: tests/vsynth1/00.pgm fate-v410enc: tests/vsynth1/00.pgm
fate-v410enc: CMD = md5 -f image2 -vcodec pgmyuv -i $(TARGET_PATH)/tests/vsynth1/%02d.pgm -flags +bitexact -vcodec v410 -f avi fate-v410enc: CMD = md5 -f image2 -vcodec pgmyuv -i $(TARGET_PATH)/tests/vsynth1/%02d.pgm -flags +bitexact -vcodec v410 -f avi
FATE_TESTS += fate-r210
fate-r210: CMD = framecrc -i $(SAMPLES)/r210/r210.avi -pix_fmt rgb48le

View File

@ -1,4 +1,4 @@
4fe333ff79e86cca6ba8c109cc08263e *./tests/data/acodec/alac.m4a bff6044a7f303d8482775f4fcdc2d272 *./tests/data/acodec/alac.m4a
389166 ./tests/data/acodec/alac.m4a 389190 ./tests/data/acodec/alac.m4a
64151e4bcc2b717aa5a8454d424d6a1f *./tests/data/alac.acodec.out.wav 64151e4bcc2b717aa5a8454d424d6a1f *./tests/data/alac.acodec.out.wav
stddev: 0.00 PSNR:999.99 MAXDIFF: 0 bytes: 1058400/ 1058400 stddev: 0.00 PSNR:999.99 MAXDIFF: 0 bytes: 1058400/ 1058400

3
tests/ref/fate/r210 Normal file
View File

@ -0,0 +1,3 @@
0, 0, 1843200, 0xbd414b93
0, 3003, 1843200, 0x23298f1f
0, 6006, 1843200, 0x5a56df19

View File

@ -1,4 +1,4 @@
f32960be0f05be8b2ed03447e1eaea6f *./tests/data/vsynth1/odivx.mp4 146bf838d7efd524595c68145337dfef *./tests/data/vsynth1/odivx.mp4
539996 ./tests/data/vsynth1/odivx.mp4 540020 ./tests/data/vsynth1/odivx.mp4
8828a375448dc5c2215163ba70656f89 *./tests/data/mpeg4.vsynth1.out.yuv 8828a375448dc5c2215163ba70656f89 *./tests/data/mpeg4.vsynth1.out.yuv
stddev: 7.97 PSNR: 30.10 MAXDIFF: 105 bytes: 7603200/ 7603200 stddev: 7.97 PSNR: 30.10 MAXDIFF: 105 bytes: 7603200/ 7603200

View File

@ -1,4 +1,4 @@
4d092ca067362a61b9c96f5f12a1ab5a *./tests/data/vsynth2/odivx.mp4 ad44d4d5a20fbd40641703a5de46fd5c *./tests/data/vsynth2/odivx.mp4
119649 ./tests/data/vsynth2/odivx.mp4 119673 ./tests/data/vsynth2/odivx.mp4
90a3577850239083a9042bef33c50e85 *./tests/data/mpeg4.vsynth2.out.yuv 90a3577850239083a9042bef33c50e85 *./tests/data/mpeg4.vsynth2.out.yuv
stddev: 5.34 PSNR: 33.57 MAXDIFF: 83 bytes: 7603200/ 7603200 stddev: 5.34 PSNR: 33.57 MAXDIFF: 83 bytes: 7603200/ 7603200