Skip to content

Commit

Permalink
Merge commit 'bfe5454cd238b16e7977085f880205229103eccb'
Browse files Browse the repository at this point in the history
* commit 'bfe5454cd238b16e7977085f880205229103eccb':
  lavf: move ff_codec_get_tag() and ff_codec_get_id() definitions to internal.h
  lavf: move "MP3 " fourcc from riff to nut
  fate: vpx: Add dependencies
  fate: Fix wavpack-matroskamode test dependencies
  x86: dsputilenc: port to cpuflags

Conflicts:
	libavformat/internal.h
	libavformat/nut.c
	tests/fate/vpx.mak

Merged-by: Michael Niedermayer <[email protected]>
  • Loading branch information
michaelni committed Nov 29, 2012
2 parents 7dc0ed8 + bfe5454 commit 076300b
Show file tree
Hide file tree
Showing 23 changed files with 87 additions and 93 deletions.
112 changes: 55 additions & 57 deletions libavcodec/x86/dsputilenc.asm
Original file line number Diff line number Diff line change
Expand Up @@ -99,35 +99,33 @@ SECTION .text
paddusw m0, m1
%endmacro

; FIXME: HSUM_* saturates at 64k, while an 8x8 hadamard or dct block can get up to
; FIXME: HSUM saturates at 64k, while an 8x8 hadamard or dct block can get up to
; about 100k on extreme inputs. But that's very unlikely to occur in natural video,
; and it's even more unlikely to not have any alternative mvs/modes with lower cost.
%macro HSUM_MMX 3
mova %2, %1
psrlq %1, 32
%macro HSUM 3
%if cpuflag(sse2)
movhlps %2, %1
paddusw %1, %2
mova %2, %1
psrlq %1, 16
pshuflw %2, %1, 0xE
paddusw %1, %2
pshuflw %2, %1, 0x1
paddusw %1, %2
movd %3, %1
%endmacro

%macro HSUM_MMXEXT 3
%elif cpuflag(mmxext)
pshufw %2, %1, 0xE
paddusw %1, %2
pshufw %2, %1, 0x1
paddusw %1, %2
movd %3, %1
%endmacro

%macro HSUM_SSE2 3
movhlps %2, %1
paddusw %1, %2
pshuflw %2, %1, 0xE
%elif cpuflag(mmx)
mova %2, %1
psrlq %1, 32
paddusw %1, %2
pshuflw %2, %1, 0x1
mova %2, %1
psrlq %1, 16
paddusw %1, %2
movd %3, %1
%endif
%endmacro

%macro STORE4 5
Expand All @@ -144,43 +142,43 @@ SECTION .text
mova %5, [%1+mmsize*3]
%endmacro

%macro hadamard8_16_wrapper 3
cglobal hadamard8_diff_%1, 4, 4, %2
%macro hadamard8_16_wrapper 2
cglobal hadamard8_diff, 4, 4, %1
%ifndef m8
%assign pad %3*mmsize-(4+stack_offset&(mmsize-1))
%assign pad %2*mmsize-(4+stack_offset&(mmsize-1))
SUB rsp, pad
%endif
call hadamard8x8_diff_%1
call hadamard8x8_diff %+ SUFFIX
%ifndef m8
ADD rsp, pad
%endif
RET

cglobal hadamard8_diff16_%1, 5, 6, %2
cglobal hadamard8_diff16, 5, 6, %1
%ifndef m8
%assign pad %3*mmsize-(4+stack_offset&(mmsize-1))
%assign pad %2*mmsize-(4+stack_offset&(mmsize-1))
SUB rsp, pad
%endif

call hadamard8x8_diff_%1
call hadamard8x8_diff %+ SUFFIX
mov r5d, eax

add r1, 8
add r2, 8
call hadamard8x8_diff_%1
call hadamard8x8_diff %+ SUFFIX
add r5d, eax

cmp r4d, 16
jne .done

lea r1, [r1+r3*8-8]
lea r2, [r2+r3*8-8]
call hadamard8x8_diff_%1
call hadamard8x8_diff %+ SUFFIX
add r5d, eax

add r1, 8
add r2, 8
call hadamard8x8_diff_%1
call hadamard8x8_diff %+ SUFFIX
add r5d, eax

.done:
Expand All @@ -191,15 +189,33 @@ cglobal hadamard8_diff16_%1, 5, 6, %2
RET
%endmacro

%macro HADAMARD8_DIFF_MMX 1
%macro HADAMARD8_DIFF 0-1
%if cpuflag(sse2)
hadamard8x8_diff %+ SUFFIX:
lea r0, [r3*3]
DIFF_PIXELS_8 r1, r2, 0, r3, r0, rsp+gprsize
HADAMARD8
%if ARCH_X86_64
TRANSPOSE8x8W 0, 1, 2, 3, 4, 5, 6, 7, 8
%else
TRANSPOSE8x8W 0, 1, 2, 3, 4, 5, 6, 7, [rsp+gprsize], [rsp+mmsize+gprsize]
%endif
HADAMARD8
ABS_SUM_8x8 rsp+gprsize
HSUM m0, m1, eax
and eax, 0xFFFF
ret

hadamard8_16_wrapper %1, 3
%elif cpuflag(mmx)
ALIGN 16
; int hadamard8_diff_##cpu(void *s, uint8_t *src1, uint8_t *src2,
; int stride, int h)
; r0 = void *s = unused, int h = unused (always 8)
; note how r1, r2 and r3 are not clobbered in this function, so 16x16
; can simply call this 2x2x (and that's why we access rsp+gprsize
; everywhere, which is rsp of calling func
hadamard8x8_diff_%1:
hadamard8x8_diff %+ SUFFIX:
lea r0, [r3*3]

; first 4x8 pixels
Expand Down Expand Up @@ -236,53 +252,35 @@ hadamard8x8_diff_%1:
and rax, 0xFFFF
ret

hadamard8_16_wrapper %1, 0, 14
%endmacro

%macro HADAMARD8_DIFF_SSE2 2
hadamard8x8_diff_%1:
lea r0, [r3*3]
DIFF_PIXELS_8 r1, r2, 0, r3, r0, rsp+gprsize
HADAMARD8
%if ARCH_X86_64
TRANSPOSE8x8W 0, 1, 2, 3, 4, 5, 6, 7, 8
%else
TRANSPOSE8x8W 0, 1, 2, 3, 4, 5, 6, 7, [rsp+gprsize], [rsp+mmsize+gprsize]
hadamard8_16_wrapper 0, 14
%endif
HADAMARD8
ABS_SUM_8x8 rsp+gprsize
HSUM_SSE2 m0, m1, eax
and eax, 0xFFFF
ret

hadamard8_16_wrapper %1, %2, 3
%endmacro

INIT_MMX
INIT_MMX mmx
%define ABS1 ABS1_MMX
%define HSUM HSUM_MMX
HADAMARD8_DIFF_MMX mmx
HADAMARD8_DIFF

INIT_MMX mmxext
%define ABS1 ABS1_MMXEXT
%define HSUM HSUM_MMXEXT
HADAMARD8_DIFF_MMX mmxext
HADAMARD8_DIFF

INIT_XMM
INIT_XMM sse2
%define ABS2 ABS2_MMXEXT
%if ARCH_X86_64
%define ABS_SUM_8x8 ABS_SUM_8x8_64
%else
%define ABS_SUM_8x8 ABS_SUM_8x8_32
%endif
HADAMARD8_DIFF_SSE2 sse2, 10
HADAMARD8_DIFF 10

INIT_XMM ssse3
%define ABS2 ABS2_SSSE3
%define ABS_SUM_8x8 ABS_SUM_8x8_64
HADAMARD8_DIFF_SSE2 ssse3, 9
HADAMARD8_DIFF 9

INIT_XMM
INIT_XMM sse2
; sse16_sse2(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h)
cglobal sse16_sse2, 5, 5, 8
cglobal sse16, 5, 5, 8
shr r4d, 1
pxor m0, m0 ; mm0 = 0
pxor m7, m7 ; mm7 holds the sum
Expand Down
2 changes: 1 addition & 1 deletion libavformat/aiff.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
#define AVFORMAT_AIFF_H

#include "avformat.h"
#include "riff.h"
#include "internal.h"

static const AVCodecTag ff_codec_aiff_tags[] = {
{ AV_CODEC_ID_PCM_S16BE, MKTAG('N','O','N','E') },
Expand Down
1 change: 0 additions & 1 deletion libavformat/au.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
#include "internal.h"
#include "avio_internal.h"
#include "pcm.h"
#include "riff.h"

/* if we don't know the size in advance */
#define AU_UNKNOWN_SIZE ((uint32_t)(~0))
Expand Down
1 change: 0 additions & 1 deletion libavformat/cafdec.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@

#include "avformat.h"
#include "internal.h"
#include "riff.h"
#include "isom.h"
#include "mov_chan.h"
#include "libavutil/intreadwrite.h"
Expand Down
1 change: 0 additions & 1 deletion libavformat/gxfenc.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
#include "avformat.h"
#include "internal.h"
#include "gxf.h"
#include "riff.h"
#include "audiointerleave.h"

#define GXF_AUDIO_PACKET_SIZE 65536
Expand Down
4 changes: 4 additions & 0 deletions libavformat/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,10 @@ void ff_compute_frame_duration(int *pnum, int *pden, AVStream *st,

int ff_get_audio_frame_size(AVCodecContext *enc, int size, int mux);

unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id);

enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag);

/**
* Chooses a timebase for muxing the specified stream.
*
Expand Down
1 change: 0 additions & 1 deletion libavformat/isom.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
#include "avformat.h"
#include "internal.h"
#include "isom.h"
#include "riff.h"
#include "libavcodec/mpeg4audio.h"
#include "libavcodec/mpegaudiodata.h"

Expand Down
1 change: 0 additions & 1 deletion libavformat/lxfdec.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
#include "libavcodec/bytestream.h"
#include "avformat.h"
#include "internal.h"
#include "riff.h"

#define LXF_MAX_PACKET_HEADER_SIZE 256
#define LXF_HEADER_DATA_SIZE 120
Expand Down
1 change: 0 additions & 1 deletion libavformat/nsvdec.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
#include "libavutil/mathematics.h"
#include "avformat.h"
#include "internal.h"
#include "riff.h"
#include "libavutil/dict.h"
#include "libavutil/intreadwrite.h"

Expand Down
1 change: 1 addition & 0 deletions libavformat/nut.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ const AVCodecTag ff_nut_video_tags[] = {
static const AVCodecTag nut_audio_extra_tags[] = {
{ AV_CODEC_ID_PCM_ALAW, MKTAG('A', 'L', 'A', 'W') },
{ AV_CODEC_ID_PCM_MULAW, MKTAG('U', 'L', 'A', 'W') },
{ AV_CODEC_ID_MP3, MKTAG('M', 'P', '3', ' ') },
{ AV_CODEC_ID_NONE, 0 }
};

Expand Down
2 changes: 1 addition & 1 deletion libavformat/nut.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
//#include "libavutil/adler32.h"
//#include "libavcodec/mpegaudio.h"
#include "avformat.h"
#include "riff.h"
#include "internal.h"
#include "metadata.h"

#define MAIN_STARTCODE (0x7A561F5F04ADULL + (((uint64_t)('N'<<8) + 'M')<<48))
Expand Down
1 change: 1 addition & 0 deletions libavformat/nutdec.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include "libavutil/tree.h"
#include "avio_internal.h"
#include "nut.h"
#include "riff.h"

#define NUT_MAX_STREAMS 256 /* arbitrary sanity check value */

Expand Down
1 change: 1 addition & 0 deletions libavformat/nutenc.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include "nut.h"
#include "internal.h"
#include "avio_internal.h"
#include "riff.h"

static int find_expected_header(AVCodecContext *c, int size, int key_frame,
uint8_t out[64])
Expand Down
1 change: 0 additions & 1 deletion libavformat/omadec.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@
#include "libavutil/des.h"
#include "oma.h"
#include "pcm.h"
#include "riff.h"
#include "id3v2.h"


Expand Down
1 change: 0 additions & 1 deletion libavformat/riff.c
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,6 @@ const AVCodecTag ff_codec_wav_tags[] = {
// for NuppelVideo (nuv.c)
{ AV_CODEC_ID_PCM_S16LE, MKTAG('R', 'A', 'W', 'A') },
{ AV_CODEC_ID_MP3, MKTAG('L', 'A', 'M', 'E') },
{ AV_CODEC_ID_MP3, MKTAG('M', 'P', '3', ' ') },
{ AV_CODEC_ID_NONE, 0 },
};

Expand Down
2 changes: 0 additions & 2 deletions libavformat/riff.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,6 @@ int ff_get_wav_header(AVIOContext *pb, AVCodecContext *codec, int size);
extern const AVCodecTag ff_codec_bmp_tags[];
extern const AVCodecTag ff_codec_wav_tags[];

unsigned int ff_codec_get_tag(const AVCodecTag *tags, enum AVCodecID id);
enum AVCodecID ff_codec_get_id(const AVCodecTag *tags, unsigned int tag);
void ff_parse_specific_params(AVCodecContext *stream, int *au_rate, int *au_ssize, int *au_scale);

typedef uint8_t ff_asf_guid[16];
Expand Down
1 change: 0 additions & 1 deletion libavformat/rmdec.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
#include "libavutil/dict.h"
#include "avformat.h"
#include "internal.h"
#include "riff.h"
#include "rmsipr.h"
#include "rm.h"

Expand Down
1 change: 0 additions & 1 deletion libavformat/rsodec.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
#include "avformat.h"
#include "internal.h"
#include "pcm.h"
#include "riff.h"
#include "rso.h"

static int rso_read_header(AVFormatContext *s)
Expand Down
1 change: 0 additions & 1 deletion libavformat/smjpegenc.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@

#include "avformat.h"
#include "internal.h"
#include "riff.h"
#include "smjpeg.h"

typedef struct SMJPEGMuxContext {
Expand Down
2 changes: 1 addition & 1 deletion libavformat/swf.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
#include "libavutil/fifo.h"
#include "avformat.h"
#include "avio.h"
#include "riff.h" /* for CodecTag */
#include "internal.h"

/* should have a generic way to indicate probable size */
#define DUMMY_FILE_SIZE (100 * 1024 * 1024)
Expand Down
2 changes: 1 addition & 1 deletion libavformat/voc.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
#define AVFORMAT_VOC_H

#include "avformat.h"
#include "riff.h" /* for CodecTag */
#include "internal.h"

typedef struct voc_dec_context {
int64_t remaining_size;
Expand Down
Loading

0 comments on commit 076300b

Please sign in to comment.