From be2c456e962ab0a748164e0e43d0d74cc0d704fa Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Sun, 15 Jul 2012 19:55:21 +0200 Subject: [PATCH 1/3] x86: fmtconvert: Refactor cvtps2pi emulation through cpuflags --- libavcodec/x86/fmtconvert.asm | 52 +++++++++++++++++------------------ 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/libavcodec/x86/fmtconvert.asm b/libavcodec/x86/fmtconvert.asm index 969f9ab87d..fb183ce9a6 100644 --- a/libavcodec/x86/fmtconvert.asm +++ b/libavcodec/x86/fmtconvert.asm @@ -23,6 +23,14 @@ SECTION_TEXT +%macro CVTPS2PI 2 +%if cpuflag(sse) + cvtps2pi %1, %2 +%elif cpuflag(3dnow) + pf2id %1, %2 +%endif +%endmacro + ;--------------------------------------------------------------------------------- ; void int32_to_float_fmul_scalar(float *dst, const int *src, float mul, int len); ;--------------------------------------------------------------------------------- @@ -88,10 +96,10 @@ cglobal float_to_int16, 3, 3, %1, dst, src, len packssdw m0, m1 mova [dstq+lenq], m0 %else - cvtps2pi m0, [srcq+2*lenq ] - cvtps2pi m1, [srcq+2*lenq+ 8] - cvtps2pi m2, [srcq+2*lenq+16] - cvtps2pi m3, [srcq+2*lenq+24] + CVTPS2PI m0, [srcq+2*lenq ] + CVTPS2PI m1, [srcq+2*lenq+ 8] + CVTPS2PI m2, [srcq+2*lenq+16] + CVTPS2PI m3, [srcq+2*lenq+24] packssdw m0, m1 packssdw m2, m3 mova [dstq+lenq ], m0 @@ -109,10 +117,8 @@ INIT_XMM sse2 FLOAT_TO_INT16 2 INIT_MMX sse FLOAT_TO_INT16 0 -%define cvtps2pi pf2id INIT_MMX 3dnow FLOAT_TO_INT16 0 -%undef cvtps2pi ;------------------------------------------------------------------------------ ; void ff_float_to_int16_step(int16_t *dst, const float *src, long len, long step); @@ -150,10 +156,10 @@ cglobal float_to_int16_step, 4, 7, %1, dst, src, len, step, step3, v1, v2 mov [dstq+step3q*2], v2w lea dstq, [dstq+stepq*8] %else - cvtps2pi m0, [srcq+2*lenq ] - cvtps2pi m1, [srcq+2*lenq+ 8] - cvtps2pi m2, [srcq+2*lenq+16] - cvtps2pi m3, [srcq+2*lenq+24] + CVTPS2PI m0, [srcq+2*lenq ] + CVTPS2PI m1, [srcq+2*lenq+ 8] + CVTPS2PI m2, [srcq+2*lenq+16] + CVTPS2PI m3, [srcq+2*lenq+24] packssdw m0, m1 packssdw m2, m3 movd v1d, m0 @@ -189,10 +195,8 @@ INIT_XMM sse2 FLOAT_TO_INT16_STEP 2 INIT_MMX sse FLOAT_TO_INT16_STEP 0 -%define cvtps2pi pf2id INIT_MMX 3dnow FLOAT_TO_INT16_STEP 0 -%undef cvtps2pi ;------------------------------------------------------------------------------- ; void ff_float_to_int16_interleave2(int16_t *dst, const float **src, long len); @@ -215,10 +219,10 @@ cglobal float_to_int16_interleave2, 3, 4, 2, dst, src0, src1, len punpcklwd m0, m1 mova [dstq+lenq], m0 %else - cvtps2pi m0, [src0q+lenq ] - cvtps2pi m1, [src0q+lenq+8] - cvtps2pi m2, [src1q+lenq ] - cvtps2pi m3, [src1q+lenq+8] + CVTPS2PI m0, [src0q+lenq ] + CVTPS2PI m1, [src0q+lenq+8] + CVTPS2PI m2, [src1q+lenq ] + CVTPS2PI m3, [src1q+lenq+8] packssdw m0, m1 packssdw m2, m3 mova m1, m0 @@ -236,9 +240,7 @@ cglobal float_to_int16_interleave2, 3, 4, 2, dst, src0, src1, len %endmacro INIT_MMX 3dnow -%define cvtps2pi pf2id FLOAT_TO_INT16_INTERLEAVE2 -%undef cvtps2pi INIT_MMX sse FLOAT_TO_INT16_INTERLEAVE2 INIT_XMM sse2 @@ -274,12 +276,12 @@ cglobal float_to_int16_interleave6, 2, 8, 0, dst, src, src1, src2, src3, src4, s sub src4q, srcq sub src5q, srcq .loop: - cvtps2pi mm0, [srcq] - cvtps2pi mm1, [srcq+src1q] - cvtps2pi mm2, [srcq+src2q] - cvtps2pi mm3, [srcq+src3q] - cvtps2pi mm4, [srcq+src4q] - cvtps2pi mm5, [srcq+src5q] + CVTPS2PI mm0, [srcq] + CVTPS2PI mm1, [srcq+src1q] + CVTPS2PI mm2, [srcq+src2q] + CVTPS2PI mm3, [srcq+src3q] + CVTPS2PI mm4, [srcq+src4q] + CVTPS2PI mm5, [srcq+src5q] packssdw mm0, mm3 packssdw mm1, mm4 packssdw mm2, mm5 @@ -306,13 +308,11 @@ INIT_MMX sse %define pswapd PSWAPD_SSE FLOAT_TO_INT16_INTERLEAVE6 INIT_MMX 3dnow -%define cvtps2pi pf2id %define pswapd PSWAPD_3DNOW FLOAT_TO_INT16_INTERLEAVE6 %undef pswapd INIT_MMX 3dnowext FLOAT_TO_INT16_INTERLEAVE6 -%undef cvtps2pi ;----------------------------------------------------------------------------- ; void ff_float_interleave6(float *dst, const float **src, unsigned int len); From 9c167914a1d88192882fe09dfce430a299580a8a Mon Sep 17 00:00:00 2001 From: Dave Yeo Date: Tue, 30 Oct 2012 23:48:26 -0700 Subject: [PATCH 2/3] x86: Fix assembly with NASM Unlike YASM, NASM only looks for include files in the current directory, not in the directory that included files reside in. Signed-off-by: Diego Biurrun --- libavutil/x86/x86util.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavutil/x86/x86util.asm b/libavutil/x86/x86util.asm index d7ec5948e5..4c6f4c63ab 100644 --- a/libavutil/x86/x86util.asm +++ b/libavutil/x86/x86util.asm @@ -23,7 +23,7 @@ ;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ;****************************************************************************** -%include "x86inc.asm" +%include "libavutil/x86/x86inc.asm" %macro SBUTTERFLY 4 %if avx_enabled == 0 From 5707af8d0b9c5a7e8a742a11798e406f99d78cea Mon Sep 17 00:00:00 2001 From: Diego Biurrun Date: Wed, 24 Oct 2012 19:15:54 +0200 Subject: [PATCH 3/3] aacdec: Drop some unused function arguments --- libavcodec/aacdec.c | 44 ++++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c index b7caecb39b..59f39fd26f 100644 --- a/libavcodec/aacdec.c +++ b/libavcodec/aacdec.c @@ -171,7 +171,7 @@ struct elem_to_channel { }; static int assign_pair(struct elem_to_channel e2c_vec[MAX_ELEM_ID], - uint8_t (*layout_map)[3], int offset, int tags, uint64_t left, + uint8_t (*layout_map)[3], int offset, uint64_t left, uint64_t right, int pos) { if (layout_map[offset][0] == TYPE_CPE) { @@ -253,21 +253,21 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags) num_front_channels--; } if (num_front_channels >= 4) { - i += assign_pair(e2c_vec, layout_map, i, tags, + i += assign_pair(e2c_vec, layout_map, i, AV_CH_FRONT_LEFT_OF_CENTER, AV_CH_FRONT_RIGHT_OF_CENTER, AAC_CHANNEL_FRONT); num_front_channels -= 2; } if (num_front_channels >= 2) { - i += assign_pair(e2c_vec, layout_map, i, tags, + i += assign_pair(e2c_vec, layout_map, i, AV_CH_FRONT_LEFT, AV_CH_FRONT_RIGHT, AAC_CHANNEL_FRONT); num_front_channels -= 2; } while (num_front_channels >= 2) { - i += assign_pair(e2c_vec, layout_map, i, tags, + i += assign_pair(e2c_vec, layout_map, i, UINT64_MAX, UINT64_MAX, AAC_CHANNEL_FRONT); @@ -275,14 +275,14 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags) } if (num_side_channels >= 2) { - i += assign_pair(e2c_vec, layout_map, i, tags, + i += assign_pair(e2c_vec, layout_map, i, AV_CH_SIDE_LEFT, AV_CH_SIDE_RIGHT, AAC_CHANNEL_FRONT); num_side_channels -= 2; } while (num_side_channels >= 2) { - i += assign_pair(e2c_vec, layout_map, i, tags, + i += assign_pair(e2c_vec, layout_map, i, UINT64_MAX, UINT64_MAX, AAC_CHANNEL_SIDE); @@ -290,14 +290,14 @@ static uint64_t sniff_channel_order(uint8_t (*layout_map)[3], int tags) } while (num_back_channels >= 4) { - i += assign_pair(e2c_vec, layout_map, i, tags, + i += assign_pair(e2c_vec, layout_map, i, UINT64_MAX, UINT64_MAX, AAC_CHANNEL_BACK); num_back_channels -= 2; } if (num_back_channels >= 2) { - i += assign_pair(e2c_vec, layout_map, i, tags, + i += assign_pair(e2c_vec, layout_map, i, AV_CH_BACK_LEFT, AV_CH_BACK_RIGHT, AAC_CHANNEL_BACK); @@ -379,7 +379,7 @@ static void pop_output_configuration(AACContext *ac) { */ static int output_configure(AACContext *ac, uint8_t layout_map[MAX_ELEM_ID*4][3], int tags, - int channel_config, enum OCStatus oc_type) + enum OCStatus oc_type) { AVCodecContext *avctx = ac->avctx; int i, channels = 0, ret; @@ -457,7 +457,7 @@ static ChannelElement *get_che(AACContext *ac, int type, int elem_id) 2) < 0) return NULL; if (output_configure(ac, layout_map, layout_map_tags, - 2, OC_TRIAL_FRAME) < 0) + OC_TRIAL_FRAME) < 0) return NULL; ac->oc[1].m4ac.chan_config = 2; @@ -473,7 +473,7 @@ static ChannelElement *get_che(AACContext *ac, int type, int elem_id) 1) < 0) return NULL; if (output_configure(ac, layout_map, layout_map_tags, - 1, OC_TRIAL_FRAME) < 0) + OC_TRIAL_FRAME) < 0) return NULL; ac->oc[1].m4ac.chan_config = 1; @@ -660,8 +660,7 @@ static int decode_ga_specific_config(AACContext *ac, AVCodecContext *avctx, } else if (m4ac->sbr == 1 && m4ac->ps == -1) m4ac->ps = 1; - if (ac && (ret = output_configure(ac, layout_map, tags, - channel_config, OC_GLOBAL_HDR))) + if (ac && (ret = output_configure(ac, layout_map, tags, OC_GLOBAL_HDR))) return ret; if (extension_flag) { @@ -837,7 +836,7 @@ static av_cold int aac_decode_init(AVCodecContext *avctx) &layout_map_tags, ac->oc[1].m4ac.chan_config); if (!ret) output_configure(ac, layout_map, layout_map_tags, - ac->oc[1].m4ac.chan_config, OC_GLOBAL_HDR); + OC_GLOBAL_HDR); else if (avctx->err_recognition & AV_EF_EXPLODE) return AVERROR_INVALIDDATA; } @@ -935,7 +934,7 @@ static int decode_prediction(AACContext *ac, IndividualChannelStream *ics, /** * Decode Long Term Prediction data; reference: table 4.xx. */ -static void decode_ltp(AACContext *ac, LongTermPrediction *ltp, +static void decode_ltp(LongTermPrediction *ltp, GetBitContext *gb, uint8_t max_sfb) { int sfb; @@ -996,7 +995,7 @@ static int decode_ics_info(AACContext *ac, IndividualChannelStream *ics, return AVERROR_INVALIDDATA; } else { if ((ics->ltp.present = get_bits(gb, 1))) - decode_ltp(ac, &ics->ltp, gb, ics->max_sfb); + decode_ltp(&ics->ltp, gb, ics->max_sfb); } } } @@ -1734,7 +1733,7 @@ static int decode_cpe(AACContext *ac, GetBitContext *gb, ChannelElement *cpe) cpe->ch[1].ics.use_kb_window[1] = i; if (cpe->ch[1].ics.predictor_present && (ac->oc[1].m4ac.object_type != AOT_AAC_MAIN)) if ((cpe->ch[1].ics.ltp.present = get_bits(gb, 1))) - decode_ltp(ac, &cpe->ch[1].ics.ltp, gb, cpe->ch[1].ics.max_sfb); + decode_ltp(&cpe->ch[1].ics.ltp, gb, cpe->ch[1].ics.max_sfb); ms_present = get_bits(gb, 2); if (ms_present == 3) { av_log(ac->avctx, AV_LOG_ERROR, "ms_present = 3 is reserved.\n"); @@ -1861,12 +1860,10 @@ static int decode_drc_channel_exclusions(DynamicRangeControl *che_drc, /** * Decode dynamic range information; reference: table 4.52. * - * @param cnt length of TYPE_FIL syntactic element in bytes - * * @return Returns number of bytes consumed. */ static int decode_dynamic_range(DynamicRangeControl *che_drc, - GetBitContext *gb, int cnt) + GetBitContext *gb) { int n = 1; int drc_num_bands = 1; @@ -1943,14 +1940,14 @@ static int decode_extension_payload(AACContext *ac, GetBitContext *gb, int cnt, ac->oc[1].m4ac.sbr = 1; ac->oc[1].m4ac.ps = 1; output_configure(ac, ac->oc[1].layout_map, ac->oc[1].layout_map_tags, - ac->oc[1].m4ac.chan_config, ac->oc[1].status); + ac->oc[1].status); } else { ac->oc[1].m4ac.sbr = 1; } res = ff_decode_sbr_extension(ac, &che->sbr, gb, crc_flag, cnt, elem_type); break; case EXT_DYNAMIC_RANGE: - res = decode_dynamic_range(&ac->che_drc, gb, cnt); + res = decode_dynamic_range(&ac->che_drc, gb); break; case EXT_FILL: case EXT_FILL_DATA: @@ -2333,7 +2330,6 @@ static int parse_adts_frame_header(AACContext *ac, GetBitContext *gb) &layout_map_tags, hdr_info.chan_config)) return -7; if (output_configure(ac, layout_map, layout_map_tags, - hdr_info.chan_config, FFMAX(ac->oc[1].status, OC_TRIAL_FRAME))) return -7; } else { @@ -2430,7 +2426,7 @@ static int aac_decode_frame_int(AVCodecContext *avctx, void *data, "Not evaluating a further program_config_element as this construct is dubious at best.\n"); pop_output_configuration(ac); } else { - err = output_configure(ac, layout_map, tags, 0, OC_TRIAL_PCE); + err = output_configure(ac, layout_map, tags, OC_TRIAL_PCE); pce_found = 1; } break;