* qatar/master: configure: make executable again LATM/AAC: Free previously initialized context on reinit. configure: Do not unconditionally add -Wall to host CFLAGS. configure: Set OS/2 objformat to a.out. Add support for a.out object format to assembler macros. fate: disable threading for encoding fate: add comment field fate: allow overriding default build and install dirs mpegtsenc: Add an AVClass pointer to the private data mpegaudio: clean up #includes mpegaudio: move all header parsing to mpegaudiodecheader.[ch] Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n0.8
@@ -1700,7 +1700,7 @@ LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"' | |||||
CC_O='-o $@' | CC_O='-o $@' | ||||
host_cflags='-D_ISOC99_SOURCE -O3 -g -Wall' | |||||
host_cflags='-D_ISOC99_SOURCE -O3 -g' | |||||
host_libs='-lm' | host_libs='-lm' | ||||
target_path='$(CURDIR)' | target_path='$(CURDIR)' | ||||
@@ -2363,6 +2363,7 @@ check_cc -D_LARGEFILE_SOURCE <<EOF && add_cppflags -D_LARGEFILE_SOURCE | |||||
EOF | EOF | ||||
check_host_cflags -std=c99 | check_host_cflags -std=c99 | ||||
check_host_cflags -Wall | |||||
case "$arch" in | case "$arch" in | ||||
alpha|ia64|mips|parisc|sparc) | alpha|ia64|mips|parisc|sparc) | ||||
@@ -2504,6 +2505,7 @@ case $target_os in | |||||
os/2*) | os/2*) | ||||
strip="lxlite -CS" | strip="lxlite -CS" | ||||
ln_s="cp -f" | ln_s="cp -f" | ||||
objformat="aout" | |||||
add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap | add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap | ||||
SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf' | SHFLAGS='$(SUBDIR)$(NAME).def -Zdll -Zomf' | ||||
FFSERVERLDFLAGS="" | FFSERVERLDFLAGS="" | ||||
@@ -2468,6 +2468,7 @@ static int latm_decode_frame(AVCodecContext *avctx, void *out, int *out_size, | |||||
*out_size = 0; | *out_size = 0; | ||||
return avpkt->size; | return avpkt->size; | ||||
} else { | } else { | ||||
aac_decode_close(avctx); | |||||
if ((err = aac_decode_init(avctx)) < 0) | if ((err = aac_decode_init(avctx)) < 0) | ||||
return err; | return err; | ||||
latmctx->initialized = 1; | latmctx->initialized = 1; | ||||
@@ -20,7 +20,7 @@ | |||||
#include "libavutil/intreadwrite.h" | #include "libavutil/intreadwrite.h" | ||||
#include "avcodec.h" | #include "avcodec.h" | ||||
#include "mpegaudio.h" | |||||
#include "mpegaudiodecheader.h" | |||||
static int mp3_header_compress(AVBitStreamFilterContext *bsfc, AVCodecContext *avctx, const char *args, | static int mp3_header_compress(AVBitStreamFilterContext *bsfc, AVCodecContext *avctx, const char *args, | ||||
@@ -20,7 +20,7 @@ | |||||
#include "libavutil/intreadwrite.h" | #include "libavutil/intreadwrite.h" | ||||
#include "avcodec.h" | #include "avcodec.h" | ||||
#include "mpegaudio.h" | |||||
#include "mpegaudiodecheader.h" | |||||
#include "mpegaudiodata.h" | #include "mpegaudiodata.h" | ||||
@@ -30,7 +30,7 @@ | |||||
# define CONFIG_FLOAT 0 | # define CONFIG_FLOAT 0 | ||||
#endif | #endif | ||||
#include "avcodec.h" | |||||
#include <stdint.h> | |||||
/* max frame size, in samples */ | /* max frame size, in samples */ | ||||
#define MPA_FRAME_SIZE 1152 | #define MPA_FRAME_SIZE 1152 | ||||
@@ -47,8 +47,6 @@ | |||||
#define MPA_DUAL 2 | #define MPA_DUAL 2 | ||||
#define MPA_MONO 3 | #define MPA_MONO 3 | ||||
#define MP3_MASK 0xFFFE0CCF | |||||
#ifndef FRAC_BITS | #ifndef FRAC_BITS | ||||
#define FRAC_BITS 23 /* fractional bits for sb_samples and dct */ | #define FRAC_BITS 23 /* fractional bits for sb_samples and dct */ | ||||
#define WFRAC_BITS 16 /* fractional bits for window */ | #define WFRAC_BITS 16 /* fractional bits for window */ | ||||
@@ -72,40 +70,6 @@ typedef int32_t MPA_INT; | |||||
typedef int16_t OUT_INT; | typedef int16_t OUT_INT; | ||||
#endif | #endif | ||||
#define MPA_DECODE_HEADER \ | |||||
int frame_size; \ | |||||
int error_protection; \ | |||||
int layer; \ | |||||
int sample_rate; \ | |||||
int sample_rate_index; /* between 0 and 8 */ \ | |||||
int bit_rate; \ | |||||
int nb_channels; \ | |||||
int mode; \ | |||||
int mode_ext; \ | |||||
int lsf; | |||||
typedef struct MPADecodeHeader { | |||||
MPA_DECODE_HEADER | |||||
} MPADecodeHeader; | |||||
int ff_mpa_l2_select_table(int bitrate, int nb_channels, int freq, int lsf); | int ff_mpa_l2_select_table(int bitrate, int nb_channels, int freq, int lsf); | ||||
int ff_mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate, int *channels, int *frame_size, int *bitrate); | |||||
/* fast header check for resync */ | |||||
static inline int ff_mpa_check_header(uint32_t header){ | |||||
/* header */ | |||||
if ((header & 0xffe00000) != 0xffe00000) | |||||
return -1; | |||||
/* layer check */ | |||||
if ((header & (3<<17)) == 0) | |||||
return -1; | |||||
/* bit rate */ | |||||
if ((header & (0xf<<12)) == 0xf<<12) | |||||
return -1; | |||||
/* frequency */ | |||||
if ((header & (3<<10)) == 3<<10) | |||||
return -1; | |||||
return 0; | |||||
} | |||||
#endif /* AVCODEC_MPEGAUDIO_H */ | #endif /* AVCODEC_MPEGAUDIO_H */ |
@@ -21,7 +21,6 @@ | |||||
*/ | */ | ||||
#include "parser.h" | #include "parser.h" | ||||
#include "mpegaudio.h" | |||||
#include "mpegaudiodecheader.h" | #include "mpegaudiodecheader.h" | ||||
@@ -38,45 +37,6 @@ typedef struct MpegAudioParseContext { | |||||
#define SAME_HEADER_MASK \ | #define SAME_HEADER_MASK \ | ||||
(0xffe00000 | (3 << 17) | (3 << 10) | (3 << 19)) | (0xffe00000 | (3 << 17) | (3 << 10) | (3 << 19)) | ||||
/* useful helper to get mpeg audio stream infos. Return -1 if error in | |||||
header, otherwise the coded frame size in bytes */ | |||||
int ff_mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate, int *channels, int *frame_size, int *bit_rate) | |||||
{ | |||||
MPADecodeHeader s1, *s = &s1; | |||||
if (ff_mpa_check_header(head) != 0) | |||||
return -1; | |||||
if (ff_mpegaudio_decode_header(s, head) != 0) { | |||||
return -1; | |||||
} | |||||
switch(s->layer) { | |||||
case 1: | |||||
avctx->codec_id = CODEC_ID_MP1; | |||||
*frame_size = 384; | |||||
break; | |||||
case 2: | |||||
avctx->codec_id = CODEC_ID_MP2; | |||||
*frame_size = 1152; | |||||
break; | |||||
default: | |||||
case 3: | |||||
avctx->codec_id = CODEC_ID_MP3; | |||||
if (s->lsf) | |||||
*frame_size = 576; | |||||
else | |||||
*frame_size = 1152; | |||||
break; | |||||
} | |||||
*sample_rate = s->sample_rate; | |||||
*channels = s->nb_channels; | |||||
*bit_rate = s->bit_rate; | |||||
avctx->sub_id = s->layer; | |||||
return s->frame_size; | |||||
} | |||||
static int mpegaudio_parse(AVCodecParserContext *s1, | static int mpegaudio_parse(AVCodecParserContext *s1, | ||||
AVCodecContext *avctx, | AVCodecContext *avctx, | ||||
const uint8_t **poutbuf, int *poutbuf_size, | const uint8_t **poutbuf, int *poutbuf_size, | ||||
@@ -27,7 +27,7 @@ | |||||
#ifndef AVCODEC_MPEGAUDIODATA_H | #ifndef AVCODEC_MPEGAUDIODATA_H | ||||
#define AVCODEC_MPEGAUDIODATA_H | #define AVCODEC_MPEGAUDIODATA_H | ||||
#include "libavutil/common.h" | |||||
#include <stdint.h> | |||||
#define MODE_EXT_MS_STEREO 2 | #define MODE_EXT_MS_STEREO 2 | ||||
#define MODE_EXT_I_STEREO 1 | #define MODE_EXT_I_STEREO 1 | ||||
@@ -27,7 +27,6 @@ | |||||
#include "libavutil/audioconvert.h" | #include "libavutil/audioconvert.h" | ||||
#include "avcodec.h" | #include "avcodec.h" | ||||
#include "get_bits.h" | #include "get_bits.h" | ||||
#include "dsputil.h" | |||||
#include "mathops.h" | #include "mathops.h" | ||||
#include "mpegaudiodsp.h" | #include "mpegaudiodsp.h" | ||||
@@ -108,3 +108,40 @@ int ff_mpegaudio_decode_header(MPADecodeHeader *s, uint32_t header) | |||||
#endif | #endif | ||||
return 0; | return 0; | ||||
} | } | ||||
int ff_mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate, int *channels, int *frame_size, int *bit_rate) | |||||
{ | |||||
MPADecodeHeader s1, *s = &s1; | |||||
if (ff_mpa_check_header(head) != 0) | |||||
return -1; | |||||
if (ff_mpegaudio_decode_header(s, head) != 0) { | |||||
return -1; | |||||
} | |||||
switch(s->layer) { | |||||
case 1: | |||||
avctx->codec_id = CODEC_ID_MP1; | |||||
*frame_size = 384; | |||||
break; | |||||
case 2: | |||||
avctx->codec_id = CODEC_ID_MP2; | |||||
*frame_size = 1152; | |||||
break; | |||||
default: | |||||
case 3: | |||||
avctx->codec_id = CODEC_ID_MP3; | |||||
if (s->lsf) | |||||
*frame_size = 576; | |||||
else | |||||
*frame_size = 1152; | |||||
break; | |||||
} | |||||
*sample_rate = s->sample_rate; | |||||
*channels = s->nb_channels; | |||||
*bit_rate = s->bit_rate; | |||||
avctx->sub_id = s->layer; | |||||
return s->frame_size; | |||||
} |
@@ -27,13 +27,50 @@ | |||||
#ifndef AVCODEC_MPEGAUDIODECHEADER_H | #ifndef AVCODEC_MPEGAUDIODECHEADER_H | ||||
#define AVCODEC_MPEGAUDIODECHEADER_H | #define AVCODEC_MPEGAUDIODECHEADER_H | ||||
#include "libavutil/common.h" | |||||
#include "mpegaudio.h" | |||||
#include "avcodec.h" | |||||
#define MP3_MASK 0xFFFE0CCF | |||||
#define MPA_DECODE_HEADER \ | |||||
int frame_size; \ | |||||
int error_protection; \ | |||||
int layer; \ | |||||
int sample_rate; \ | |||||
int sample_rate_index; /* between 0 and 8 */ \ | |||||
int bit_rate; \ | |||||
int nb_channels; \ | |||||
int mode; \ | |||||
int mode_ext; \ | |||||
int lsf; | |||||
typedef struct MPADecodeHeader { | |||||
MPA_DECODE_HEADER | |||||
} MPADecodeHeader; | |||||
/* header decoding. MUST check the header before because no | /* header decoding. MUST check the header before because no | ||||
consistency check is done there. Return 1 if free format found and | consistency check is done there. Return 1 if free format found and | ||||
that the frame size must be computed externally */ | that the frame size must be computed externally */ | ||||
int ff_mpegaudio_decode_header(MPADecodeHeader *s, uint32_t header); | int ff_mpegaudio_decode_header(MPADecodeHeader *s, uint32_t header); | ||||
/* useful helper to get mpeg audio stream infos. Return -1 if error in | |||||
header, otherwise the coded frame size in bytes */ | |||||
int ff_mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate, int *channels, int *frame_size, int *bitrate); | |||||
/* fast header check for resync */ | |||||
static inline int ff_mpa_check_header(uint32_t header){ | |||||
/* header */ | |||||
if ((header & 0xffe00000) != 0xffe00000) | |||||
return -1; | |||||
/* layer check */ | |||||
if ((header & (3<<17)) == 0) | |||||
return -1; | |||||
/* bit rate */ | |||||
if ((header & (0xf<<12)) == 0xf<<12) | |||||
return -1; | |||||
/* frequency */ | |||||
if ((header & (3<<10)) == 3<<10) | |||||
return -1; | |||||
return 0; | |||||
} | |||||
#endif /* AVCODEC_MPEGAUDIODECHEADER_H */ | #endif /* AVCODEC_MPEGAUDIODECHEADER_H */ |
@@ -30,7 +30,7 @@ pb_zz11zz55zz99zzdd: db -1,-1,1,1,-1,-1,5,5,-1,-1,9,9,-1,-1,13,13 | |||||
pb_revwords: db 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1 | pb_revwords: db 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1 | ||||
pd_16384: times 4 dd 16384 | pd_16384: times 4 dd 16384 | ||||
section .text align=16 | |||||
SECTION_TEXT | |||||
%macro SCALARPRODUCT 1 | %macro SCALARPRODUCT 1 | ||||
; int scalarproduct_int16(int16_t *v1, int16_t *v2, int order, int shift) | ; int scalarproduct_int16(int16_t *v1, int16_t *v2, int order, int shift) | ||||
@@ -85,7 +85,7 @@ cextern cos_ %+ i | |||||
%1 | %1 | ||||
%endmacro | %endmacro | ||||
section .text align=16 | |||||
SECTION_TEXT | |||||
%macro T2_3DN 4 ; z0, z1, mem0, mem1 | %macro T2_3DN 4 ; z0, z1, mem0, mem1 | ||||
mova %1, %3 | mova %1, %3 | ||||
@@ -22,7 +22,7 @@ | |||||
%include "x86inc.asm" | %include "x86inc.asm" | ||||
%include "x86util.asm" | %include "x86util.asm" | ||||
section .text align=16 | |||||
SECTION_TEXT | |||||
%macro PSWAPD_SSE 2 | %macro PSWAPD_SSE 2 | ||||
pshufw %1, %2, 0x4e | pshufw %1, %2, 0x4e | ||||
@@ -63,11 +63,22 @@ | |||||
%elifidn __OUTPUT_FORMAT__,macho | %elifidn __OUTPUT_FORMAT__,macho | ||||
SECTION .text align=%1 | SECTION .text align=%1 | ||||
fakegot: | fakegot: | ||||
%elifidn __OUTPUT_FORMAT__,aout | |||||
section .text | |||||
%else | %else | ||||
SECTION .rodata align=%1 | SECTION .rodata align=%1 | ||||
%endif | %endif | ||||
%endmacro | %endmacro | ||||
; aout does not support align= | |||||
%macro SECTION_TEXT 0-1 16 | |||||
%ifidn __OUTPUT_FORMAT__,aout | |||||
SECTION .text | |||||
%else | |||||
SECTION .text align=%1 | |||||
%endif | |||||
%endmacro | |||||
%ifdef WIN64 | %ifdef WIN64 | ||||
%define PIC | %define PIC | ||||
%elifndef ARCH_X86_64 | %elifndef ARCH_X86_64 | ||||
@@ -27,6 +27,7 @@ | |||||
#include "libavutil/avstring.h" | #include "libavutil/avstring.h" | ||||
#include "libavutil/intreadwrite.h" | #include "libavutil/intreadwrite.h" | ||||
#include "libavutil/opt.h" | #include "libavutil/opt.h" | ||||
#include "libavcodec/mpegaudio.h" | |||||
#include "libavcodec/mpegaudiodata.h" | #include "libavcodec/mpegaudiodata.h" | ||||
#include "libavcodec/mpegaudiodecheader.h" | #include "libavcodec/mpegaudiodecheader.h" | ||||
#include "libavformat/avio_internal.h" | #include "libavformat/avio_internal.h" | ||||
@@ -53,6 +53,7 @@ typedef struct MpegTSService { | |||||
} MpegTSService; | } MpegTSService; | ||||
typedef struct MpegTSWrite { | typedef struct MpegTSWrite { | ||||
const AVClass *av_class; | |||||
MpegTSSection pat; /* MPEG2 pat table */ | MpegTSSection pat; /* MPEG2 pat table */ | ||||
MpegTSSection sdt; /* MPEG2 sdt table context */ | MpegTSSection sdt; /* MPEG2 sdt table context */ | ||||
MpegTSService **services; | MpegTSService **services; | ||||
@@ -75,7 +75,7 @@ clean(){ | |||||
report(){ | report(){ | ||||
date=$(date -u +%Y%m%d%H%M%S) | date=$(date -u +%Y%m%d%H%M%S) | ||||
echo "fate:0:${date}:${slot}:${version}:$1:$2" >report | |||||
echo "fate:0:${date}:${slot}:${version}:$1:$2:${comment}" >report | |||||
cat ${build}/config.fate ${build}/tests/data/fate/*.rep >>report | cat ${build}/config.fate ${build}/tests/data/fate/*.rep >>report | ||||
test -n "$fate_recv" && $tar report *.log | gzip | $fate_recv | test -n "$fate_recv" && $tar report *.log | gzip | $fate_recv | ||||
} | } | ||||
@@ -91,8 +91,8 @@ lock ${workdir} || die "${workdir} locked" | |||||
cd ${workdir} || die "cd ${workdir} failed" | cd ${workdir} || die "cd ${workdir} failed" | ||||
src=${workdir}/src | src=${workdir}/src | ||||
build=${workdir}/build | |||||
inst=${workdir}/install | |||||
: ${build:=${workdir}/build} | |||||
: ${inst:=${workdir}/install} | |||||
test -d "$src" && update || checkout || die "Error fetching source" | test -d "$src" && update || checkout || die "Error fetching source" | ||||
@@ -53,7 +53,7 @@ echov(){ | |||||
FFMPEG_OPTS="-v 0 -y" | FFMPEG_OPTS="-v 0 -y" | ||||
COMMON_OPTS="-flags +bitexact -idct simple -sws_flags +accurate_rnd+bitexact" | COMMON_OPTS="-flags +bitexact -idct simple -sws_flags +accurate_rnd+bitexact" | ||||
DEC_OPTS="$COMMON_OPTS -threads $threads" | DEC_OPTS="$COMMON_OPTS -threads $threads" | ||||
ENC_OPTS="$COMMON_OPTS -dct fastint" | |||||
ENC_OPTS="$COMMON_OPTS -threads 1 -dct fastint" | |||||
run_ffmpeg() | run_ffmpeg() | ||||
{ | { | ||||