Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(325)

Side by Side Diff: patched-ffmpeg-mt/libavcodec/dsputil.h

Issue 789004: ffmpeg roll of source to mar 9 version... (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/ffmpeg/
Patch Set: '' Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * DSP utils 2 * DSP utils
3 * Copyright (c) 2000, 2001, 2002 Fabrice Bellard 3 * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
4 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at> 4 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
5 * 5 *
6 * This file is part of FFmpeg. 6 * This file is part of FFmpeg.
7 * 7 *
8 * FFmpeg is free software; you can redistribute it and/or 8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public 9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 void ff_vp3_idct_put_c(uint8_t *dest/*align 8*/, int line_size, DCTELEM *block/* align 16*/); 89 void ff_vp3_idct_put_c(uint8_t *dest/*align 8*/, int line_size, DCTELEM *block/* align 16*/);
90 void ff_vp3_idct_add_c(uint8_t *dest/*align 8*/, int line_size, DCTELEM *block/* align 16*/); 90 void ff_vp3_idct_add_c(uint8_t *dest/*align 8*/, int line_size, DCTELEM *block/* align 16*/);
91 91
92 void ff_vp3_v_loop_filter_c(uint8_t *src, int stride, int *bounding_values); 92 void ff_vp3_v_loop_filter_c(uint8_t *src, int stride, int *bounding_values);
93 void ff_vp3_h_loop_filter_c(uint8_t *src, int stride, int *bounding_values); 93 void ff_vp3_h_loop_filter_c(uint8_t *src, int stride, int *bounding_values);
94 94
95 /* VP6 DSP functions */ 95 /* VP6 DSP functions */
96 void ff_vp6_filter_diag4_c(uint8_t *dst, uint8_t *src, int stride, 96 void ff_vp6_filter_diag4_c(uint8_t *dst, uint8_t *src, int stride,
97 const int16_t *h_weights, const int16_t *v_weights); 97 const int16_t *h_weights, const int16_t *v_weights);
98 98
99 /* Bink functions */
100 void ff_bink_idct_c (DCTELEM *block);
101 void ff_bink_idct_add_c(uint8_t *dest, int linesize, DCTELEM *block);
102 void ff_bink_idct_put_c(uint8_t *dest, int linesize, DCTELEM *block);
103
104 /* CAVS functions */
105 void ff_put_cavs_qpel8_mc00_c(uint8_t *dst, uint8_t *src, int stride);
106 void ff_avg_cavs_qpel8_mc00_c(uint8_t *dst, uint8_t *src, int stride);
107 void ff_put_cavs_qpel16_mc00_c(uint8_t *dst, uint8_t *src, int stride);
108 void ff_avg_cavs_qpel16_mc00_c(uint8_t *dst, uint8_t *src, int stride);
109
110 /* VC1 functions */
111 void ff_put_vc1_mspel_mc00_c(uint8_t *dst, const uint8_t *src, int stride, int r nd);
112 void ff_avg_vc1_mspel_mc00_c(uint8_t *dst, const uint8_t *src, int stride, int r nd);
113
114 /* EA functions */
115 void ff_ea_idct_put_c(uint8_t *dest, int linesize, DCTELEM *block);
116
99 /* 1/2^n downscaling functions from imgconvert.c */ 117 /* 1/2^n downscaling functions from imgconvert.c */
100 void ff_img_copy_plane(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_w rap, int width, int height); 118 void ff_img_copy_plane(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_w rap, int width, int height);
101 void ff_shrink22(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, i nt width, int height); 119 void ff_shrink22(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, i nt width, int height);
102 void ff_shrink44(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, i nt width, int height); 120 void ff_shrink44(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, i nt width, int height);
103 void ff_shrink88(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, i nt width, int height); 121 void ff_shrink88(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, i nt width, int height);
104 122
105 void ff_gmc_c(uint8_t *dst, uint8_t *src, int stride, int h, int ox, int oy, 123 void ff_gmc_c(uint8_t *dst, uint8_t *src, int stride, int h, int ox, int oy,
106 int dxx, int dxy, int dyx, int dyy, int shift, int r, int width, i nt height); 124 int dxx, int dxy, int dyx, int dyy, int shift, int r, int width, i nt height);
107 125
108 /* minimum alignment rules ;) 126 /* minimum alignment rules ;)
(...skipping 20 matching lines...) Expand all
129 /* add and put pixel (decoding) */ 147 /* add and put pixel (decoding) */
130 // blocksizes for op_pixels_func are 8x4,8x8 16x8 16x16 148 // blocksizes for op_pixels_func are 8x4,8x8 16x8 16x16
131 //h for op_pixels_func is limited to {width/2, width} but never larger than 16 a nd never smaller then 4 149 //h for op_pixels_func is limited to {width/2, width} but never larger than 16 a nd never smaller then 4
132 typedef void (*op_pixels_func)(uint8_t *block/*align width (8 or 16)*/, const ui nt8_t *pixels/*align 1*/, int line_size, int h); 150 typedef void (*op_pixels_func)(uint8_t *block/*align width (8 or 16)*/, const ui nt8_t *pixels/*align 1*/, int line_size, int h);
133 typedef void (*tpel_mc_func)(uint8_t *block/*align width (8 or 16)*/, const uint 8_t *pixels/*align 1*/, int line_size, int w, int h); 151 typedef void (*tpel_mc_func)(uint8_t *block/*align width (8 or 16)*/, const uint 8_t *pixels/*align 1*/, int line_size, int w, int h);
134 typedef void (*qpel_mc_func)(uint8_t *dst/*align width (8 or 16)*/, uint8_t *src /*align 1*/, int stride); 152 typedef void (*qpel_mc_func)(uint8_t *dst/*align width (8 or 16)*/, uint8_t *src /*align 1*/, int stride);
135 typedef void (*h264_chroma_mc_func)(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int srcStride, int h, int x, int y); 153 typedef void (*h264_chroma_mc_func)(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int srcStride, int h, int x, int y);
136 typedef void (*h264_weight_func)(uint8_t *block, int stride, int log2_denom, int weight, int offset); 154 typedef void (*h264_weight_func)(uint8_t *block, int stride, int log2_denom, int weight, int offset);
137 typedef void (*h264_biweight_func)(uint8_t *dst, uint8_t *src, int stride, int l og2_denom, int weightd, int weights, int offset); 155 typedef void (*h264_biweight_func)(uint8_t *dst, uint8_t *src, int stride, int l og2_denom, int weightd, int weights, int offset);
138 156
157 typedef void (*op_fill_func)(uint8_t *block/*align width (8 or 16)*/, uint8_t va lue, int line_size, int h);
158
139 #define DEF_OLD_QPEL(name)\ 159 #define DEF_OLD_QPEL(name)\
140 void ff_put_ ## name (uint8_t *dst/*align width (8 or 16)*/, uint8_t *src /*align 1*/, int stride);\ 160 void ff_put_ ## name (uint8_t *dst/*align width (8 or 16)*/, uint8_t *src /*align 1*/, int stride);\
141 void ff_put_no_rnd_ ## name (uint8_t *dst/*align width (8 or 16)*/, uint8_t *src /*align 1*/, int stride);\ 161 void ff_put_no_rnd_ ## name (uint8_t *dst/*align width (8 or 16)*/, uint8_t *src /*align 1*/, int stride);\
142 void ff_avg_ ## name (uint8_t *dst/*align width (8 or 16)*/, uint8_t *src /*align 1*/, int stride); 162 void ff_avg_ ## name (uint8_t *dst/*align width (8 or 16)*/, uint8_t *src /*align 1*/, int stride);
143 163
144 DEF_OLD_QPEL(qpel16_mc11_old_c) 164 DEF_OLD_QPEL(qpel16_mc11_old_c)
145 DEF_OLD_QPEL(qpel16_mc31_old_c) 165 DEF_OLD_QPEL(qpel16_mc31_old_c)
146 DEF_OLD_QPEL(qpel16_mc12_old_c) 166 DEF_OLD_QPEL(qpel16_mc12_old_c)
147 DEF_OLD_QPEL(qpel16_mc32_old_c) 167 DEF_OLD_QPEL(qpel16_mc32_old_c)
148 DEF_OLD_QPEL(qpel16_mc13_old_c) 168 DEF_OLD_QPEL(qpel16_mc13_old_c)
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 210
191 /** 211 /**
192 * DSPContext. 212 * DSPContext.
193 */ 213 */
194 typedef struct DSPContext { 214 typedef struct DSPContext {
195 /* pixel ops : interface with DCT */ 215 /* pixel ops : interface with DCT */
196 void (*get_pixels)(DCTELEM *block/*align 16*/, const uint8_t *pixels/*align 8*/, int line_size); 216 void (*get_pixels)(DCTELEM *block/*align 16*/, const uint8_t *pixels/*align 8*/, int line_size);
197 void (*diff_pixels)(DCTELEM *block/*align 16*/, const uint8_t *s1/*align 8*/ , const uint8_t *s2/*align 8*/, int stride); 217 void (*diff_pixels)(DCTELEM *block/*align 16*/, const uint8_t *s1/*align 8*/ , const uint8_t *s2/*align 8*/, int stride);
198 void (*put_pixels_clamped)(const DCTELEM *block/*align 16*/, uint8_t *pixels /*align 8*/, int line_size); 218 void (*put_pixels_clamped)(const DCTELEM *block/*align 16*/, uint8_t *pixels /*align 8*/, int line_size);
199 void (*put_signed_pixels_clamped)(const DCTELEM *block/*align 16*/, uint8_t *pixels/*align 8*/, int line_size); 219 void (*put_signed_pixels_clamped)(const DCTELEM *block/*align 16*/, uint8_t *pixels/*align 8*/, int line_size);
220 void (*put_pixels_nonclamped)(const DCTELEM *block/*align 16*/, uint8_t *pix els/*align 8*/, int line_size);
200 void (*add_pixels_clamped)(const DCTELEM *block/*align 16*/, uint8_t *pixels /*align 8*/, int line_size); 221 void (*add_pixels_clamped)(const DCTELEM *block/*align 16*/, uint8_t *pixels /*align 8*/, int line_size);
201 void (*add_pixels8)(uint8_t *pixels, DCTELEM *block, int line_size); 222 void (*add_pixels8)(uint8_t *pixels, DCTELEM *block, int line_size);
202 void (*add_pixels4)(uint8_t *pixels, DCTELEM *block, int line_size); 223 void (*add_pixels4)(uint8_t *pixels, DCTELEM *block, int line_size);
203 int (*sum_abs_dctelem)(DCTELEM *block/*align 16*/); 224 int (*sum_abs_dctelem)(DCTELEM *block/*align 16*/);
204 /** 225 /**
205 * translational global motion compensation. 226 * translational global motion compensation.
206 */ 227 */
207 void (*gmc1)(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int srcStride , int h, int x16, int y16, int rounder); 228 void (*gmc1)(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int srcStride , int h, int x16, int y16, int rounder);
208 /** 229 /**
209 * global motion compensation. 230 * global motion compensation.
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 599
579 /* rv30 functions */ 600 /* rv30 functions */
580 qpel_mc_func put_rv30_tpel_pixels_tab[4][16]; 601 qpel_mc_func put_rv30_tpel_pixels_tab[4][16];
581 qpel_mc_func avg_rv30_tpel_pixels_tab[4][16]; 602 qpel_mc_func avg_rv30_tpel_pixels_tab[4][16];
582 603
583 /* rv40 functions */ 604 /* rv40 functions */
584 qpel_mc_func put_rv40_qpel_pixels_tab[4][16]; 605 qpel_mc_func put_rv40_qpel_pixels_tab[4][16];
585 qpel_mc_func avg_rv40_qpel_pixels_tab[4][16]; 606 qpel_mc_func avg_rv40_qpel_pixels_tab[4][16];
586 h264_chroma_mc_func put_rv40_chroma_pixels_tab[3]; 607 h264_chroma_mc_func put_rv40_chroma_pixels_tab[3];
587 h264_chroma_mc_func avg_rv40_chroma_pixels_tab[3]; 608 h264_chroma_mc_func avg_rv40_chroma_pixels_tab[3];
609
610 /* bink functions */
611 op_fill_func fill_block_tab[2];
612 void (*scale_block)(const uint8_t src[64]/*align 8*/, uint8_t *dst/*align 8* /, int linesize);
588 } DSPContext; 613 } DSPContext;
589 614
590 void dsputil_static_init(void); 615 void dsputil_static_init(void);
591 void dsputil_init(DSPContext* p, AVCodecContext *avctx); 616 void dsputil_init(DSPContext* p, AVCodecContext *avctx);
592 617
593 int ff_check_alignment(void); 618 int ff_check_alignment(void);
594 619
595 /** 620 /**
596 * permute block according to permuatation. 621 * permute block according to permuatation.
597 * @param last last non zero element in scantable order 622 * @param last last non zero element in scantable order
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 void dsputil_init_alpha(DSPContext* c, AVCodecContext *avctx); 676 void dsputil_init_alpha(DSPContext* c, AVCodecContext *avctx);
652 void dsputil_init_arm(DSPContext* c, AVCodecContext *avctx); 677 void dsputil_init_arm(DSPContext* c, AVCodecContext *avctx);
653 void dsputil_init_bfin(DSPContext* c, AVCodecContext *avctx); 678 void dsputil_init_bfin(DSPContext* c, AVCodecContext *avctx);
654 void dsputil_init_mlib(DSPContext* c, AVCodecContext *avctx); 679 void dsputil_init_mlib(DSPContext* c, AVCodecContext *avctx);
655 void dsputil_init_mmi(DSPContext* c, AVCodecContext *avctx); 680 void dsputil_init_mmi(DSPContext* c, AVCodecContext *avctx);
656 void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx); 681 void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx);
657 void dsputil_init_ppc(DSPContext* c, AVCodecContext *avctx); 682 void dsputil_init_ppc(DSPContext* c, AVCodecContext *avctx);
658 void dsputil_init_sh4(DSPContext* c, AVCodecContext *avctx); 683 void dsputil_init_sh4(DSPContext* c, AVCodecContext *avctx);
659 void dsputil_init_vis(DSPContext* c, AVCodecContext *avctx); 684 void dsputil_init_vis(DSPContext* c, AVCodecContext *avctx);
660 685
661 #define DECLARE_ALIGNED_16(t, v, ...) DECLARE_ALIGNED(16, t, v) 686 void ff_cavsdsp_init(DSPContext* c, AVCodecContext *avctx);
662 #define DECLARE_ALIGNED_8(t, v, ...) DECLARE_ALIGNED(8, t, v) 687 void ff_rv30dsp_init(DSPContext* c, AVCodecContext *avctx);
688 void ff_rv40dsp_init(DSPContext* c, AVCodecContext *avctx);
689 void ff_vc1dsp_init(DSPContext* c, AVCodecContext *avctx);
690 void ff_intrax8dsp_init(DSPContext* c, AVCodecContext *avctx);
691 void ff_mlp_init(DSPContext* c, AVCodecContext *avctx);
692 void ff_mlp_init_x86(DSPContext* c, AVCodecContext *avctx);
663 693
664 #if HAVE_MMX 694 #if HAVE_MMX
665 695
666 #undef emms_c 696 #undef emms_c
667 697
668 static inline void emms(void) 698 static inline void emms(void)
669 { 699 {
670 __asm__ volatile ("emms;":::"memory"); 700 __asm__ volatile ("emms;":::"memory");
671 } 701 }
672 702
(...skipping 22 matching lines...) Expand all
695 725
696 #define mm_flags 0 726 #define mm_flags 0
697 #define mm_support() 0 727 #define mm_support() 0
698 728
699 #endif 729 #endif
700 730
701 #ifndef STRIDE_ALIGN 731 #ifndef STRIDE_ALIGN
702 # define STRIDE_ALIGN 8 732 # define STRIDE_ALIGN 8
703 #endif 733 #endif
704 734
735 #define LOCAL_ALIGNED(a, t, v, s, ...) \
736 uint8_t la_##v[sizeof(t s __VA_ARGS__) + (a)]; \
737 t (*v) __VA_ARGS__ = (void *)FFALIGN((uintptr_t)la_##v, a)
738
739 #if HAVE_LOCAL_ALIGNED_8
740 # define LOCAL_ALIGNED_8(t, v, s, ...) DECLARE_ALIGNED(8, t, v) s __VA_ARGS__
741 #else
742 # define LOCAL_ALIGNED_8(t, v, s, ...) LOCAL_ALIGNED(8, t, v, s, __VA_ARGS__)
743 #endif
744
745 #if HAVE_LOCAL_ALIGNED_16
746 # define LOCAL_ALIGNED_16(t, v, s, ...) DECLARE_ALIGNED(16, t, v) s __VA_ARGS_ _
747 #else
748 # define LOCAL_ALIGNED_16(t, v, s, ...) LOCAL_ALIGNED(16, t, v, s, __VA_ARGS__ )
749 #endif
750
705 /* PSNR */ 751 /* PSNR */
706 void get_psnr(uint8_t *orig_image[3], uint8_t *coded_image[3], 752 void get_psnr(uint8_t *orig_image[3], uint8_t *coded_image[3],
707 int orig_linesize[3], int coded_linesize, 753 int orig_linesize[3], int coded_linesize,
708 AVCodecContext *avctx); 754 AVCodecContext *avctx);
709 755
710 /* FFT computation */
711
712 /* NOTE: soon integer code will be added, so you must use the
713 FFTSample type */
714 typedef float FFTSample;
715
716 typedef struct FFTComplex {
717 FFTSample re, im;
718 } FFTComplex;
719
720 typedef struct FFTContext {
721 int nbits;
722 int inverse;
723 uint16_t *revtab;
724 FFTComplex *exptab;
725 FFTComplex *exptab1; /* only used by SSE code */
726 FFTComplex *tmp_buf;
727 int mdct_size; /* size of MDCT (i.e. number of input data * 2) */
728 int mdct_bits; /* n = 2^nbits */
729 /* pre/post rotation tables */
730 FFTSample *tcos;
731 FFTSample *tsin;
732 void (*fft_permute)(struct FFTContext *s, FFTComplex *z);
733 void (*fft_calc)(struct FFTContext *s, FFTComplex *z);
734 void (*imdct_calc)(struct FFTContext *s, FFTSample *output, const FFTSample *input);
735 void (*imdct_half)(struct FFTContext *s, FFTSample *output, const FFTSample *input);
736 void (*mdct_calc)(struct FFTContext *s, FFTSample *output, const FFTSample * input);
737 int split_radix;
738 int permutation;
739 #define FF_MDCT_PERM_NONE 0
740 #define FF_MDCT_PERM_INTERLEAVE 1
741 } FFTContext;
742
743 #if CONFIG_HARDCODED_TABLES
744 #define COSTABLE_CONST const
745 #define SINTABLE_CONST const
746 #define SINETABLE_CONST const
747 #else
748 #define COSTABLE_CONST
749 #define SINTABLE_CONST
750 #define SINETABLE_CONST
751 #endif
752
753 #define COSTABLE(size) \
754 COSTABLE_CONST DECLARE_ALIGNED_16(FFTSample, ff_cos_##size)[size/2]
755 #define SINTABLE(size) \
756 SINTABLE_CONST DECLARE_ALIGNED_16(FFTSample, ff_sin_##size)[size/2]
757 #define SINETABLE(size) \
758 SINETABLE_CONST DECLARE_ALIGNED_16(float, ff_sine_##size)[size]
759 extern COSTABLE(16);
760 extern COSTABLE(32);
761 extern COSTABLE(64);
762 extern COSTABLE(128);
763 extern COSTABLE(256);
764 extern COSTABLE(512);
765 extern COSTABLE(1024);
766 extern COSTABLE(2048);
767 extern COSTABLE(4096);
768 extern COSTABLE(8192);
769 extern COSTABLE(16384);
770 extern COSTABLE(32768);
771 extern COSTABLE(65536);
772 extern COSTABLE_CONST FFTSample* const ff_cos_tabs[17];
773
774 /**
775 * Initializes the cosine table in ff_cos_tabs[index]
776 * \param index index in ff_cos_tabs array of the table to initialize
777 */
778 void ff_init_ff_cos_tabs(int index);
779
780 extern SINTABLE(16);
781 extern SINTABLE(32);
782 extern SINTABLE(64);
783 extern SINTABLE(128);
784 extern SINTABLE(256);
785 extern SINTABLE(512);
786 extern SINTABLE(1024);
787 extern SINTABLE(2048);
788 extern SINTABLE(4096);
789 extern SINTABLE(8192);
790 extern SINTABLE(16384);
791 extern SINTABLE(32768);
792 extern SINTABLE(65536);
793
794 /**
795 * Sets up a complex FFT.
796 * @param nbits log2 of the length of the input array
797 * @param inverse if 0 perform the forward transform, if 1 perform the i nverse
798 */
799 int ff_fft_init(FFTContext *s, int nbits, int inverse);
800 void ff_fft_permute_c(FFTContext *s, FFTComplex *z);
801 void ff_fft_calc_c(FFTContext *s, FFTComplex *z);
802
803 void ff_fft_init_altivec(FFTContext *s);
804 void ff_fft_init_mmx(FFTContext *s);
805 void ff_fft_init_arm(FFTContext *s);
806
807 /**
808 * Do the permutation needed BEFORE calling ff_fft_calc().
809 */
810 static inline void ff_fft_permute(FFTContext *s, FFTComplex *z)
811 {
812 s->fft_permute(s, z);
813 }
814 /**
815 * Do a complex FFT with the parameters defined in ff_fft_init(). The
816 * input data must be permuted before. No 1.0/sqrt(n) normalization is done.
817 */
818 static inline void ff_fft_calc(FFTContext *s, FFTComplex *z)
819 {
820 s->fft_calc(s, z);
821 }
822 void ff_fft_end(FFTContext *s);
823
824 /* MDCT computation */
825
826 static inline void ff_imdct_calc(FFTContext *s, FFTSample *output, const FFTSamp le *input)
827 {
828 s->imdct_calc(s, output, input);
829 }
830 static inline void ff_imdct_half(FFTContext *s, FFTSample *output, const FFTSamp le *input)
831 {
832 s->imdct_half(s, output, input);
833 }
834
835 static inline void ff_mdct_calc(FFTContext *s, FFTSample *output,
836 const FFTSample *input)
837 {
838 s->mdct_calc(s, output, input);
839 }
840
841 /**
842 * Generate a Kaiser-Bessel Derived Window.
843 * @param window pointer to half window
844 * @param alpha determines window shape
845 * @param n size of half window
846 */
847 void ff_kbd_window_init(float *window, float alpha, int n);
848
849 /**
850 * Generate a sine window.
851 * @param window pointer to half window
852 * @param n size of half window
853 */
854 void ff_sine_window_init(float *window, int n);
855 /**
856 * initialize the specified entry of ff_sine_windows
857 */
858 void ff_init_ff_sine_windows(int index);
859 extern SINETABLE( 32);
860 extern SINETABLE( 64);
861 extern SINETABLE( 128);
862 extern SINETABLE( 256);
863 extern SINETABLE( 512);
864 extern SINETABLE(1024);
865 extern SINETABLE(2048);
866 extern SINETABLE(4096);
867 extern SINETABLE_CONST float * const ff_sine_windows[13];
868
869 int ff_mdct_init(FFTContext *s, int nbits, int inverse, double scale);
870 void ff_imdct_calc_c(FFTContext *s, FFTSample *output, const FFTSample *input);
871 void ff_imdct_half_c(FFTContext *s, FFTSample *output, const FFTSample *input);
872 void ff_mdct_calc_c(FFTContext *s, FFTSample *output, const FFTSample *input);
873 void ff_mdct_end(FFTContext *s);
874
875 /* Real Discrete Fourier Transform */
876
877 enum RDFTransformType {
878 RDFT,
879 IRDFT,
880 RIDFT,
881 IRIDFT,
882 };
883
884 typedef struct {
885 int nbits;
886 int inverse;
887 int sign_convention;
888
889 /* pre/post rotation tables */
890 const FFTSample *tcos;
891 SINTABLE_CONST FFTSample *tsin;
892 FFTContext fft;
893 } RDFTContext;
894
895 /**
896 * Sets up a real FFT.
897 * @param nbits log2 of the length of the input array
898 * @param trans the type of transform
899 */
900 int ff_rdft_init(RDFTContext *s, int nbits, enum RDFTransformType trans);
901 void ff_rdft_calc(RDFTContext *s, FFTSample *data);
902 void ff_rdft_end(RDFTContext *s);
903
904 /* Discrete Cosine Transform */
905
906 typedef struct {
907 int nbits;
908 int inverse;
909 FFTSample *data;
910 RDFTContext rdft;
911 const float *costab;
912 FFTSample *csc2;
913 } DCTContext;
914
915 /**
916 * Sets up (Inverse)DCT.
917 * @param nbits log2 of the length of the input array
918 * @param inverse >0 forward transform, <0 inverse transform
919 */
920 int ff_dct_init(DCTContext *s, int nbits, int inverse);
921 void ff_dct_calc(DCTContext *s, FFTSample *data);
922 void ff_dct_end (DCTContext *s);
923
924 #define WRAPPER8_16(name8, name16)\ 756 #define WRAPPER8_16(name8, name16)\
925 static int name16(void /*MpegEncContext*/ *s, uint8_t *dst, uint8_t *src, int st ride, int h){\ 757 static int name16(void /*MpegEncContext*/ *s, uint8_t *dst, uint8_t *src, int st ride, int h){\
926 return name8(s, dst , src , stride, h)\ 758 return name8(s, dst , src , stride, h)\
927 +name8(s, dst+8 , src+8 , stride, h);\ 759 +name8(s, dst+8 , src+8 , stride, h);\
928 } 760 }
929 761
930 #define WRAPPER8_16_SQ(name8, name16)\ 762 #define WRAPPER8_16_SQ(name8, name16)\
931 static int name16(void /*MpegEncContext*/ *s, uint8_t *dst, uint8_t *src, int st ride, int h){\ 763 static int name16(void /*MpegEncContext*/ *s, uint8_t *dst, uint8_t *src, int st ride, int h){\
932 int score=0;\ 764 int score=0;\
933 score +=name8(s, dst , src , stride, 8);\ 765 score +=name8(s, dst , src , stride, 8);\
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1012 AV_WN32(dst+4 , AV_RN32(src+4 )); 844 AV_WN32(dst+4 , AV_RN32(src+4 ));
1013 AV_WN32(dst+8 , AV_RN32(src+8 )); 845 AV_WN32(dst+8 , AV_RN32(src+8 ));
1014 AV_WN32(dst+12, AV_RN32(src+12)); 846 AV_WN32(dst+12, AV_RN32(src+12));
1015 dst[16]= src[16]; 847 dst[16]= src[16];
1016 dst+=dstStride; 848 dst+=dstStride;
1017 src+=srcStride; 849 src+=srcStride;
1018 } 850 }
1019 } 851 }
1020 852
1021 #endif /* AVCODEC_DSPUTIL_H */ 853 #endif /* AVCODEC_DSPUTIL_H */
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698