diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2011-12-02 00:51:11 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-12-02 00:51:11 +0100 |
commit | 7b0b10ce4186eaa1cd3c0a2bfbb86307d65eecfd (patch) | |
tree | a9a937af698ca14ef06ec2c07453f474aa5ca3c7 /libavcodec | |
parent | 8b08f81949bcfa6fec42ff3f1c9bef5be8140300 (diff) | |
parent | 04403ec2e405a3cfcfbdd45f1274be30c652e462 (diff) | |
download | ffmpeg-7b0b10ce4186eaa1cd3c0a2bfbb86307d65eecfd.tar.gz |
Merge remote-tracking branch 'qatar/master'
* qatar/master: (25 commits)
rtpenc: Add support for G726 audio
rtpdec: Interpret the different G726 names as bits_per_coded_sample
rtpenc: Change rtp_send_samples to handle sample sizes other than even bytes
rtpenc: Cast a rescaling parameter to int64_t
h264: cap max has_b_frames at MAX_DELAYED_PIC_COUNT - 1.
ARM: fix indentation in ff_dsputil_init_neon()
ARM: NEON put/avg_pixels8/16 cosmetics
ARM: add remaining NEON avg_pixels8/16 functions
ARM: clean up NEON put/avg_pixels macros
fate: split acodec-pcm into individual tests
swscale: #include "libavutil/mathematics.h"
pmpdec: don't use deprecated av_set_pts_info.
rv34: align temporary block of "dct" coefs
Add PlayStation Portable PMP format demuxer
proto: Realign struct initializers
proto: Use .priv_data_size to allocate the private context
mmsh: Properly clean up if the second ffurl_alloc failed
rtmp: Clean up properly if the handshake failed
md5proto: Remove the get_file_handle function
applehttpproto: Use the close function if the open function fails
...
Conflicts:
libavcodec/vble.c
libavformat/mmsh.c
libavformat/pmpdec.c
libavformat/udp.c
tests/ref/acodec/pcm
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/arm/dsputil_init_neon.c | 77 | ||||
-rw-r--r-- | libavcodec/arm/dsputil_neon.S | 317 | ||||
-rw-r--r-- | libavcodec/h264.c | 2 | ||||
-rw-r--r-- | libavcodec/rv34.c | 4 |
4 files changed, 245 insertions, 155 deletions
diff --git a/libavcodec/arm/dsputil_init_neon.c b/libavcodec/arm/dsputil_init_neon.c index ddc9d640f8..3f4dcdad5c 100644 --- a/libavcodec/arm/dsputil_init_neon.c +++ b/libavcodec/arm/dsputil_init_neon.c @@ -53,7 +53,19 @@ void ff_put_pixels8_y2_no_rnd_neon(uint8_t *, const uint8_t *, int, int); void ff_put_pixels8_xy2_no_rnd_neon(uint8_t *, const uint8_t *, int, int); void ff_avg_pixels16_neon(uint8_t *, const uint8_t *, int, int); +void ff_avg_pixels16_x2_neon(uint8_t *, const uint8_t *, int, int); +void ff_avg_pixels16_y2_neon(uint8_t *, const uint8_t *, int, int); +void ff_avg_pixels16_xy2_neon(uint8_t *, const uint8_t *, int, int); void ff_avg_pixels8_neon(uint8_t *, const uint8_t *, int, int); +void ff_avg_pixels8_x2_neon(uint8_t *, const uint8_t *, int, int); +void ff_avg_pixels8_y2_neon(uint8_t *, const uint8_t *, int, int); +void ff_avg_pixels8_xy2_neon(uint8_t *, const uint8_t *, int, int); +void ff_avg_pixels16_x2_no_rnd_neon(uint8_t *, const uint8_t *, int, int); +void ff_avg_pixels16_y2_no_rnd_neon(uint8_t *, const uint8_t *, int, int); +void ff_avg_pixels16_xy2_no_rnd_neon(uint8_t *, const uint8_t *, int, int); +void ff_avg_pixels8_x2_no_rnd_neon(uint8_t *, const uint8_t *, int, int); +void ff_avg_pixels8_y2_no_rnd_neon(uint8_t *, const uint8_t *, int, int); +void ff_avg_pixels8_xy2_no_rnd_neon(uint8_t *, const uint8_t *, int, int); void ff_add_pixels_clamped_neon(const DCTELEM *, uint8_t *, int); void ff_put_pixels_clamped_neon(const DCTELEM *, uint8_t *, int); @@ -189,37 +201,51 @@ void ff_dsputil_init_neon(DSPContext *c, AVCodecContext *avctx) } if (!high_bit_depth) { - c->clear_block = ff_clear_block_neon; - c->clear_blocks = ff_clear_blocks_neon; - - c->put_pixels_tab[0][0] = ff_put_pixels16_neon; - c->put_pixels_tab[0][1] = ff_put_pixels16_x2_neon; - c->put_pixels_tab[0][2] = ff_put_pixels16_y2_neon; - c->put_pixels_tab[0][3] = ff_put_pixels16_xy2_neon; - c->put_pixels_tab[1][0] = ff_put_pixels8_neon; - c->put_pixels_tab[1][1] = ff_put_pixels8_x2_neon; - c->put_pixels_tab[1][2] = ff_put_pixels8_y2_neon; - c->put_pixels_tab[1][3] = ff_put_pixels8_xy2_neon; - - c->put_no_rnd_pixels_tab[0][0] = ff_put_pixels16_neon; - c->put_no_rnd_pixels_tab[0][1] = ff_put_pixels16_x2_no_rnd_neon; - c->put_no_rnd_pixels_tab[0][2] = ff_put_pixels16_y2_no_rnd_neon; - c->put_no_rnd_pixels_tab[0][3] = ff_put_pixels16_xy2_no_rnd_neon; - c->put_no_rnd_pixels_tab[1][0] = ff_put_pixels8_neon; - c->put_no_rnd_pixels_tab[1][1] = ff_put_pixels8_x2_no_rnd_neon; - c->put_no_rnd_pixels_tab[1][2] = ff_put_pixels8_y2_no_rnd_neon; - c->put_no_rnd_pixels_tab[1][3] = ff_put_pixels8_xy2_no_rnd_neon; - - c->avg_pixels_tab[0][0] = ff_avg_pixels16_neon; - c->avg_pixels_tab[1][0] = ff_avg_pixels8_neon; + c->clear_block = ff_clear_block_neon; + c->clear_blocks = ff_clear_blocks_neon; + + c->put_pixels_tab[0][0] = ff_put_pixels16_neon; + c->put_pixels_tab[0][1] = ff_put_pixels16_x2_neon; + c->put_pixels_tab[0][2] = ff_put_pixels16_y2_neon; + c->put_pixels_tab[0][3] = ff_put_pixels16_xy2_neon; + c->put_pixels_tab[1][0] = ff_put_pixels8_neon; + c->put_pixels_tab[1][1] = ff_put_pixels8_x2_neon; + c->put_pixels_tab[1][2] = ff_put_pixels8_y2_neon; + c->put_pixels_tab[1][3] = ff_put_pixels8_xy2_neon; + + c->put_no_rnd_pixels_tab[0][0] = ff_put_pixels16_neon; + c->put_no_rnd_pixels_tab[0][1] = ff_put_pixels16_x2_no_rnd_neon; + c->put_no_rnd_pixels_tab[0][2] = ff_put_pixels16_y2_no_rnd_neon; + c->put_no_rnd_pixels_tab[0][3] = ff_put_pixels16_xy2_no_rnd_neon; + c->put_no_rnd_pixels_tab[1][0] = ff_put_pixels8_neon; + c->put_no_rnd_pixels_tab[1][1] = ff_put_pixels8_x2_no_rnd_neon; + c->put_no_rnd_pixels_tab[1][2] = ff_put_pixels8_y2_no_rnd_neon; + c->put_no_rnd_pixels_tab[1][3] = ff_put_pixels8_xy2_no_rnd_neon; + + c->avg_pixels_tab[0][0] = ff_avg_pixels16_neon; + c->avg_pixels_tab[0][1] = ff_avg_pixels16_x2_neon; + c->avg_pixels_tab[0][2] = ff_avg_pixels16_y2_neon; + c->avg_pixels_tab[0][3] = ff_avg_pixels16_xy2_neon; + c->avg_pixels_tab[1][0] = ff_avg_pixels8_neon; + c->avg_pixels_tab[1][1] = ff_avg_pixels8_x2_neon; + c->avg_pixels_tab[1][2] = ff_avg_pixels8_y2_neon; + c->avg_pixels_tab[1][3] = ff_avg_pixels8_xy2_neon; + + c->avg_no_rnd_pixels_tab[0][0] = ff_avg_pixels16_neon; + c->avg_no_rnd_pixels_tab[0][1] = ff_avg_pixels16_x2_no_rnd_neon; + c->avg_no_rnd_pixels_tab[0][2] = ff_avg_pixels16_y2_no_rnd_neon; + c->avg_no_rnd_pixels_tab[0][3] = ff_avg_pixels16_xy2_no_rnd_neon; + c->avg_no_rnd_pixels_tab[1][0] = ff_avg_pixels8_neon; + c->avg_no_rnd_pixels_tab[1][1] = ff_avg_pixels8_x2_no_rnd_neon; + c->avg_no_rnd_pixels_tab[1][2] = ff_avg_pixels8_y2_no_rnd_neon; + c->avg_no_rnd_pixels_tab[1][3] = ff_avg_pixels8_xy2_no_rnd_neon; } c->add_pixels_clamped = ff_add_pixels_clamped_neon; c->put_pixels_clamped = ff_put_pixels_clamped_neon; c->put_signed_pixels_clamped = ff_put_signed_pixels_clamped_neon; - if (CONFIG_H264_DECODER) { - if (!high_bit_depth) { + if (CONFIG_H264_DECODER && !high_bit_depth) { c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_neon; c->put_h264_chroma_pixels_tab[1] = ff_put_h264_chroma_mc4_neon; c->put_h264_chroma_pixels_tab[2] = ff_put_h264_chroma_mc2_neon; @@ -295,7 +321,6 @@ void ff_dsputil_init_neon(DSPContext *c, AVCodecContext *avctx) c->avg_h264_qpel_pixels_tab[1][13] = ff_avg_h264_qpel8_mc13_neon; c->avg_h264_qpel_pixels_tab[1][14] = ff_avg_h264_qpel8_mc23_neon; c->avg_h264_qpel_pixels_tab[1][15] = ff_avg_h264_qpel8_mc33_neon; - } } if (CONFIG_VP3_DECODER) { diff --git a/libavcodec/arm/dsputil_neon.S b/libavcodec/arm/dsputil_neon.S index b765f23d02..c660cb0d4c 100644 --- a/libavcodec/arm/dsputil_neon.S +++ b/libavcodec/arm/dsputil_neon.S @@ -40,75 +40,89 @@ function ff_clear_blocks_neon, export=1 bx lr endfunc - .macro pixels16 avg=0 -.if \avg - mov ip, r0 -.endif -1: vld1.64 {d0, d1}, [r1], r2 - vld1.64 {d2, d3}, [r1], r2 - vld1.64 {d4, d5}, [r1], r2 +.macro pixels16 rnd=1, avg=0 + .if \avg + mov r12, r0 + .endif +1: vld1.64 {q0}, [r1], r2 + vld1.64 {q1}, [r1], r2 + vld1.64 {q2}, [r1], r2 pld [r1, r2, lsl #2] - vld1.64 {d6, d7}, [r1], r2 + vld1.64 {q3}, [r1], r2 pld [r1] pld [r1, r2] pld [r1, r2, lsl #1] -.if \avg - vld1.64 {d16,d17}, [ip,:128], r2 + .if \avg + vld1.64 {q8}, [r12,:128], r2 vrhadd.u8 q0, q0, q8 - vld1.64 {d18,d19}, [ip,:128], r2 + vld1.64 {q9}, [r12,:128], r2 vrhadd.u8 q1, q1, q9 - vld1.64 {d20,d21}, [ip,:128], r2 + vld1.64 {q10}, [r12,:128], r2 vrhadd.u8 q2, q2, q10 - vld1.64 {d22,d23}, [ip,:128], r2 + vld1.64 {q11}, [r12,:128], r2 vrhadd.u8 q3, q3, q11 -.endif + .endif subs r3, r3, #4 - vst1.64 {d0, d1}, [r0,:128], r2 - vst1.64 {d2, d3}, [r0,:128], r2 - vst1.64 {d4, d5}, [r0,:128], r2 - vst1.64 {d6, d7}, [r0,:128], r2 + vst1.64 {q0}, [r0,:128], r2 + vst1.64 {q1}, [r0,:128], r2 + vst1.64 {q2}, [r0,:128], r2 + vst1.64 {q3}, [r0,:128], r2 bne 1b bx lr - .endm +.endm - .macro pixels16_x2 vhadd=vrhadd.u8 -1: vld1.64 {d0-d2}, [r1], r2 - vld1.64 {d4-d6}, [r1], r2 +.macro pixels16_x2 rnd=1, avg=0 +1: vld1.64 {d0-d2}, [r1], r2 + vld1.64 {d4-d6}, [r1], r2 pld [r1] pld [r1, r2] subs r3, r3, #2 vext.8 q1, q0, q1, #1 - \vhadd q0, q0, q1 + avg q0, q0, q1 vext.8 q3, q2, q3, #1 - \vhadd q2, q2, q3 - vst1.64 {d0, d1}, [r0,:128], r2 - vst1.64 {d4, d5}, [r0,:128], r2 + avg q2, q2, q3 + .if \avg + vld1.8 {q1}, [r0,:128], r2 + vld1.8 {q3}, [r0,:128] + vrhadd.u8 q0, q0, q1 + vrhadd.u8 q2, q2, q3 + sub r0, r0, r2 + .endif + vst1.64 {q0}, [r0,:128], r2 + vst1.64 {q2}, [r0,:128], r2 bne 1b bx lr - .endm +.endm - .macro pixels16_y2 vhadd=vrhadd.u8 - vld1.64 {d0, d1}, [r1], r2 - vld1.64 {d2, d3}, [r1], r2 +.macro pixels16_y2 rnd=1, avg=0 + vld1.64 {q0}, [r1], r2 + vld1.64 {q1}, [r1], r2 1: subs r3, r3, #2 - \vhadd q2, q0, q1 - vld1.64 {d0, d1}, [r1], r2 - \vhadd q3, q0, q1 - vld1.64 {d2, d3}, [r1], r2 + avg q2, q0, q1 + vld1.64 {q0}, [r1], r2 + avg q3, q0, q1 + vld1.64 {q1}, [r1], r2 pld [r1] pld [r1, r2] - vst1.64 {d4, d5}, [r0,:128], r2 - vst1.64 {d6, d7}, [r0,:128], r2 + .if \avg + vld1.8 {q8}, [r0,:128], r2 + vld1.8 {q9}, [r0,:128] + vrhadd.u8 q2, q2, q8 + vrhadd.u8 q3, q3, q9 + sub r0, r0, r2 + .endif + vst1.64 {q2}, [r0,:128], r2 + vst1.64 {q3}, [r0,:128], r2 bne 1b bx lr - .endm +.endm - .macro pixels16_xy2 vshrn=vrshrn.u16 no_rnd=0 - vld1.64 {d0-d2}, [r1], r2 - vld1.64 {d4-d6}, [r1], r2 -.if \no_rnd +.macro pixels16_xy2 rnd=1, avg=0 + vld1.64 {d0-d2}, [r1], r2 + vld1.64 {d4-d6}, [r1], r2 + .ifeq \rnd vmov.i16 q13, #1 -.endif + .endif pld [r1] pld [r1, r2] vext.8 q1, q0, q1, #1 @@ -118,109 +132,129 @@ endfunc vaddl.u8 q9, d4, d6 vaddl.u8 q11, d5, d7 1: subs r3, r3, #2 - vld1.64 {d0-d2}, [r1], r2 + vld1.64 {d0-d2}, [r1], r2 vadd.u16 q12, q8, q9 pld [r1] -.if \no_rnd + .ifeq \rnd vadd.u16 q12, q12, q13 -.endif + .endif vext.8 q15, q0, q1, #1 vadd.u16 q1 , q10, q11 - \vshrn d28, q12, #2 -.if \no_rnd + shrn d28, q12, #2 + .ifeq \rnd vadd.u16 q1, q1, q13 -.endif - \vshrn d29, q1, #2 + .endif + shrn d29, q1, #2 + .if \avg + vld1.8 {q8}, [r0,:128] + vrhadd.u8 q14, q14, q8 + .endif vaddl.u8 q8, d0, d30 - vld1.64 {d2-d4}, [r1], r2 + vld1.64 {d2-d4}, [r1], r2 vaddl.u8 q10, d1, d31 - vst1.64 {d28,d29}, [r0,:128], r2 + vst1.64 {q14}, [r0,:128], r2 vadd.u16 q12, q8, q9 pld [r1, r2] -.if \no_rnd + .ifeq \rnd vadd.u16 q12, q12, q13 -.endif + .endif vext.8 q2, q1, q2, #1 vadd.u16 q0, q10, q11 - \vshrn d30, q12, #2 -.if \no_rnd + shrn d30, q12, #2 + .ifeq \rnd vadd.u16 q0, q0, q13 -.endif - \vshrn d31, q0, #2 + .endif + shrn d31, q0, #2 + .if \avg + vld1.8 {q9}, [r0,:128] + vrhadd.u8 q15, q15, q9 + .endif vaddl.u8 q9, d2, d4 vaddl.u8 q11, d3, d5 - vst1.64 {d30,d31}, [r0,:128], r2 + vst1.64 {q15}, [r0,:128], r2 bgt 1b bx lr - .endm +.endm - .macro pixels8 avg=0 -1: vld1.64 {d0}, [r1], r2 - vld1.64 {d1}, [r1], r2 - vld1.64 {d2}, [r1], r2 +.macro pixels8 rnd=1, avg=0 +1: vld1.64 {d0}, [r1], r2 + vld1.64 {d1}, [r1], r2 + vld1.64 {d2}, [r1], r2 pld [r1, r2, lsl #2] - vld1.64 {d3}, [r1], r2 + vld1.64 {d3}, [r1], r2 pld [r1] pld [r1, r2] pld [r1, r2, lsl #1] -.if \avg - vld1.64 {d4}, [r0,:64], r2 + .if \avg + vld1.64 {d4}, [r0,:64], r2 vrhadd.u8 d0, d0, d4 - vld1.64 {d5}, [r0,:64], r2 + vld1.64 {d5}, [r0,:64], r2 vrhadd.u8 d1, d1, d5 - vld1.64 {d6}, [r0,:64], r2 + vld1.64 {d6}, [r0,:64], r2 vrhadd.u8 d2, d2, d6 - vld1.64 {d7}, [r0,:64], r2 + vld1.64 {d7}, [r0,:64], r2 vrhadd.u8 d3, d3, d7 sub r0, r0, r2, lsl #2 -.endif + .endif subs r3, r3, #4 - vst1.64 {d0}, [r0,:64], r2 - vst1.64 {d1}, [r0,:64], r2 - vst1.64 {d2}, [r0,:64], r2 - vst1.64 {d3}, [r0,:64], r2 + vst1.64 {d0}, [r0,:64], r2 + vst1.64 {d1}, [r0,:64], r2 + vst1.64 {d2}, [r0,:64], r2 + vst1.64 {d3}, [r0,:64], r2 bne 1b bx lr - .endm +.endm - .macro pixels8_x2 vhadd=vrhadd.u8 -1: vld1.64 {d0, d1}, [r1], r2 +.macro pixels8_x2 rnd=1, avg=0 +1: vld1.64 {q0}, [r1], r2 vext.8 d1, d0, d1, #1 - vld1.64 {d2, d3}, [r1], r2 + vld1.64 {q1}, [r1], r2 vext.8 d3, d2, d3, #1 pld [r1] pld [r1, r2] subs r3, r3, #2 vswp d1, d2 - \vhadd q0, q0, q1 - vst1.64 {d0}, [r0,:64], r2 - vst1.64 {d1}, [r0,:64], r2 + avg q0, q0, q1 + .if \avg + vld1.8 {d4}, [r0,:64], r2 + vld1.8 {d5}, [r0,:64] + vrhadd.u8 q0, q0, q2 + sub r0, r0, r2 + .endif + vst1.64 {d0}, [r0,:64], r2 + vst1.64 {d1}, [r0,:64], r2 bne 1b bx lr - .endm +.endm - .macro pixels8_y2 vhadd=vrhadd.u8 - vld1.64 {d0}, [r1], r2 - vld1.64 {d1}, [r1], r2 +.macro pixels8_y2 rnd=1, avg=0 + vld1.64 {d0}, [r1], r2 + vld1.64 {d1}, [r1], r2 1: subs r3, r3, #2 - \vhadd d4, d0, d1 - vld1.64 {d0}, [r1], r2 - \vhadd d5, d0, d1 - vld1.64 {d1}, [r1], r2 + avg d4, d0, d1 + vld1.64 {d0}, [r1], r2 + avg d5, d0, d1 + vld1.64 {d1}, [r1], r2 pld [r1] pld [r1, r2] - vst1.64 {d4}, [r0,:64], r2 - vst1.64 {d5}, [r0,:64], r2 + .if \avg + vld1.8 {d2}, [r0,:64], r2 + vld1.8 {d3}, [r0,:64] + vrhadd.u8 q2, q2, q1 + sub r0, r0, r2 + .endif + vst1.64 {d4}, [r0,:64], r2 + vst1.64 {d5}, [r0,:64], r2 bne 1b bx lr - .endm +.endm - .macro pixels8_xy2 vshrn=vrshrn.u16 no_rnd=0 - vld1.64 {d0, d1}, [r1], r2 - vld1.64 {d2, d3}, [r1], r2 -.if \no_rnd +.macro pixels8_xy2 rnd=1, avg=0 + vld1.64 {q0}, [r1], r2 + vld1.64 {q1}, [r1], r2 + .ifeq \rnd vmov.i16 q11, #1 -.endif + .endif pld [r1] pld [r1, r2] vext.8 d4, d0, d1, #1 @@ -228,70 +262,101 @@ endfunc vaddl.u8 q8, d0, d4 vaddl.u8 q9, d2, d6 1: subs r3, r3, #2 - vld1.64 {d0, d1}, [r1], r2 + vld1.64 {q0}, [r1], r2 pld [r1] vadd.u16 q10, q8, q9 vext.8 d4, d0, d1, #1 -.if \no_rnd + .ifeq \rnd vadd.u16 q10, q10, q11 -.endif + .endif vaddl.u8 q8, d0, d4 - \vshrn d5, q10, #2 - vld1.64 {d2, d3}, [r1], r2 + shrn d5, q10, #2 + vld1.64 {q1}, [r1], r2 vadd.u16 q10, q8, q9 pld [r1, r2] -.if \no_rnd + .if \avg + vld1.8 {d7}, [r0,:64] + vrhadd.u8 d5, d5, d7 + .endif + .ifeq \rnd vadd.u16 q10, q10, q11 -.endif - vst1.64 {d5}, [r0,:64], r2 - \vshrn d7, q10, #2 + .endif + vst1.64 {d5}, [r0,:64], r2 + shrn d7, q10, #2 + .if \avg + vld1.8 {d5}, [r0,:64] + vrhadd.u8 d7, d7, d5 + .endif vext.8 d6, d2, d3, #1 vaddl.u8 q9, d2, d6 - vst1.64 {d7}, [r0,:64], r2 + vst1.64 {d7}, [r0,:64], r2 bgt 1b bx lr - .endm - - .macro pixfunc pfx name suf rnd_op args:vararg +.endm + +.macro pixfunc pfx, name, suf, rnd=1, avg=0 + .if \rnd + .macro avg rd, rn, rm + vrhadd.u8 \rd, \rn, \rm + .endm + .macro shrn rd, rn, rm + vrshrn.u16 \rd, \rn, \rm + .endm + .else + .macro avg rd, rn, rm + vhadd.u8 \rd, \rn, \rm + .endm + .macro shrn rd, rn, rm + vshrn.u16 \rd, \rn, \rm + .endm + .endif function ff_\pfx\name\suf\()_neon, export=1 - \name \rnd_op \args + \name \rnd, \avg endfunc - .endm + .purgem avg + .purgem shrn +.endm - .macro pixfunc2 pfx name args:vararg - pixfunc \pfx \name - pixfunc \pfx \name \args - .endm +.macro pixfunc2 pfx, name, avg=0 + pixfunc \pfx, \name, rnd=1, avg=\avg + pixfunc \pfx, \name, _no_rnd, rnd=0, avg=\avg +.endm function ff_put_h264_qpel16_mc00_neon, export=1 mov r3, #16 endfunc - pixfunc put_ pixels16 - pixfunc2 put_ pixels16_x2, _no_rnd, vhadd.u8 - pixfunc2 put_ pixels16_y2, _no_rnd, vhadd.u8 - pixfunc2 put_ pixels16_xy2, _no_rnd, vshrn.u16, 1 + pixfunc put_, pixels16, avg=0 + pixfunc2 put_, pixels16_x2, avg=0 + pixfunc2 put_, pixels16_y2, avg=0 + pixfunc2 put_, pixels16_xy2, avg=0 function ff_avg_h264_qpel16_mc00_neon, export=1 mov r3, #16 endfunc - pixfunc avg_ pixels16,, 1 + pixfunc avg_, pixels16, avg=1 + pixfunc2 avg_, pixels16_x2, avg=1 + pixfunc2 avg_, pixels16_y2, avg=1 + pixfunc2 avg_, pixels16_xy2, avg=1 function ff_put_h264_qpel8_mc00_neon, export=1 mov r3, #8 endfunc - pixfunc put_ pixels8 - pixfunc2 put_ pixels8_x2, _no_rnd, vhadd.u8 - pixfunc2 put_ pixels8_y2, _no_rnd, vhadd.u8 - pixfunc2 put_ pixels8_xy2, _no_rnd, vshrn.u16, 1 + pixfunc put_, pixels8, avg=0 + pixfunc2 put_, pixels8_x2, avg=0 + pixfunc2 put_, pixels8_y2, avg=0 + pixfunc2 put_, pixels8_xy2, avg=0 function ff_avg_h264_qpel8_mc00_neon, export=1 mov r3, #8 endfunc - pixfunc avg_ pixels8,, 1 + pixfunc avg_, pixels8, avg=1 + pixfunc2 avg_, pixels8_x2, avg=1 + pixfunc2 avg_, pixels8_y2, avg=1 + pixfunc2 avg_, pixels8_xy2, avg=1 function ff_put_pixels_clamped_neon, export=1 vld1.64 {d16-d19}, [r0,:128]! diff --git a/libavcodec/h264.c b/libavcodec/h264.c index a08573e221..3bc13aa2d4 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -1471,7 +1471,7 @@ static void decode_postinit(H264Context *h, int setup_finished){ if( s->avctx->strict_std_compliance >= FF_COMPLIANCE_STRICT && !h->sps.bitstream_restriction_flag){ - s->avctx->has_b_frames= MAX_DELAYED_PIC_COUNT; + s->avctx->has_b_frames = MAX_DELAYED_PIC_COUNT - 1; s->low_delay= 0; } diff --git a/libavcodec/rv34.c b/libavcodec/rv34.c index 2e2de85044..15a5c5430f 100644 --- a/libavcodec/rv34.c +++ b/libavcodec/rv34.c @@ -1112,7 +1112,7 @@ static int rv34_decode_macroblock(RV34DecContext *r, int8_t *intra_types) GetBitContext *gb = &s->gb; int cbp, cbp2; int i, blknum, blkoff; - DCTELEM block16[64]; + LOCAL_ALIGNED_16(DCTELEM, block16, [64]); int luma_dc_quant; int dist; int mb_pos = s->mb_x + s->mb_y * s->mb_stride; @@ -1147,7 +1147,7 @@ static int rv34_decode_macroblock(RV34DecContext *r, int8_t *intra_types) luma_dc_quant = r->block_type == RV34_MB_P_MIX16x16 ? r->luma_dc_quant_p[s->qscale] : r->luma_dc_quant_i[s->qscale]; if(r->is16){ - memset(block16, 0, sizeof(block16)); + memset(block16, 0, 64 * sizeof(*block16)); rv34_decode_block(block16, gb, r->cur_vlcs, 3, 0); rv34_dequant4x4_16x16(block16, rv34_qscale_tab[luma_dc_quant],rv34_qscale_tab[s->qscale]); r->rdsp.rv34_inv_transform_tab[1](block16); |