* qatar/master: yuv4mpeg: return proper error codes. Give all anonymously typedeffed structs in headers a name fate: Add parseutils test parseutils-test: Drop random colors from parsing test vf_pad/scale: use double precision for aspect ratios. build: error on variable-length arrays ppc: swscale: rework yuv2planeX_altivec() ppc: fmtconvert: kill VLA in float_to_int16_interleave_altivec() x86: dsputil: kill VLA in gmc_mmx() libspeexenc: Updated commentary to reflect recent changes libspeexenc: Add an option for enabling DTX doc/APIchanges: fill in missing dates and hashes. lavr: bump major to 1 and declare it stable. lavr: change the type of the data buffers to uint8_t**. lavc: deprecate the audio resampling API. Conflicts: cmdutils.h configure doc/APIchanges ffplay.c libavcodec/dwt.h libavcodec/libspeexenc.c libavfilter/vf_pad.c libavfilter/vf_scale.c libavformat/asf.h tests/fate/libavutil.mak tests/ref/fate/parseutils Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n1.1
| @@ -139,7 +139,7 @@ typedef struct SpecifierOpt { | |||||
| } u; | } u; | ||||
| } SpecifierOpt; | } SpecifierOpt; | ||||
| typedef struct { | |||||
| typedef struct OptionDef { | |||||
| const char *name; | const char *name; | ||||
| int flags; | int flags; | ||||
| #define HAS_ARG 0x0001 | #define HAS_ARG 0x0001 | ||||
| @@ -3911,6 +3911,7 @@ elif enabled gcc; then | |||||
| check_optflags -fno-tree-vectorize | check_optflags -fno-tree-vectorize | ||||
| check_cflags -Werror=implicit-function-declaration | check_cflags -Werror=implicit-function-declaration | ||||
| check_cflags -Werror=missing-prototypes | check_cflags -Werror=missing-prototypes | ||||
| # check_cflags -Werror=vla | |||||
| elif enabled llvm_gcc; then | elif enabled llvm_gcc; then | ||||
| check_cflags -mllvm -stack-alignment=16 | check_cflags -mllvm -stack-alignment=16 | ||||
| elif enabled clang; then | elif enabled clang; then | ||||
| @@ -97,7 +97,12 @@ API changes, most recent first: | |||||
| 2012-03-26 - a67d9cf - lavfi 2.66.100 | 2012-03-26 - a67d9cf - lavfi 2.66.100 | ||||
| Add avfilter_fill_frame_from_{audio_,}buffer_ref() functions. | Add avfilter_fill_frame_from_{audio_,}buffer_ref() functions. | ||||
| 2012-09-23 - a42aada - lavc 54.28.0 - avcodec.h | |||||
| 2012-10-05 - e7ba5b1 - lavr 1.0.0 - avresample.h | |||||
| Data planes parameters to avresample_convert() and | |||||
| avresample_read() are now uint8_t** instead of void**. | |||||
| Libavresample is now stable. | |||||
| 2012-09-24 - a42aada - lavc 54.28.0 - avcodec.h | |||||
| Add avcodec_free_frame(). This function must now | Add avcodec_free_frame(). This function must now | ||||
| be used for freeing an AVFrame. | be used for freeing an AVFrame. | ||||
| @@ -113,7 +113,7 @@ enum OCStatus { | |||||
| OC_LOCKED, ///< Output configuration locked in place | OC_LOCKED, ///< Output configuration locked in place | ||||
| }; | }; | ||||
| typedef struct { | |||||
| typedef struct OutputConfiguration { | |||||
| MPEG4AudioConfig m4ac; | MPEG4AudioConfig m4ac; | ||||
| uint8_t layout_map[MAX_ELEM_ID*4][3]; | uint8_t layout_map[MAX_ELEM_ID*4][3]; | ||||
| int layout_map_tags; | int layout_map_tags; | ||||
| @@ -125,7 +125,7 @@ typedef struct { | |||||
| /** | /** | ||||
| * Predictor State | * Predictor State | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct PredictorState { | |||||
| float cor0; | float cor0; | ||||
| float cor1; | float cor1; | ||||
| float var0; | float var0; | ||||
| @@ -146,7 +146,7 @@ typedef struct { | |||||
| /** | /** | ||||
| * Long Term Prediction | * Long Term Prediction | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct LongTermPrediction { | |||||
| int8_t present; | int8_t present; | ||||
| int16_t lag; | int16_t lag; | ||||
| float coef; | float coef; | ||||
| @@ -156,7 +156,7 @@ typedef struct { | |||||
| /** | /** | ||||
| * Individual Channel Stream | * Individual Channel Stream | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct IndividualChannelStream { | |||||
| uint8_t max_sfb; ///< number of scalefactor bands per group | uint8_t max_sfb; ///< number of scalefactor bands per group | ||||
| enum WindowSequence window_sequence[2]; | enum WindowSequence window_sequence[2]; | ||||
| uint8_t use_kb_window[2]; ///< If set, use Kaiser-Bessel window, otherwise use a sinus window. | uint8_t use_kb_window[2]; ///< If set, use Kaiser-Bessel window, otherwise use a sinus window. | ||||
| @@ -177,7 +177,7 @@ typedef struct { | |||||
| /** | /** | ||||
| * Temporal Noise Shaping | * Temporal Noise Shaping | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct TemporalNoiseShaping { | |||||
| int present; | int present; | ||||
| int n_filt[8]; | int n_filt[8]; | ||||
| int length[8][4]; | int length[8][4]; | ||||
| @@ -189,7 +189,7 @@ typedef struct { | |||||
| /** | /** | ||||
| * Dynamic Range Control - decoded from the bitstream but not processed further. | * Dynamic Range Control - decoded from the bitstream but not processed further. | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct DynamicRangeControl { | |||||
| int pce_instance_tag; ///< Indicates with which program the DRC info is associated. | int pce_instance_tag; ///< Indicates with which program the DRC info is associated. | ||||
| int dyn_rng_sgn[17]; ///< DRC sign information; 0 - positive, 1 - negative | int dyn_rng_sgn[17]; ///< DRC sign information; 0 - positive, 1 - negative | ||||
| int dyn_rng_ctl[17]; ///< DRC magnitude information | int dyn_rng_ctl[17]; ///< DRC magnitude information | ||||
| @@ -202,7 +202,7 @@ typedef struct { | |||||
| */ | */ | ||||
| } DynamicRangeControl; | } DynamicRangeControl; | ||||
| typedef struct { | |||||
| typedef struct Pulse { | |||||
| int num_pulse; | int num_pulse; | ||||
| int start; | int start; | ||||
| int pos[4]; | int pos[4]; | ||||
| @@ -212,7 +212,7 @@ typedef struct { | |||||
| /** | /** | ||||
| * coupling parameters | * coupling parameters | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct ChannelCoupling { | |||||
| enum CouplingPoint coupling_point; ///< The point during decoding at which coupling is applied. | enum CouplingPoint coupling_point; ///< The point during decoding at which coupling is applied. | ||||
| int num_coupled; ///< number of target elements | int num_coupled; ///< number of target elements | ||||
| enum RawDataBlockType type[8]; ///< Type of channel element to be coupled - SCE or CPE. | enum RawDataBlockType type[8]; ///< Type of channel element to be coupled - SCE or CPE. | ||||
| @@ -226,7 +226,7 @@ typedef struct { | |||||
| /** | /** | ||||
| * Single Channel Element - used for both SCE and LFE elements. | * Single Channel Element - used for both SCE and LFE elements. | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct SingleChannelElement { | |||||
| IndividualChannelStream ics; | IndividualChannelStream ics; | ||||
| TemporalNoiseShaping tns; | TemporalNoiseShaping tns; | ||||
| Pulse pulse; | Pulse pulse; | ||||
| @@ -245,7 +245,7 @@ typedef struct { | |||||
| /** | /** | ||||
| * channel element - generic struct for SCE/CPE/CCE/LFE | * channel element - generic struct for SCE/CPE/CCE/LFE | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct ChannelElement { | |||||
| // CPE specific | // CPE specific | ||||
| int common_window; ///< Set if channels share a common 'IndividualChannelStream' in bitstream. | int common_window; ///< Set if channels share a common 'IndividualChannelStream' in bitstream. | ||||
| int ms_mode; ///< Signals mid/side stereo flags coding mode (used by encoder) | int ms_mode; ///< Signals mid/side stereo flags coding mode (used by encoder) | ||||
| @@ -260,7 +260,7 @@ typedef struct { | |||||
| /** | /** | ||||
| * main AAC context | * main AAC context | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct AACContext { | |||||
| AVCodecContext *avctx; | AVCodecContext *avctx; | ||||
| AVFrame frame; | AVFrame frame; | ||||
| @@ -28,7 +28,7 @@ | |||||
| #define AAC_ADTS_HEADER_SIZE 7 | #define AAC_ADTS_HEADER_SIZE 7 | ||||
| typedef struct { | |||||
| typedef struct AACADTSHeaderInfo { | |||||
| uint32_t sample_rate; | uint32_t sample_rate; | ||||
| uint32_t samples; | uint32_t samples; | ||||
| uint32_t bit_rate; | uint32_t bit_rate; | ||||
| @@ -38,7 +38,7 @@ | |||||
| #define PS_AP_LINKS 3 | #define PS_AP_LINKS 3 | ||||
| #define PS_MAX_AP_DELAY 5 | #define PS_MAX_AP_DELAY 5 | ||||
| typedef struct { | |||||
| typedef struct PSContext { | |||||
| int start; | int start; | ||||
| int enable_iid; | int enable_iid; | ||||
| int iid_quant; | int iid_quant; | ||||
| @@ -93,7 +93,7 @@ typedef struct AC3BitAllocParameters { | |||||
| * @struct AC3HeaderInfo | * @struct AC3HeaderInfo | ||||
| * Coded AC-3 header values up to the lfeon element, plus derived values. | * Coded AC-3 header values up to the lfeon element, plus derived values. | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct AC3HeaderInfo { | |||||
| /** @name Coded elements | /** @name Coded elements | ||||
| * @{ | * @{ | ||||
| */ | */ | ||||
| @@ -65,7 +65,7 @@ | |||||
| /** Large enough for maximum possible frame size when the specification limit is ignored */ | /** Large enough for maximum possible frame size when the specification limit is ignored */ | ||||
| #define AC3_FRAME_BUFFER_SIZE 32768 | #define AC3_FRAME_BUFFER_SIZE 32768 | ||||
| typedef struct { | |||||
| typedef struct AC3DecodeContext { | |||||
| AVClass *class; ///< class for AVOptions | AVClass *class; ///< class for AVOptions | ||||
| AVCodecContext *avctx; ///< parent context | AVCodecContext *avctx; ///< parent context | ||||
| AVFrame frame; ///< AVFrame for decoded output | AVFrame frame; ///< AVFrame for decoded output | ||||
| @@ -50,7 +50,7 @@ void ff_acelp_vectors_init(ACELPVContext *c); | |||||
| void ff_acelp_vectors_init_mips(ACELPVContext *c); | void ff_acelp_vectors_init_mips(ACELPVContext *c); | ||||
| /** Sparse representation for the algebraic codebook (fixed) vector */ | /** Sparse representation for the algebraic codebook (fixed) vector */ | ||||
| typedef struct { | |||||
| typedef struct AMRFixed { | |||||
| int n; | int n; | ||||
| int x[10]; | int x[10]; | ||||
| float y[10]; | float y[10]; | ||||
| @@ -35,11 +35,11 @@ | |||||
| #include "avcodec.h" | #include "avcodec.h" | ||||
| typedef struct { | |||||
| typedef struct ADXChannelState { | |||||
| int s1,s2; | int s1,s2; | ||||
| } ADXChannelState; | } ADXChannelState; | ||||
| typedef struct { | |||||
| typedef struct ADXContext { | |||||
| AVFrame frame; | AVFrame frame; | ||||
| int channels; | int channels; | ||||
| ADXChannelState prev[2]; | ADXChannelState prev[2]; | ||||
| @@ -55,7 +55,7 @@ enum Mode { | |||||
| /** | /** | ||||
| * AMRNB unpacked data subframe | * AMRNB unpacked data subframe | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct AMRNBSubframe { | |||||
| uint16_t p_lag; ///< index to decode the pitch lag | uint16_t p_lag; ///< index to decode the pitch lag | ||||
| uint16_t p_gain; ///< index to decode the pitch gain | uint16_t p_gain; ///< index to decode the pitch gain | ||||
| uint16_t fixed_gain; ///< index to decode the fixed gain factor, for MODE_12k2 and MODE_7k95 | uint16_t fixed_gain; ///< index to decode the fixed gain factor, for MODE_12k2 and MODE_7k95 | ||||
| @@ -65,7 +65,7 @@ typedef struct { | |||||
| /** | /** | ||||
| * AMRNB unpacked data frame | * AMRNB unpacked data frame | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct AMRNBFrame { | |||||
| uint16_t lsf[5]; ///< lsf parameters: 5 parameters for MODE_12k2, only 3 for other modes | uint16_t lsf[5]; ///< lsf parameters: 5 parameters for MODE_12k2, only 3 for other modes | ||||
| AMRNBSubframe subframe[4]; ///< unpacked data for each subframe | AMRNBSubframe subframe[4]; ///< unpacked data for each subframe | ||||
| } AMRNBFrame; | } AMRNBFrame; | ||||
| @@ -66,7 +66,7 @@ enum Mode { | |||||
| /* All decoded parameters in these structs must be 2 bytes long | /* All decoded parameters in these structs must be 2 bytes long | ||||
| * because of the direct indexing at the frame parsing */ | * because of the direct indexing at the frame parsing */ | ||||
| typedef struct { | |||||
| typedef struct AMRWBSubFrame { | |||||
| uint16_t adap; ///< adaptive codebook index | uint16_t adap; ///< adaptive codebook index | ||||
| uint16_t ltp; ///< ltp-filtering flag | uint16_t ltp; ///< ltp-filtering flag | ||||
| uint16_t vq_gain; ///< VQ adaptive and innovative gains | uint16_t vq_gain; ///< VQ adaptive and innovative gains | ||||
| @@ -75,7 +75,7 @@ typedef struct { | |||||
| uint16_t pul_il[4]; ///< LSBs part of codebook index | uint16_t pul_il[4]; ///< LSBs part of codebook index | ||||
| } AMRWBSubFrame; | } AMRWBSubFrame; | ||||
| typedef struct { | |||||
| typedef struct AMRWBFrame { | |||||
| uint16_t vad; ///< voice activity detection flag | uint16_t vad; ///< voice activity detection flag | ||||
| uint16_t isp_id[7]; ///< index of ISP subvectors | uint16_t isp_id[7]; ///< index of ISP subvectors | ||||
| AMRWBSubFrame subframe[4]; ///< data for subframes | AMRWBSubFrame subframe[4]; ///< data for subframes | ||||
| @@ -4323,9 +4323,11 @@ int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, | |||||
| * @} | * @} | ||||
| */ | */ | ||||
| #if FF_API_AVCODEC_RESAMPLE | |||||
| /** | /** | ||||
| * @defgroup lavc_resample Audio resampling | * @defgroup lavc_resample Audio resampling | ||||
| * @ingroup libavc | * @ingroup libavc | ||||
| * @deprecated use libswresample instead | |||||
| * | * | ||||
| * @{ | * @{ | ||||
| */ | */ | ||||
| @@ -4350,6 +4352,7 @@ typedef struct ReSampleContext ReSampleContext; | |||||
| * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate | * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate | ||||
| * @return allocated ReSampleContext, NULL if error occurred | * @return allocated ReSampleContext, NULL if error occurred | ||||
| */ | */ | ||||
| attribute_deprecated | |||||
| ReSampleContext *av_audio_resample_init(int output_channels, int input_channels, | ReSampleContext *av_audio_resample_init(int output_channels, int input_channels, | ||||
| int output_rate, int input_rate, | int output_rate, int input_rate, | ||||
| enum AVSampleFormat sample_fmt_out, | enum AVSampleFormat sample_fmt_out, | ||||
| @@ -4357,6 +4360,7 @@ ReSampleContext *av_audio_resample_init(int output_channels, int input_channels, | |||||
| int filter_length, int log2_phase_count, | int filter_length, int log2_phase_count, | ||||
| int linear, double cutoff); | int linear, double cutoff); | ||||
| attribute_deprecated | |||||
| int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples); | int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples); | ||||
| /** | /** | ||||
| @@ -4365,6 +4369,7 @@ int audio_resample(ReSampleContext *s, short *output, short *input, int nb_sampl | |||||
| * @param s a non-NULL pointer to a resample context previously | * @param s a non-NULL pointer to a resample context previously | ||||
| * created with av_audio_resample_init() | * created with av_audio_resample_init() | ||||
| */ | */ | ||||
| attribute_deprecated | |||||
| void audio_resample_close(ReSampleContext *s); | void audio_resample_close(ReSampleContext *s); | ||||
| @@ -4377,6 +4382,7 @@ void audio_resample_close(ReSampleContext *s); | |||||
| between the 2 closest, if 0 the closest will be used | between the 2 closest, if 0 the closest will be used | ||||
| * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate | * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate | ||||
| */ | */ | ||||
| attribute_deprecated | |||||
| struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff); | struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff); | ||||
| /** | /** | ||||
| @@ -4388,6 +4394,7 @@ struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter | |||||
| * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context. | * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context. | ||||
| * @return the number of samples written in dst or -1 if an error occurred | * @return the number of samples written in dst or -1 if an error occurred | ||||
| */ | */ | ||||
| attribute_deprecated | |||||
| int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx); | int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx); | ||||
| @@ -4403,12 +4410,15 @@ int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consum | |||||
| * note, due to rounding the actual compensation might be slightly different, | * note, due to rounding the actual compensation might be slightly different, | ||||
| * especially if the compensation_distance is large and the in_rate used during init is small | * especially if the compensation_distance is large and the in_rate used during init is small | ||||
| */ | */ | ||||
| attribute_deprecated | |||||
| void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance); | void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance); | ||||
| attribute_deprecated | |||||
| void av_resample_close(struct AVResampleContext *c); | void av_resample_close(struct AVResampleContext *c); | ||||
| /** | /** | ||||
| * @} | * @} | ||||
| */ | */ | ||||
| #endif | |||||
| /** | /** | ||||
| * @addtogroup lavc_picture | * @addtogroup lavc_picture | ||||
| @@ -29,11 +29,11 @@ | |||||
| #include "libavutil/common.h" | #include "libavutil/common.h" | ||||
| #include "libavutil/intreadwrite.h" | #include "libavutil/intreadwrite.h" | ||||
| typedef struct { | |||||
| typedef struct GetByteContext { | |||||
| const uint8_t *buffer, *buffer_end, *buffer_start; | const uint8_t *buffer, *buffer_end, *buffer_start; | ||||
| } GetByteContext; | } GetByteContext; | ||||
| typedef struct { | |||||
| typedef struct PutByteContext { | |||||
| uint8_t *buffer, *buffer_end, *buffer_start; | uint8_t *buffer, *buffer_end, *buffer_start; | ||||
| int eof; | int eof; | ||||
| } PutByteContext; | } PutByteContext; | ||||
| @@ -152,7 +152,7 @@ struct dec_2dvlc { | |||||
| int8_t max_run; | int8_t max_run; | ||||
| }; | }; | ||||
| typedef struct { | |||||
| typedef struct AVSContext { | |||||
| MpegEncContext s; | MpegEncContext s; | ||||
| CAVSDSPContext cdsp; | CAVSDSPContext cdsp; | ||||
| Picture picture; ///< currently decoded frame | Picture picture; ///< currently decoded frame | ||||
| @@ -34,7 +34,7 @@ | |||||
| #include "avcodec.h" | #include "avcodec.h" | ||||
| #include "get_bits.h" | #include "get_bits.h" | ||||
| typedef struct { | |||||
| typedef struct dirac_source_params { | |||||
| unsigned width; | unsigned width; | ||||
| unsigned height; | unsigned height; | ||||
| uint8_t chroma_format; ///< 0: 444 1: 422 2: 420 | uint8_t chroma_format; ///< 0: 444 1: 422 2: 420 | ||||
| @@ -25,7 +25,7 @@ | |||||
| #include <stdint.h> | #include <stdint.h> | ||||
| #include "avcodec.h" | #include "avcodec.h" | ||||
| typedef struct { | |||||
| typedef struct CIDEntry { | |||||
| int cid; | int cid; | ||||
| unsigned int width, height; | unsigned int width, height; | ||||
| int interlaced; | int interlaced; | ||||
| @@ -29,12 +29,12 @@ | |||||
| #include "mpegvideo.h" | #include "mpegvideo.h" | ||||
| #include "dnxhddata.h" | #include "dnxhddata.h" | ||||
| typedef struct { | |||||
| typedef struct RCCMPEntry { | |||||
| uint16_t mb; | uint16_t mb; | ||||
| int value; | int value; | ||||
| } RCCMPEntry; | } RCCMPEntry; | ||||
| typedef struct { | |||||
| typedef struct RCEntry { | |||||
| int ssd; | int ssd; | ||||
| int bits; | int bits; | ||||
| } RCEntry; | } RCEntry; | ||||
| @@ -29,7 +29,7 @@ typedef short IDWTELEM; | |||||
| #define MAX_DWT_SUPPORT 8 | #define MAX_DWT_SUPPORT 8 | ||||
| #define MAX_DECOMPOSITIONS 8 | #define MAX_DECOMPOSITIONS 8 | ||||
| typedef struct { | |||||
| typedef struct DWTCompose { | |||||
| IDWTELEM *b[MAX_DWT_SUPPORT]; | IDWTELEM *b[MAX_DWT_SUPPORT]; | ||||
| IDWTELEM *b0; | IDWTELEM *b0; | ||||
| @@ -30,7 +30,7 @@ | |||||
| #define PREV_SAMPLES_BUF_SIZE 1024 | #define PREV_SAMPLES_BUF_SIZE 1024 | ||||
| typedef struct { | |||||
| typedef struct G722Context { | |||||
| const AVClass *class; | const AVClass *class; | ||||
| AVFrame frame; | AVFrame frame; | ||||
| int bits_per_codeword; | int bits_per_codeword; | ||||
| @@ -25,7 +25,7 @@ | |||||
| #include <stdint.h> | #include <stdint.h> | ||||
| #include "avcodec.h" | #include "avcodec.h" | ||||
| typedef struct { | |||||
| typedef struct GSMContext { | |||||
| AVFrame frame; | AVFrame frame; | ||||
| // Contains first 120 elements from the previous frame | // Contains first 120 elements from the previous frame | ||||
| // (used by long_term_synth according to the "lag"), | // (used by long_term_synth according to the "lag"), | ||||
| @@ -29,7 +29,7 @@ | |||||
| #include "avcodec.h" | #include "avcodec.h" | ||||
| #include "get_bits.h" | #include "get_bits.h" | ||||
| typedef struct { | |||||
| typedef struct Node { | |||||
| int16_t sym; | int16_t sym; | ||||
| int16_t n0; | int16_t n0; | ||||
| uint32_t count; | uint32_t count; | ||||
| @@ -320,7 +320,7 @@ static const int32_t delta_tab_3_4_m10[79] = { TAB_3_4 }; | |||||
| static const int32_t delta_tab_3_5_m10[79] = { TAB_3_5 }; | static const int32_t delta_tab_3_5_m10[79] = { TAB_3_5 }; | ||||
| typedef struct { | |||||
| typedef struct vqEntry { | |||||
| const int16_t *deltas; ///< delta tables for 4x4 block modes | const int16_t *deltas; ///< delta tables for 4x4 block modes | ||||
| const int32_t *deltas_m10; ///< delta tables for 8x8 block modes | const int32_t *deltas_m10; ///< delta tables for 8x8 block modes | ||||
| uint8_t num_dyads; ///< number of two-pixel deltas | uint8_t num_dyads; ///< number of two-pixel deltas | ||||
| @@ -23,7 +23,7 @@ | |||||
| #include "mpegvideo.h" | #include "mpegvideo.h" | ||||
| #include "intrax8dsp.h" | #include "intrax8dsp.h" | ||||
| typedef struct{ | |||||
| typedef struct IntraX8Context { | |||||
| VLC * j_ac_vlc[4];//they point to the static j_mb_vlc | VLC * j_ac_vlc[4];//they point to the static j_mb_vlc | ||||
| VLC * j_orient_vlc; | VLC * j_orient_vlc; | ||||
| VLC * j_dc_vlc[3]; | VLC * j_dc_vlc[3]; | ||||
| @@ -40,7 +40,7 @@ | |||||
| /** | /** | ||||
| * huffman codebook descriptor | * huffman codebook descriptor | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct IVIHuffDesc { | |||||
| int32_t num_rows; | int32_t num_rows; | ||||
| uint8_t xbits[16]; | uint8_t xbits[16]; | ||||
| } IVIHuffDesc; | } IVIHuffDesc; | ||||
| @@ -48,7 +48,7 @@ typedef struct { | |||||
| /** | /** | ||||
| * macroblock/block huffman table descriptor | * macroblock/block huffman table descriptor | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct IVIHuffTab { | |||||
| int32_t tab_sel; /// index of one of the predefined tables | int32_t tab_sel; /// index of one of the predefined tables | ||||
| /// or "7" for custom one | /// or "7" for custom one | ||||
| VLC *tab; /// pointer to the table associated with tab_sel | VLC *tab; /// pointer to the table associated with tab_sel | ||||
| @@ -85,7 +85,7 @@ typedef void (DCTransformPtr) (const int32_t *in, int16_t *out, uint32_t pitch, | |||||
| /** | /** | ||||
| * run-value (RLE) table descriptor | * run-value (RLE) table descriptor | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct RVMapDesc { | |||||
| uint8_t eob_sym; ///< end of block symbol | uint8_t eob_sym; ///< end of block symbol | ||||
| uint8_t esc_sym; ///< escape symbol | uint8_t esc_sym; ///< escape symbol | ||||
| uint8_t runtab[256]; | uint8_t runtab[256]; | ||||
| @@ -98,7 +98,7 @@ extern const RVMapDesc ff_ivi_rvmap_tabs[9]; | |||||
| /** | /** | ||||
| * information for Indeo macroblock (16x16, 8x8 or 4x4) | * information for Indeo macroblock (16x16, 8x8 or 4x4) | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct IVIMbInfo { | |||||
| int16_t xpos; | int16_t xpos; | ||||
| int16_t ypos; | int16_t ypos; | ||||
| uint32_t buf_offs; ///< address in the output buffer for this mb | uint32_t buf_offs; ///< address in the output buffer for this mb | ||||
| @@ -113,7 +113,7 @@ typedef struct { | |||||
| /** | /** | ||||
| * information for Indeo tile | * information for Indeo tile | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct IVITile { | |||||
| int xpos; | int xpos; | ||||
| int ypos; | int ypos; | ||||
| int width; | int width; | ||||
| @@ -130,7 +130,7 @@ typedef struct { | |||||
| /** | /** | ||||
| * information for Indeo wavelet band | * information for Indeo wavelet band | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct IVIBandDesc { | |||||
| int plane; ///< plane number this band belongs to | int plane; ///< plane number this band belongs to | ||||
| int band_num; ///< band number | int band_num; ///< band number | ||||
| int width; | int width; | ||||
| @@ -178,7 +178,7 @@ typedef struct { | |||||
| /** | /** | ||||
| * color plane (luma or chroma) information | * color plane (luma or chroma) information | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct IVIPlaneDesc { | |||||
| uint16_t width; | uint16_t width; | ||||
| uint16_t height; | uint16_t height; | ||||
| uint8_t num_bands; ///< number of bands this plane subdivided into | uint8_t num_bands; ///< number of bands this plane subdivided into | ||||
| @@ -186,7 +186,7 @@ typedef struct { | |||||
| } IVIPlaneDesc; | } IVIPlaneDesc; | ||||
| typedef struct { | |||||
| typedef struct IVIPicConfig { | |||||
| uint16_t pic_width; | uint16_t pic_width; | ||||
| uint16_t pic_height; | uint16_t pic_height; | ||||
| uint16_t chroma_width; | uint16_t chroma_width; | ||||
| @@ -31,7 +31,7 @@ | |||||
| #include "avcodec.h" | #include "avcodec.h" | ||||
| typedef struct { | |||||
| typedef struct SchroVideoFormatInfo { | |||||
| uint16_t width; | uint16_t width; | ||||
| uint16_t height; | uint16_t height; | ||||
| uint16_t frame_rate_num; | uint16_t frame_rate_num; | ||||
| @@ -219,7 +219,7 @@ static av_cold int encode_init(AVCodecContext *avctx) | |||||
| /* Activiting Discontinuous Transmission */ | /* Activiting Discontinuous Transmission */ | ||||
| if (s->dtx) { | if (s->dtx) { | ||||
| speex_encoder_ctl(s->enc_state, SPEEX_SET_DTX, &s->dtx); | speex_encoder_ctl(s->enc_state, SPEEX_SET_DTX, &s->dtx); | ||||
| if ( !(s->abr || s->vad || s->header.vbr)) | |||||
| if (!(s->abr || s->vad || s->header.vbr)) | |||||
| av_log(avctx, AV_LOG_WARNING, "DTX is not much of use without ABR, VAD or VBR\n"); | av_log(avctx, AV_LOG_WARNING, "DTX is not much of use without ABR, VAD or VBR\n"); | ||||
| } | } | ||||
| @@ -71,7 +71,7 @@ | |||||
| #define IIR 1 | #define IIR 1 | ||||
| /** filter data */ | /** filter data */ | ||||
| typedef struct { | |||||
| typedef struct FilterParams { | |||||
| uint8_t order; ///< number of taps in filter | uint8_t order; ///< number of taps in filter | ||||
| uint8_t shift; ///< Right shift to apply to output of filter. | uint8_t shift; ///< Right shift to apply to output of filter. | ||||
| @@ -79,7 +79,7 @@ typedef struct { | |||||
| } FilterParams; | } FilterParams; | ||||
| /** sample data coding information */ | /** sample data coding information */ | ||||
| typedef struct { | |||||
| typedef struct ChannelParams { | |||||
| FilterParams filter_params[NUM_FILTERS]; | FilterParams filter_params[NUM_FILTERS]; | ||||
| int32_t coeff[NUM_FILTERS][MAX_FIR_ORDER]; | int32_t coeff[NUM_FILTERS][MAX_FIR_ORDER]; | ||||
| @@ -41,7 +41,7 @@ | |||||
| #define MPC_FRAME_SIZE (BANDS * SAMPLES_PER_BAND) | #define MPC_FRAME_SIZE (BANDS * SAMPLES_PER_BAND) | ||||
| /** Subband structure - hold all variables for each subband */ | /** Subband structure - hold all variables for each subband */ | ||||
| typedef struct { | |||||
| typedef struct Band { | |||||
| int msf; ///< mid-stereo flag | int msf; ///< mid-stereo flag | ||||
| int res[2]; | int res[2]; | ||||
| int scfi[2]; | int scfi[2]; | ||||
| @@ -49,7 +49,7 @@ typedef struct { | |||||
| int Q[2]; | int Q[2]; | ||||
| }Band; | }Band; | ||||
| typedef struct { | |||||
| typedef struct MPCContext { | |||||
| AVFrame frame; | AVFrame frame; | ||||
| DSPContext dsp; | DSPContext dsp; | ||||
| MPADSPContext mpadsp; | MPADSPContext mpadsp; | ||||
| @@ -26,7 +26,7 @@ | |||||
| #include "get_bits.h" | #include "get_bits.h" | ||||
| #include "put_bits.h" | #include "put_bits.h" | ||||
| typedef struct { | |||||
| typedef struct MPEG4AudioConfig { | |||||
| int object_type; | int object_type; | ||||
| int sampling_index; | int sampling_index; | ||||
| int sample_rate; | int sample_rate; | ||||
| @@ -83,6 +83,22 @@ static void float_to_int16_altivec(int16_t *dst, const float *src, long len) | |||||
| } | } | ||||
| } | } | ||||
| static void float_to_int16_stride_altivec(int16_t *dst, const float *src, | |||||
| long len, int stride) | |||||
| { | |||||
| int i, j; | |||||
| vector signed short d, s; | |||||
| for (i = 0; i < len - 7; i += 8) { | |||||
| d = float_to_int16_one_altivec(src + i); | |||||
| for (j = 0; j < 8; j++) { | |||||
| s = vec_splat(d, j); | |||||
| vec_ste(s, 0, dst); | |||||
| dst += stride; | |||||
| } | |||||
| } | |||||
| } | |||||
| static void float_to_int16_interleave_altivec(int16_t *dst, const float **src, | static void float_to_int16_interleave_altivec(int16_t *dst, const float **src, | ||||
| long len, int channels) | long len, int channels) | ||||
| { | { | ||||
| @@ -124,13 +140,8 @@ static void float_to_int16_interleave_altivec(int16_t *dst, const float **src, | |||||
| } | } | ||||
| } | } | ||||
| } else { | } else { | ||||
| DECLARE_ALIGNED(16, int16_t, tmp)[len]; | |||||
| int c, j; | |||||
| for (c = 0; c < channels; c++) { | |||||
| float_to_int16_altivec(tmp, src[c], len); | |||||
| for (i = 0, j = c; i < len; i++, j+=channels) | |||||
| dst[j] = tmp[i]; | |||||
| } | |||||
| for (i = 0; i < channels; i++) | |||||
| float_to_int16_stride_altivec(dst + i, src[i], len, channels); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -27,7 +27,7 @@ | |||||
| #define PRORES_BITS_PER_SAMPLE 10 ///< output precision of prores decoder | #define PRORES_BITS_PER_SAMPLE 10 ///< output precision of prores decoder | ||||
| typedef struct { | |||||
| typedef struct ProresDSPContext { | |||||
| int idct_permutation_type; | int idct_permutation_type; | ||||
| uint8_t idct_permutation[64]; | uint8_t idct_permutation[64]; | ||||
| int dct_permutation_type; | int dct_permutation_type; | ||||
| @@ -37,7 +37,7 @@ | |||||
| /** | /** | ||||
| * QCELP unpacked data frame | * QCELP unpacked data frame | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct QCELPFrame { | |||||
| /// @name QCELP excitation codebook parameters | /// @name QCELP excitation codebook parameters | ||||
| /// @{ | /// @{ | ||||
| uint8_t cbsign[16]; ///< sign of the codebook gain for each codebook subframe | uint8_t cbsign[16]; ///< sign of the codebook gain for each codebook subframe | ||||
| @@ -73,7 +73,7 @@ typedef struct { | |||||
| */ | */ | ||||
| static const float qcelp_hammsinc_table[4] = { -0.006822, 0.041249, -0.143459, 0.588863}; | static const float qcelp_hammsinc_table[4] = { -0.006822, 0.041249, -0.143459, 0.588863}; | ||||
| typedef struct { | |||||
| typedef struct QCELPBitmap { | |||||
| uint8_t index; /**< index into the QCELPContext structure */ | uint8_t index; /**< index into the QCELPContext structure */ | ||||
| uint8_t bitpos; /**< position of the lowest bit in the value's byte */ | uint8_t bitpos; /**< position of the lowest bit in the value's byte */ | ||||
| uint8_t bitlen; /**< number of bits to read */ | uint8_t bitlen; /**< number of bits to read */ | ||||
| @@ -33,7 +33,7 @@ | |||||
| #define FRAMESIZE 20 ///< size of encoded frame | #define FRAMESIZE 20 ///< size of encoded frame | ||||
| #define LPC_ORDER 10 ///< order of LPC filter | #define LPC_ORDER 10 ///< order of LPC filter | ||||
| typedef struct { | |||||
| typedef struct RA144Context { | |||||
| AVCodecContext *avctx; | AVCodecContext *avctx; | ||||
| AVFrame frame; | AVFrame frame; | ||||
| LPCContext lpc_ctx; | LPCContext lpc_ctx; | ||||
| @@ -32,6 +32,8 @@ | |||||
| #include "libavutil/mem.h" | #include "libavutil/mem.h" | ||||
| #include "libavutil/samplefmt.h" | #include "libavutil/samplefmt.h" | ||||
| #if FF_API_AVCODEC_RESAMPLE | |||||
| #define MAX_CHANNELS 8 | #define MAX_CHANNELS 8 | ||||
| struct AVResampleContext; | struct AVResampleContext; | ||||
| @@ -429,3 +431,5 @@ void audio_resample_close(ReSampleContext *s) | |||||
| av_audio_convert_free(s->convert_ctx[1]); | av_audio_convert_free(s->convert_ctx[1]); | ||||
| av_free(s); | av_free(s); | ||||
| } | } | ||||
| #endif | |||||
| @@ -30,6 +30,8 @@ | |||||
| #include "dsputil.h" | #include "dsputil.h" | ||||
| #include "libavutil/common.h" | #include "libavutil/common.h" | ||||
| #if FF_API_AVCODEC_RESAMPLE | |||||
| #ifndef CONFIG_RESAMPLE_HP | #ifndef CONFIG_RESAMPLE_HP | ||||
| #define FILTER_SHIFT 15 | #define FILTER_SHIFT 15 | ||||
| @@ -321,3 +323,5 @@ av_log(NULL, AV_LOG_DEBUG, "%d %d %d\n", c->dst_incr, c->ideal_dst_incr, c->comp | |||||
| return dst_index; | return dst_index; | ||||
| } | } | ||||
| #endif | |||||
| @@ -27,16 +27,16 @@ | |||||
| #include "bytestream.h" | #include "bytestream.h" | ||||
| #include "dsputil.h" | #include "dsputil.h" | ||||
| typedef struct { | |||||
| typedef struct roq_cell { | |||||
| unsigned char y[4]; | unsigned char y[4]; | ||||
| unsigned char u, v; | unsigned char u, v; | ||||
| } roq_cell; | } roq_cell; | ||||
| typedef struct { | |||||
| typedef struct roq_qcell { | |||||
| int idx[4]; | int idx[4]; | ||||
| } roq_qcell; | } roq_qcell; | ||||
| typedef struct { | |||||
| typedef struct motion_vect { | |||||
| int d[2]; | int d[2]; | ||||
| } motion_vect; | } motion_vect; | ||||
| @@ -29,7 +29,7 @@ | |||||
| #define RTJPEG_FILE_VERSION 0 | #define RTJPEG_FILE_VERSION 0 | ||||
| #define RTJPEG_HEADER_SIZE 12 | #define RTJPEG_HEADER_SIZE 12 | ||||
| typedef struct { | |||||
| typedef struct RTJpegContext { | |||||
| int w, h; | int w, h; | ||||
| DSPContext *dsp; | DSPContext *dsp; | ||||
| uint8_t scan[64]; | uint8_t scan[64]; | ||||
| @@ -37,7 +37,7 @@ | |||||
| /** | /** | ||||
| * Spectral Band Replication header - spectrum parameters that invoke a reset if they differ from the previous header. | * Spectral Band Replication header - spectrum parameters that invoke a reset if they differ from the previous header. | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct SpectrumParameters { | |||||
| uint8_t bs_start_freq; | uint8_t bs_start_freq; | ||||
| uint8_t bs_stop_freq; | uint8_t bs_stop_freq; | ||||
| uint8_t bs_xover_band; | uint8_t bs_xover_band; | ||||
| @@ -57,7 +57,7 @@ typedef struct { | |||||
| /** | /** | ||||
| * Spectral Band Replication per channel data | * Spectral Band Replication per channel data | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct SBRData { | |||||
| /** | /** | ||||
| * @name Main bitstream data variables | * @name Main bitstream data variables | ||||
| * @{ | * @{ | ||||
| @@ -111,7 +111,7 @@ typedef struct { | |||||
| /** | /** | ||||
| * Spectral Band Replication | * Spectral Band Replication | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct SpectralBandReplication { | |||||
| int sample_rate; | int sample_rate; | ||||
| int start; | int start; | ||||
| int reset; | int reset; | ||||
| @@ -94,5 +94,8 @@ | |||||
| #ifndef FF_API_VDA_ASYNC | #ifndef FF_API_VDA_ASYNC | ||||
| #define FF_API_VDA_ASYNC (LIBAVCODEC_VERSION_MAJOR < 55) | #define FF_API_VDA_ASYNC (LIBAVCODEC_VERSION_MAJOR < 55) | ||||
| #endif | #endif | ||||
| #ifndef FF_API_AVCODEC_RESAMPLE | |||||
| #define FF_API_AVCODEC_RESAMPLE (LIBAVCODEC_VERSION_MAJOR < 55) | |||||
| #endif | |||||
| #endif /* AVCODEC_VERSION_H */ | #endif /* AVCODEC_VERSION_H */ | ||||
| @@ -29,7 +29,7 @@ extern const uint8_t ff_vorbis_channel_layout_offsets[8][8]; | |||||
| extern const uint8_t ff_vorbis_encoding_channel_layout_offsets[8][8]; | extern const uint8_t ff_vorbis_encoding_channel_layout_offsets[8][8]; | ||||
| extern const uint64_t ff_vorbis_channel_layouts[9]; | extern const uint64_t ff_vorbis_channel_layouts[9]; | ||||
| typedef struct { | |||||
| typedef struct vorbis_floor1_entry { | |||||
| uint16_t x; | uint16_t x; | ||||
| uint16_t sort; | uint16_t sort; | ||||
| uint16_t low; | uint16_t low; | ||||
| @@ -35,7 +35,7 @@ | |||||
| typedef struct vp56_context VP56Context; | typedef struct vp56_context VP56Context; | ||||
| typedef struct { | |||||
| typedef struct VP56mv { | |||||
| DECLARE_ALIGNED(4, int16_t, x); | DECLARE_ALIGNED(4, int16_t, x); | ||||
| int16_t y; | int16_t y; | ||||
| } VP56mv; | } VP56mv; | ||||
| @@ -52,7 +52,7 @@ typedef int (*VP56ParseCoeffModels)(VP56Context *s); | |||||
| typedef int (*VP56ParseHeader)(VP56Context *s, const uint8_t *buf, | typedef int (*VP56ParseHeader)(VP56Context *s, const uint8_t *buf, | ||||
| int buf_size); | int buf_size); | ||||
| typedef struct { | |||||
| typedef struct VP56RangeCoder { | |||||
| int high; | int high; | ||||
| int bits; /* stored negated (i.e. negative "bits" is a positive number of | int bits; /* stored negated (i.e. negative "bits" is a positive number of | ||||
| bits left) in order to eliminate a negate in cache refilling */ | bits left) in order to eliminate a negate in cache refilling */ | ||||
| @@ -61,18 +61,18 @@ typedef struct { | |||||
| unsigned int code_word; | unsigned int code_word; | ||||
| } VP56RangeCoder; | } VP56RangeCoder; | ||||
| typedef struct { | |||||
| typedef struct VP56RefDc { | |||||
| uint8_t not_null_dc; | uint8_t not_null_dc; | ||||
| VP56Frame ref_frame; | VP56Frame ref_frame; | ||||
| DCTELEM dc_coeff; | DCTELEM dc_coeff; | ||||
| } VP56RefDc; | } VP56RefDc; | ||||
| typedef struct { | |||||
| typedef struct VP56Macroblock { | |||||
| uint8_t type; | uint8_t type; | ||||
| VP56mv mv; | VP56mv mv; | ||||
| } VP56Macroblock; | } VP56Macroblock; | ||||
| typedef struct { | |||||
| typedef struct VP56Model { | |||||
| uint8_t coeff_reorder[64]; /* used in vp6 only */ | uint8_t coeff_reorder[64]; /* used in vp6 only */ | ||||
| uint8_t coeff_index_to_pos[64]; /* used in vp6 only */ | uint8_t coeff_index_to_pos[64]; /* used in vp6 only */ | ||||
| uint8_t vector_sig[2]; /* delta sign */ | uint8_t vector_sig[2]; /* delta sign */ | ||||
| @@ -51,7 +51,7 @@ typedef enum { | |||||
| VP56_MB_INTER_V2_GF = 9, /**< Inter MB, second vector, from golden frame */ | VP56_MB_INTER_V2_GF = 9, /**< Inter MB, second vector, from golden frame */ | ||||
| } VP56mb; | } VP56mb; | ||||
| typedef struct { | |||||
| typedef struct VP56Tree { | |||||
| int8_t val; | int8_t val; | ||||
| int8_t prob_idx; | int8_t prob_idx; | ||||
| } VP56Tree; | } VP56Tree; | ||||
| @@ -72,13 +72,13 @@ enum inter_splitmvmode { | |||||
| VP8_SPLITMVMODE_NONE, ///< (only used in prediction) no split MVs | VP8_SPLITMVMODE_NONE, ///< (only used in prediction) no split MVs | ||||
| }; | }; | ||||
| typedef struct { | |||||
| typedef struct VP8FilterStrength { | |||||
| uint8_t filter_level; | uint8_t filter_level; | ||||
| uint8_t inner_limit; | uint8_t inner_limit; | ||||
| uint8_t inner_filter; | uint8_t inner_filter; | ||||
| } VP8FilterStrength; | } VP8FilterStrength; | ||||
| typedef struct { | |||||
| typedef struct VP8Macroblock { | |||||
| uint8_t skip; | uint8_t skip; | ||||
| // todo: make it possible to check for at least (i4x4 or split_mv) | // todo: make it possible to check for at least (i4x4 or split_mv) | ||||
| // in one op. are others needed? | // in one op. are others needed? | ||||
| @@ -93,7 +93,7 @@ typedef struct { | |||||
| VP56mv bmv[16]; | VP56mv bmv[16]; | ||||
| } VP8Macroblock; | } VP8Macroblock; | ||||
| typedef struct { | |||||
| typedef struct VP8ThreadData { | |||||
| DECLARE_ALIGNED(16, DCTELEM, block)[6][4][16]; | DECLARE_ALIGNED(16, DCTELEM, block)[6][4][16]; | ||||
| DECLARE_ALIGNED(16, DCTELEM, block_dc)[16]; | DECLARE_ALIGNED(16, DCTELEM, block_dc)[16]; | ||||
| /** | /** | ||||
| @@ -123,7 +123,7 @@ typedef struct { | |||||
| } VP8ThreadData; | } VP8ThreadData; | ||||
| #define MAX_THREADS 8 | #define MAX_THREADS 8 | ||||
| typedef struct { | |||||
| typedef struct VP8Context { | |||||
| VP8ThreadData *thread_data; | VP8ThreadData *thread_data; | ||||
| AVCodecContext *avctx; | AVCodecContext *avctx; | ||||
| AVFrame *framep[4]; | AVFrame *framep[4]; | ||||
| @@ -43,7 +43,7 @@ | |||||
| #include "libavutil/internal.h" | #include "libavutil/internal.h" | ||||
| #include "libavutil/mem.h" | #include "libavutil/mem.h" | ||||
| typedef struct { | |||||
| typedef struct pthread_t { | |||||
| void *handle; | void *handle; | ||||
| void *(*func)(void* arg); | void *(*func)(void* arg); | ||||
| void *arg; | void *arg; | ||||
| @@ -57,7 +57,7 @@ typedef CRITICAL_SECTION pthread_mutex_t; | |||||
| /* This is the CONDITIONAL_VARIABLE typedef for using Window's native | /* This is the CONDITIONAL_VARIABLE typedef for using Window's native | ||||
| * conditional variables on kernels 6.0+. | * conditional variables on kernels 6.0+. | ||||
| * MinGW does not currently have this typedef. */ | * MinGW does not currently have this typedef. */ | ||||
| typedef struct { | |||||
| typedef struct pthread_cond_t { | |||||
| void *ptr; | void *ptr; | ||||
| } pthread_cond_t; | } pthread_cond_t; | ||||
| @@ -118,7 +118,7 @@ static inline int pthread_mutex_unlock(pthread_mutex_t *m) | |||||
| /* for pre-Windows 6.0 platforms we need to define and use our own condition | /* for pre-Windows 6.0 platforms we need to define and use our own condition | ||||
| * variable and api */ | * variable and api */ | ||||
| typedef struct { | |||||
| typedef struct win32_cond_t { | |||||
| pthread_mutex_t mtx_broadcast; | pthread_mutex_t mtx_broadcast; | ||||
| pthread_mutex_t mtx_waiter_count; | pthread_mutex_t mtx_waiter_count; | ||||
| volatile int waiter_count; | volatile int waiter_count; | ||||
| @@ -1929,15 +1929,10 @@ static av_noinline void emulated_edge_mc_sse(uint8_t *buf, const uint8_t *src, | |||||
| #if HAVE_INLINE_ASM | #if HAVE_INLINE_ASM | ||||
| typedef void emulated_edge_mc_func(uint8_t *dst, const uint8_t *src, | |||||
| int linesize, int block_w, int block_h, | |||||
| int src_x, int src_y, int w, int h); | |||||
| static av_always_inline void gmc(uint8_t *dst, uint8_t *src, | |||||
| int stride, int h, int ox, int oy, | |||||
| int dxx, int dxy, int dyx, int dyy, | |||||
| int shift, int r, int width, int height, | |||||
| emulated_edge_mc_func *emu_edge_fn) | |||||
| static void gmc_mmx(uint8_t *dst, uint8_t *src, | |||||
| int stride, int h, int ox, int oy, | |||||
| int dxx, int dxy, int dyx, int dyy, | |||||
| int shift, int r, int width, int height) | |||||
| { | { | ||||
| const int w = 8; | const int w = 8; | ||||
| const int ix = ox >> (16 + shift); | const int ix = ox >> (16 + shift); | ||||
| @@ -1952,7 +1947,6 @@ static av_always_inline void gmc(uint8_t *dst, uint8_t *src, | |||||
| const uint16_t dxy4[4] = { dxys, dxys, dxys, dxys }; | const uint16_t dxy4[4] = { dxys, dxys, dxys, dxys }; | ||||
| const uint16_t dyy4[4] = { dyys, dyys, dyys, dyys }; | const uint16_t dyy4[4] = { dyys, dyys, dyys, dyys }; | ||||
| const uint64_t shift2 = 2 * shift; | const uint64_t shift2 = 2 * shift; | ||||
| uint8_t edge_buf[(h + 1) * stride]; | |||||
| int x, y; | int x, y; | ||||
| const int dxw = (dxx - (1 << (16 + shift))) * (w - 1); | const int dxw = (dxx - (1 << (16 + shift))) * (w - 1); | ||||
| @@ -1963,7 +1957,9 @@ static av_always_inline void gmc(uint8_t *dst, uint8_t *src, | |||||
| ((ox ^ (ox + dxw)) | (ox ^ (ox + dxh)) | (ox ^ (ox + dxw + dxh)) | | ((ox ^ (ox + dxw)) | (ox ^ (ox + dxh)) | (ox ^ (ox + dxw + dxh)) | | ||||
| (oy ^ (oy + dyw)) | (oy ^ (oy + dyh)) | (oy ^ (oy + dyw + dyh))) >> (16 + shift) | (oy ^ (oy + dyw)) | (oy ^ (oy + dyh)) | (oy ^ (oy + dyw + dyh))) >> (16 + shift) | ||||
| // uses more than 16 bits of subpel mv (only at huge resolution) | // uses more than 16 bits of subpel mv (only at huge resolution) | ||||
| || (dxx | dxy | dyx | dyy) & 15) { | |||||
| || (dxx | dxy | dyx | dyy) & 15 || | |||||
| (unsigned)ix >= width - w || | |||||
| (unsigned)iy >= height - h) { | |||||
| // FIXME could still use mmx for some of the rows | // FIXME could still use mmx for some of the rows | ||||
| ff_gmc_c(dst, src, stride, h, ox, oy, dxx, dxy, dyx, dyy, | ff_gmc_c(dst, src, stride, h, ox, oy, dxx, dxy, dyx, dyy, | ||||
| shift, r, width, height); | shift, r, width, height); | ||||
| @@ -1971,11 +1967,6 @@ static av_always_inline void gmc(uint8_t *dst, uint8_t *src, | |||||
| } | } | ||||
| src += ix + iy * stride; | src += ix + iy * stride; | ||||
| if ((unsigned)ix >= width - w || | |||||
| (unsigned)iy >= height - h) { | |||||
| emu_edge_fn(edge_buf, src, stride, w + 1, h + 1, ix, iy, width, height); | |||||
| src = edge_buf; | |||||
| } | |||||
| __asm__ volatile ( | __asm__ volatile ( | ||||
| "movd %0, %%mm6 \n\t" | "movd %0, %%mm6 \n\t" | ||||
| @@ -2054,36 +2045,6 @@ static av_always_inline void gmc(uint8_t *dst, uint8_t *src, | |||||
| } | } | ||||
| } | } | ||||
| #if HAVE_YASM | |||||
| #if ARCH_X86_32 | |||||
| static void gmc_mmx(uint8_t *dst, uint8_t *src, | |||||
| int stride, int h, int ox, int oy, | |||||
| int dxx, int dxy, int dyx, int dyy, | |||||
| int shift, int r, int width, int height) | |||||
| { | |||||
| gmc(dst, src, stride, h, ox, oy, dxx, dxy, dyx, dyy, shift, r, | |||||
| width, height, &emulated_edge_mc_mmx); | |||||
| } | |||||
| #endif | |||||
| static void gmc_sse(uint8_t *dst, uint8_t *src, | |||||
| int stride, int h, int ox, int oy, | |||||
| int dxx, int dxy, int dyx, int dyy, | |||||
| int shift, int r, int width, int height) | |||||
| { | |||||
| gmc(dst, src, stride, h, ox, oy, dxx, dxy, dyx, dyy, shift, r, | |||||
| width, height, &emulated_edge_mc_sse); | |||||
| } | |||||
| #else | |||||
| static void gmc_mmx(uint8_t *dst, uint8_t *src, | |||||
| int stride, int h, int ox, int oy, | |||||
| int dxx, int dxy, int dyx, int dyy, | |||||
| int shift, int r, int width, int height) | |||||
| { | |||||
| gmc(dst, src, stride, h, ox, oy, dxx, dxy, dyx, dyy, shift, r, | |||||
| width, height, &ff_emulated_edge_mc_8); | |||||
| } | |||||
| #endif | |||||
| #define PREFETCH(name, op) \ | #define PREFETCH(name, op) \ | ||||
| static void name(void *mem, int stride, int h) \ | static void name(void *mem, int stride, int h) \ | ||||
| { \ | { \ | ||||
| @@ -2584,9 +2545,7 @@ static void dsputil_init_mmx(DSPContext *c, AVCodecContext *avctx, int mm_flags) | |||||
| SET_HPEL_FUNCS(avg_no_rnd, 1, 8, mmx); | SET_HPEL_FUNCS(avg_no_rnd, 1, 8, mmx); | ||||
| } | } | ||||
| #if ARCH_X86_32 || !HAVE_YASM | |||||
| c->gmc = gmc_mmx; | c->gmc = gmc_mmx; | ||||
| #endif | |||||
| c->add_bytes = add_bytes_mmx; | c->add_bytes = add_bytes_mmx; | ||||
| @@ -2841,9 +2800,6 @@ static void dsputil_init_sse(DSPContext *c, AVCodecContext *avctx, int mm_flags) | |||||
| if (!high_bit_depth) | if (!high_bit_depth) | ||||
| c->emulated_edge_mc = emulated_edge_mc_sse; | c->emulated_edge_mc = emulated_edge_mc_sse; | ||||
| #if HAVE_INLINE_ASM | |||||
| c->gmc = gmc_sse; | |||||
| #endif | |||||
| #endif /* HAVE_YASM */ | #endif /* HAVE_YASM */ | ||||
| } | } | ||||
| @@ -26,7 +26,7 @@ | |||||
| #include "libavcodec/dsputil.h" | #include "libavcodec/dsputil.h" | ||||
| #include "libavutil/x86/asm.h" | #include "libavutil/x86/asm.h" | ||||
| typedef struct { uint64_t a, b; } xmm_reg; | |||||
| typedef struct xmm_reg { uint64_t a, b; } xmm_reg; | |||||
| extern const uint64_t ff_bone; | extern const uint64_t ff_bone; | ||||
| extern const uint64_t ff_wtwo; | extern const uint64_t ff_wtwo; | ||||
| @@ -45,7 +45,7 @@ typedef void (*ff_reorder_func)(const void *, void *, int); | |||||
| #define ALSA_BUFFER_SIZE_MAX 65536 | #define ALSA_BUFFER_SIZE_MAX 65536 | ||||
| typedef struct { | |||||
| typedef struct AlsaData { | |||||
| AVClass *class; | AVClass *class; | ||||
| snd_pcm_t *h; | snd_pcm_t *h; | ||||
| int frame_size; ///< bytes per sample * channels | int frame_size; ///< bytes per sample * channels | ||||
| @@ -28,7 +28,7 @@ | |||||
| #include "libavutil/log.h" | #include "libavutil/log.h" | ||||
| #include "avdevice.h" | #include "avdevice.h" | ||||
| typedef struct { | |||||
| typedef struct SndioData { | |||||
| AVClass *class; | AVClass *class; | ||||
| struct sio_hdl *hdl; | struct sio_hdl *hdl; | ||||
| enum AVCodecID codec_id; | enum AVCodecID codec_id; | ||||
| @@ -127,7 +127,7 @@ static int request_frame(AVFilterLink *link) | |||||
| nb_samples); | nb_samples); | ||||
| if (!buf) | if (!buf) | ||||
| return AVERROR(ENOMEM); | return AVERROR(ENOMEM); | ||||
| ret = avresample_convert(s->avr, (void**)buf->extended_data, | |||||
| ret = avresample_convert(s->avr, buf->extended_data, | |||||
| buf->linesize[0], nb_samples, NULL, 0, 0); | buf->linesize[0], nb_samples, NULL, 0, 0); | ||||
| if (ret <= 0) { | if (ret <= 0) { | ||||
| avfilter_unref_bufferp(&buf); | avfilter_unref_bufferp(&buf); | ||||
| @@ -143,7 +143,7 @@ static int request_frame(AVFilterLink *link) | |||||
| static int write_to_fifo(ASyncContext *s, AVFilterBufferRef *buf) | static int write_to_fifo(ASyncContext *s, AVFilterBufferRef *buf) | ||||
| { | { | ||||
| int ret = avresample_convert(s->avr, NULL, 0, 0, (void**)buf->extended_data, | |||||
| int ret = avresample_convert(s->avr, NULL, 0, 0, buf->extended_data, | |||||
| buf->linesize[0], buf->audio->nb_samples); | buf->linesize[0], buf->audio->nb_samples); | ||||
| avfilter_unref_buffer(buf); | avfilter_unref_buffer(buf); | ||||
| return ret; | return ret; | ||||
| @@ -204,7 +204,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf) | |||||
| goto fail; | goto fail; | ||||
| } | } | ||||
| avresample_read(s->avr, (void**)buf_out->extended_data, out_size); | |||||
| avresample_read(s->avr, buf_out->extended_data, out_size); | |||||
| buf_out->pts = s->pts; | buf_out->pts = s->pts; | ||||
| if (delta > 0) { | if (delta > 0) { | ||||
| @@ -224,7 +224,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf) | |||||
| avresample_read(s->avr, NULL, avresample_available(s->avr)); | avresample_read(s->avr, NULL, avresample_available(s->avr)); | ||||
| s->pts = pts - avresample_get_delay(s->avr); | s->pts = pts - avresample_get_delay(s->avr); | ||||
| ret = avresample_convert(s->avr, NULL, 0, 0, (void**)buf->extended_data, | |||||
| ret = avresample_convert(s->avr, NULL, 0, 0, buf->extended_data, | |||||
| buf->linesize[0], buf->audio->nb_samples); | buf->linesize[0], buf->audio->nb_samples); | ||||
| fail: | fail: | ||||
| @@ -149,7 +149,7 @@ static int request_frame(AVFilterLink *outlink) | |||||
| if (!buf) | if (!buf) | ||||
| return AVERROR(ENOMEM); | return AVERROR(ENOMEM); | ||||
| ret = avresample_convert(s->avr, (void**)buf->extended_data, | |||||
| ret = avresample_convert(s->avr, buf->extended_data, | |||||
| buf->linesize[0], nb_samples, | buf->linesize[0], nb_samples, | ||||
| NULL, 0, 0); | NULL, 0, 0); | ||||
| if (ret <= 0) { | if (ret <= 0) { | ||||
| @@ -186,9 +186,9 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf) | |||||
| goto fail; | goto fail; | ||||
| } | } | ||||
| ret = avresample_convert(s->avr, (void**)buf_out->extended_data, | |||||
| ret = avresample_convert(s->avr, buf_out->extended_data, | |||||
| buf_out->linesize[0], nb_samples, | buf_out->linesize[0], nb_samples, | ||||
| (void**)buf->extended_data, buf->linesize[0], | |||||
| buf->extended_data, buf->linesize[0], | |||||
| buf->audio->nb_samples); | buf->audio->nb_samples); | ||||
| if (ret < 0) { | if (ret < 0) { | ||||
| avfilter_unref_buffer(buf_out); | avfilter_unref_buffer(buf_out); | ||||
| @@ -25,7 +25,7 @@ | |||||
| #include "avfilter.h" | #include "avfilter.h" | ||||
| /// Holds instance-specific information for gradfun. | /// Holds instance-specific information for gradfun. | ||||
| typedef struct { | |||||
| typedef struct GradFunContext { | |||||
| int thresh; ///< threshold for gradient algorithm | int thresh; ///< threshold for gradient algorithm | ||||
| int radius; ///< blur radius | int radius; ///< blur radius | ||||
| int chroma_w; ///< width of the chroma planes | int chroma_w; ///< width of the chroma planes | ||||
| @@ -126,9 +126,9 @@ static int config_input(AVFilterLink *inlink) | |||||
| var_values[VAR_IN_H] = var_values[VAR_IH] = inlink->h; | var_values[VAR_IN_H] = var_values[VAR_IH] = inlink->h; | ||||
| var_values[VAR_OUT_W] = var_values[VAR_OW] = NAN; | var_values[VAR_OUT_W] = var_values[VAR_OW] = NAN; | ||||
| var_values[VAR_OUT_H] = var_values[VAR_OH] = NAN; | var_values[VAR_OUT_H] = var_values[VAR_OH] = NAN; | ||||
| var_values[VAR_A] = (float) inlink->w / inlink->h; | |||||
| var_values[VAR_A] = (double) inlink->w / inlink->h; | |||||
| var_values[VAR_SAR] = inlink->sample_aspect_ratio.num ? | var_values[VAR_SAR] = inlink->sample_aspect_ratio.num ? | ||||
| (float) inlink->sample_aspect_ratio.num / inlink->sample_aspect_ratio.den : 1; | |||||
| (double) inlink->sample_aspect_ratio.num / inlink->sample_aspect_ratio.den : 1; | |||||
| var_values[VAR_DAR] = var_values[VAR_A] * var_values[VAR_SAR]; | var_values[VAR_DAR] = var_values[VAR_A] * var_values[VAR_SAR]; | ||||
| var_values[VAR_HSUB] = 1 << pad->draw.hsub_max; | var_values[VAR_HSUB] = 1 << pad->draw.hsub_max; | ||||
| var_values[VAR_VSUB] = 1 << pad->draw.vsub_max; | var_values[VAR_VSUB] = 1 << pad->draw.vsub_max; | ||||
| @@ -172,9 +172,9 @@ static int config_props(AVFilterLink *outlink) | |||||
| var_values[VAR_IN_H] = var_values[VAR_IH] = inlink->h; | var_values[VAR_IN_H] = var_values[VAR_IH] = inlink->h; | ||||
| var_values[VAR_OUT_W] = var_values[VAR_OW] = NAN; | var_values[VAR_OUT_W] = var_values[VAR_OW] = NAN; | ||||
| var_values[VAR_OUT_H] = var_values[VAR_OH] = NAN; | var_values[VAR_OUT_H] = var_values[VAR_OH] = NAN; | ||||
| var_values[VAR_A] = (float) inlink->w / inlink->h; | |||||
| var_values[VAR_A] = (double) inlink->w / inlink->h; | |||||
| var_values[VAR_SAR] = inlink->sample_aspect_ratio.num ? | var_values[VAR_SAR] = inlink->sample_aspect_ratio.num ? | ||||
| (float) inlink->sample_aspect_ratio.num / inlink->sample_aspect_ratio.den : 1; | |||||
| (double) inlink->sample_aspect_ratio.num / inlink->sample_aspect_ratio.den : 1; | |||||
| var_values[VAR_DAR] = var_values[VAR_A] * var_values[VAR_SAR]; | var_values[VAR_DAR] = var_values[VAR_A] * var_values[VAR_SAR]; | ||||
| var_values[VAR_HSUB] = 1<<av_pix_fmt_descriptors[inlink->format].log2_chroma_w; | var_values[VAR_HSUB] = 1<<av_pix_fmt_descriptors[inlink->format].log2_chroma_w; | ||||
| var_values[VAR_VSUB] = 1<<av_pix_fmt_descriptors[inlink->format].log2_chroma_h; | var_values[VAR_VSUB] = 1<<av_pix_fmt_descriptors[inlink->format].log2_chroma_h; | ||||
| @@ -22,7 +22,7 @@ | |||||
| #include "libavutil/pixdesc.h" | #include "libavutil/pixdesc.h" | ||||
| #include "avfilter.h" | #include "avfilter.h" | ||||
| typedef struct { | |||||
| typedef struct YADIFContext { | |||||
| /** | /** | ||||
| * 0: send 1 frame for each frame | * 0: send 1 frame for each frame | ||||
| * 1: send 1 frame for each field | * 1: send 1 frame for each field | ||||
| @@ -28,7 +28,7 @@ | |||||
| #define PACKET_SIZE 3200 | #define PACKET_SIZE 3200 | ||||
| typedef struct { | |||||
| typedef struct ASFStream { | |||||
| int num; | int num; | ||||
| unsigned char seq; | unsigned char seq; | ||||
| /* use for reading */ | /* use for reading */ | ||||
| @@ -49,7 +49,7 @@ typedef struct { | |||||
| uint32_t palette[256]; | uint32_t palette[256]; | ||||
| } ASFStream; | } ASFStream; | ||||
| typedef struct { | |||||
| typedef struct ASFMainHeader { | |||||
| ff_asf_guid guid; ///< generated by client computer | ff_asf_guid guid; ///< generated by client computer | ||||
| uint64_t file_size; /**< in bytes | uint64_t file_size; /**< in bytes | ||||
| * invalid if broadcasting */ | * invalid if broadcasting */ | ||||
| @@ -75,7 +75,7 @@ typedef struct { | |||||
| } ASFMainHeader; | } ASFMainHeader; | ||||
| typedef struct { | |||||
| typedef struct ASFIndex { | |||||
| uint32_t packet_number; | uint32_t packet_number; | ||||
| uint16_t packet_count; | uint16_t packet_count; | ||||
| } ASFIndex; | } ASFIndex; | ||||
| @@ -26,7 +26,7 @@ | |||||
| #include "libavutil/fifo.h" | #include "libavutil/fifo.h" | ||||
| #include "avformat.h" | #include "avformat.h" | ||||
| typedef struct { | |||||
| typedef struct AudioInterleaveContext { | |||||
| AVFifoBuffer *fifo; | AVFifoBuffer *fifo; | ||||
| unsigned fifo_size; ///< size of currently allocated FIFO | unsigned fifo_size; ///< size of currently allocated FIFO | ||||
| uint64_t dts; ///< current dts | uint64_t dts; ///< current dts | ||||
| @@ -32,7 +32,7 @@ typedef enum HTTPAuthType { | |||||
| HTTP_AUTH_DIGEST, /**< HTTP 1.1 Digest auth from RFC 2617 */ | HTTP_AUTH_DIGEST, /**< HTTP 1.1 Digest auth from RFC 2617 */ | ||||
| } HTTPAuthType; | } HTTPAuthType; | ||||
| typedef struct { | |||||
| typedef struct DigestParams { | |||||
| char nonce[300]; /**< Server specified nonce */ | char nonce[300]; /**< Server specified nonce */ | ||||
| char algorithm[10]; /**< Server specified digest algorithm */ | char algorithm[10]; /**< Server specified digest algorithm */ | ||||
| char qop[30]; /**< Quality of protection, containing the one | char qop[30]; /**< Quality of protection, containing the one | ||||
| @@ -52,7 +52,7 @@ typedef struct { | |||||
| * HTTP Authentication state structure. Must be zero-initialized | * HTTP Authentication state structure. Must be zero-initialized | ||||
| * before used with the functions below. | * before used with the functions below. | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct HTTPAuthState { | |||||
| /** | /** | ||||
| * The currently chosen auth type. | * The currently chosen auth type. | ||||
| */ | */ | ||||
| @@ -42,18 +42,18 @@ int ff_mov_lang_to_iso639(unsigned code, char to[4]); | |||||
| * Here we just use what is needed to read the chunks | * Here we just use what is needed to read the chunks | ||||
| */ | */ | ||||
| typedef struct { | |||||
| typedef struct MOVStts { | |||||
| int count; | int count; | ||||
| int duration; | int duration; | ||||
| } MOVStts; | } MOVStts; | ||||
| typedef struct { | |||||
| typedef struct MOVStsc { | |||||
| int first; | int first; | ||||
| int count; | int count; | ||||
| int id; | int id; | ||||
| } MOVStsc; | } MOVStsc; | ||||
| typedef struct { | |||||
| typedef struct MOVDref { | |||||
| uint32_t type; | uint32_t type; | ||||
| char *path; | char *path; | ||||
| char *dir; | char *dir; | ||||
| @@ -62,14 +62,14 @@ typedef struct { | |||||
| int16_t nlvl_to, nlvl_from; | int16_t nlvl_to, nlvl_from; | ||||
| } MOVDref; | } MOVDref; | ||||
| typedef struct { | |||||
| typedef struct MOVAtom { | |||||
| uint32_t type; | uint32_t type; | ||||
| int64_t size; /* total size (excluding the size and type fields) */ | int64_t size; /* total size (excluding the size and type fields) */ | ||||
| } MOVAtom; | } MOVAtom; | ||||
| struct MOVParseTableEntry; | struct MOVParseTableEntry; | ||||
| typedef struct { | |||||
| typedef struct MOVFragment { | |||||
| unsigned track_id; | unsigned track_id; | ||||
| uint64_t base_data_offset; | uint64_t base_data_offset; | ||||
| uint64_t moof_offset; | uint64_t moof_offset; | ||||
| @@ -79,7 +79,7 @@ typedef struct { | |||||
| unsigned flags; | unsigned flags; | ||||
| } MOVFragment; | } MOVFragment; | ||||
| typedef struct { | |||||
| typedef struct MOVTrackExt { | |||||
| unsigned track_id; | unsigned track_id; | ||||
| unsigned stsd_id; | unsigned stsd_id; | ||||
| unsigned duration; | unsigned duration; | ||||
| @@ -87,7 +87,7 @@ typedef struct { | |||||
| unsigned flags; | unsigned flags; | ||||
| } MOVTrackExt; | } MOVTrackExt; | ||||
| typedef struct { | |||||
| typedef struct MOVSbgp { | |||||
| unsigned int count; | unsigned int count; | ||||
| unsigned int index; | unsigned int index; | ||||
| } MOVSbgp; | } MOVSbgp; | ||||
| @@ -23,11 +23,11 @@ | |||||
| #include "url.h" | #include "url.h" | ||||
| typedef struct { | |||||
| typedef struct MMSStream { | |||||
| int id; | int id; | ||||
| }MMSStream; | }MMSStream; | ||||
| typedef struct { | |||||
| typedef struct MMSContext { | |||||
| URLContext *mms_hd; ///< TCP connection handle | URLContext *mms_hd; ///< TCP connection handle | ||||
| MMSStream *streams; | MMSStream *streams; | ||||
| @@ -62,13 +62,13 @@ typedef struct HintSample { | |||||
| int own_data; | int own_data; | ||||
| } HintSample; | } HintSample; | ||||
| typedef struct { | |||||
| typedef struct HintSampleQueue { | |||||
| int size; | int size; | ||||
| int len; | int len; | ||||
| HintSample *samples; | HintSample *samples; | ||||
| } HintSampleQueue; | } HintSampleQueue; | ||||
| typedef struct { | |||||
| typedef struct MOVFragmentInfo { | |||||
| int64_t offset; | int64_t offset; | ||||
| int64_t time; | int64_t time; | ||||
| int64_t duration; | int64_t duration; | ||||
| @@ -65,7 +65,7 @@ int ff_mpegts_parse_packet(MpegTSContext *ts, AVPacket *pkt, | |||||
| const uint8_t *buf, int len); | const uint8_t *buf, int len); | ||||
| void ff_mpegts_parse_close(MpegTSContext *ts); | void ff_mpegts_parse_close(MpegTSContext *ts); | ||||
| typedef struct { | |||||
| typedef struct SLConfigDescr { | |||||
| int use_au_start; | int use_au_start; | ||||
| int use_au_end; | int use_au_end; | ||||
| int use_rand_acc_pt; | int use_rand_acc_pt; | ||||
| @@ -82,7 +82,7 @@ typedef struct { | |||||
| int packet_seq_num_len; | int packet_seq_num_len; | ||||
| } SLConfigDescr; | } SLConfigDescr; | ||||
| typedef struct { | |||||
| typedef struct Mp4Descr { | |||||
| int es_id; | int es_id; | ||||
| int dec_config_descr_len; | int dec_config_descr_len; | ||||
| uint8_t *dec_config_descr; | uint8_t *dec_config_descr; | ||||
| @@ -55,13 +55,13 @@ enum MXFFrameLayout { | |||||
| SegmentedFrame, | SegmentedFrame, | ||||
| }; | }; | ||||
| typedef struct { | |||||
| typedef struct KLVPacket { | |||||
| UID key; | UID key; | ||||
| int64_t offset; | int64_t offset; | ||||
| uint64_t length; | uint64_t length; | ||||
| } KLVPacket; | } KLVPacket; | ||||
| typedef struct { | |||||
| typedef struct MXFCodecUL { | |||||
| UID uid; | UID uid; | ||||
| unsigned matching_len; | unsigned matching_len; | ||||
| int id; | int id; | ||||
| @@ -53,14 +53,14 @@ typedef enum{ | |||||
| FLAG_INVALID =8192, ///<if set, frame_code is invalid | FLAG_INVALID =8192, ///<if set, frame_code is invalid | ||||
| } Flag; | } Flag; | ||||
| typedef struct { | |||||
| typedef struct Syncpoint { | |||||
| uint64_t pos; | uint64_t pos; | ||||
| uint64_t back_ptr; | uint64_t back_ptr; | ||||
| // uint64_t global_key_pts; | // uint64_t global_key_pts; | ||||
| int64_t ts; | int64_t ts; | ||||
| } Syncpoint; | } Syncpoint; | ||||
| typedef struct { | |||||
| typedef struct FrameCode { | |||||
| uint16_t flags; | uint16_t flags; | ||||
| uint8_t stream_id; | uint8_t stream_id; | ||||
| uint16_t size_mul; | uint16_t size_mul; | ||||
| @@ -70,7 +70,7 @@ typedef struct { | |||||
| uint8_t header_idx; | uint8_t header_idx; | ||||
| } FrameCode; | } FrameCode; | ||||
| typedef struct { | |||||
| typedef struct StreamContext { | |||||
| int last_flags; | int last_flags; | ||||
| int skip_until_key_frame; | int skip_until_key_frame; | ||||
| int64_t last_pts; | int64_t last_pts; | ||||
| @@ -82,11 +82,11 @@ typedef struct { | |||||
| int64_t *keyframe_pts; | int64_t *keyframe_pts; | ||||
| } StreamContext; | } StreamContext; | ||||
| typedef struct { | |||||
| typedef struct ChapterContext { | |||||
| AVRational *time_base; | AVRational *time_base; | ||||
| } ChapterContext; | } ChapterContext; | ||||
| typedef struct { | |||||
| typedef struct NUTContext { | |||||
| AVFormatContext *avf; | AVFormatContext *avf; | ||||
| // int written_packet_size; | // int written_packet_size; | ||||
| // int64_t packet_start; | // int64_t packet_start; | ||||
| @@ -110,7 +110,7 @@ typedef struct { | |||||
| extern const AVCodecTag ff_nut_subtitle_tags[]; | extern const AVCodecTag ff_nut_subtitle_tags[]; | ||||
| extern const AVCodecTag ff_nut_video_tags[]; | extern const AVCodecTag ff_nut_video_tags[]; | ||||
| typedef struct { | |||||
| typedef struct Dispositions { | |||||
| char str[9]; | char str[9]; | ||||
| int flag; | int flag; | ||||
| } Dispositions; | } Dispositions; | ||||
| @@ -72,7 +72,7 @@ void ff_rtp_send_punch_packets(URLContext* rtp_handle); | |||||
| int ff_rtp_check_and_send_back_rr(RTPDemuxContext *s, int count); | int ff_rtp_check_and_send_back_rr(RTPDemuxContext *s, int count); | ||||
| // these statistics are used for rtcp receiver reports... | // these statistics are used for rtcp receiver reports... | ||||
| typedef struct { | |||||
| typedef struct RTPStatistics { | |||||
| uint16_t max_seq; ///< highest sequence number seen | uint16_t max_seq; ///< highest sequence number seen | ||||
| uint32_t cycles; ///< shifted count of sequence number cycles | uint32_t cycles; ///< shifted count of sequence number cycles | ||||
| uint32_t base_seq; ///< base sequence number | uint32_t base_seq; ///< base sequence number | ||||
| @@ -70,7 +70,7 @@ | |||||
| #undef NDEBUG | #undef NDEBUG | ||||
| #include <assert.h> | #include <assert.h> | ||||
| typedef struct { | |||||
| typedef struct SWFContext { | |||||
| int64_t duration_pos; | int64_t duration_pos; | ||||
| int64_t tag_pos; | int64_t tag_pos; | ||||
| int64_t vframes_pos; | int64_t vframes_pos; | ||||
| @@ -497,7 +497,7 @@ static int yuv4_read_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| { | { | ||||
| int i; | int i; | ||||
| char header[MAX_FRAME_HEADER+1]; | char header[MAX_FRAME_HEADER+1]; | ||||
| int packet_size, width, height; | |||||
| int packet_size, width, height, ret; | |||||
| AVStream *st = s->streams[0]; | AVStream *st = s->streams[0]; | ||||
| struct frame_attributes *s1 = s->priv_data; | struct frame_attributes *s1 = s->priv_data; | ||||
| @@ -508,20 +508,28 @@ static int yuv4_read_packet(AVFormatContext *s, AVPacket *pkt) | |||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| if (i == MAX_FRAME_HEADER) | |||||
| return -1; | |||||
| if (s->pb->error) | |||||
| return s->pb->error; | |||||
| else if (s->pb->eof_reached) | |||||
| return AVERROR_EOF; | |||||
| else if (i == MAX_FRAME_HEADER) | |||||
| return AVERROR_INVALIDDATA; | |||||
| if (strncmp(header, Y4M_FRAME_MAGIC, strlen(Y4M_FRAME_MAGIC))) | if (strncmp(header, Y4M_FRAME_MAGIC, strlen(Y4M_FRAME_MAGIC))) | ||||
| return -1; | |||||
| return AVERROR_INVALIDDATA; | |||||
| width = st->codec->width; | width = st->codec->width; | ||||
| height = st->codec->height; | height = st->codec->height; | ||||
| packet_size = avpicture_get_size(st->codec->pix_fmt, width, height); | packet_size = avpicture_get_size(st->codec->pix_fmt, width, height); | ||||
| if (packet_size < 0) | if (packet_size < 0) | ||||
| return -1; | |||||
| return packet_size; | |||||
| if (av_get_packet(s->pb, pkt, packet_size) != packet_size) | |||||
| return AVERROR(EIO); | |||||
| ret = av_get_packet(s->pb, pkt, packet_size); | |||||
| if (ret < 0) | |||||
| return ret; | |||||
| else if (ret != packet_size) | |||||
| return s->pb->eof_reached ? AVERROR_EOF : AVERROR(EIO); | |||||
| if (st->codec->coded_frame) { | if (st->codec->coded_frame) { | ||||
| st->codec->coded_frame->interlaced_frame = s1->interlaced_frame; | st->codec->coded_frame->interlaced_frame = s1->interlaced_frame; | ||||
| @@ -62,7 +62,7 @@ int ff_audio_data_set_channels(AudioData *a, int channels) | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| int ff_audio_data_init(AudioData *a, void **src, int plane_size, int channels, | |||||
| int ff_audio_data_init(AudioData *a, uint8_t **src, int plane_size, int channels, | |||||
| int nb_samples, enum AVSampleFormat sample_fmt, | int nb_samples, enum AVSampleFormat sample_fmt, | ||||
| int read_only, const char *name) | int read_only, const char *name) | ||||
| { | { | ||||
| @@ -73,7 +73,7 @@ int ff_audio_data_set_channels(AudioData *a, int channels); | |||||
| * @param name name for debug logging (can be NULL) | * @param name name for debug logging (can be NULL) | ||||
| * @return 0 on success, negative AVERROR value on error | * @return 0 on success, negative AVERROR value on error | ||||
| */ | */ | ||||
| int ff_audio_data_init(AudioData *a, void **src, int plane_size, int channels, | |||||
| int ff_audio_data_init(AudioData *a, uint8_t **src, int plane_size, int channels, | |||||
| int nb_samples, enum AVSampleFormat sample_fmt, | int nb_samples, enum AVSampleFormat sample_fmt, | ||||
| int read_only, const char *name); | int read_only, const char *name); | ||||
| @@ -305,8 +305,8 @@ int main(int argc, char **argv) | |||||
| goto end; | goto end; | ||||
| } | } | ||||
| ret = avresample_convert(s, (void **)out_data, out_linesize, out_rate * 6, | |||||
| (void **) in_data, in_linesize, in_rate * 6); | |||||
| ret = avresample_convert(s, out_data, out_linesize, out_rate * 6, | |||||
| in_data, in_linesize, in_rate * 6); | |||||
| if (ret < 0) { | if (ret < 0) { | ||||
| char errbuf[256]; | char errbuf[256]; | ||||
| av_strerror(ret, errbuf, sizeof(errbuf)); | av_strerror(ret, errbuf, sizeof(errbuf)); | ||||
| @@ -234,8 +234,8 @@ int avresample_set_compensation(AVAudioResampleContext *avr, int sample_delta, | |||||
| * not including converted samples added to the internal | * not including converted samples added to the internal | ||||
| * output FIFO | * output FIFO | ||||
| */ | */ | ||||
| int avresample_convert(AVAudioResampleContext *avr, void **output, | |||||
| int out_plane_size, int out_samples, void **input, | |||||
| int avresample_convert(AVAudioResampleContext *avr, uint8_t **output, | |||||
| int out_plane_size, int out_samples, uint8_t **input, | |||||
| int in_plane_size, int in_samples); | int in_plane_size, int in_samples); | ||||
| /** | /** | ||||
| @@ -287,6 +287,6 @@ int avresample_available(AVAudioResampleContext *avr); | |||||
| * @param nb_samples number of samples to read from the FIFO | * @param nb_samples number of samples to read from the FIFO | ||||
| * @return the number of samples written to output | * @return the number of samples written to output | ||||
| */ | */ | ||||
| int avresample_read(AVAudioResampleContext *avr, void **output, int nb_samples); | |||||
| int avresample_read(AVAudioResampleContext *avr, uint8_t **output, int nb_samples); | |||||
| #endif /* AVRESAMPLE_AVRESAMPLE_H */ | #endif /* AVRESAMPLE_AVRESAMPLE_H */ | ||||
| @@ -247,8 +247,8 @@ static int handle_buffered_output(AVAudioResampleContext *avr, | |||||
| } | } | ||||
| int attribute_align_arg avresample_convert(AVAudioResampleContext *avr, | int attribute_align_arg avresample_convert(AVAudioResampleContext *avr, | ||||
| void **output, int out_plane_size, | |||||
| int out_samples, void **input, | |||||
| uint8_t **output, int out_plane_size, | |||||
| int out_samples, uint8_t **input, | |||||
| int in_plane_size, int in_samples) | int in_plane_size, int in_samples) | ||||
| { | { | ||||
| AudioData input_buffer; | AudioData input_buffer; | ||||
| @@ -410,11 +410,11 @@ int avresample_available(AVAudioResampleContext *avr) | |||||
| return av_audio_fifo_size(avr->out_fifo); | return av_audio_fifo_size(avr->out_fifo); | ||||
| } | } | ||||
| int avresample_read(AVAudioResampleContext *avr, void **output, int nb_samples) | |||||
| int avresample_read(AVAudioResampleContext *avr, uint8_t **output, int nb_samples) | |||||
| { | { | ||||
| if (!output) | if (!output) | ||||
| return av_audio_fifo_drain(avr->out_fifo, nb_samples); | return av_audio_fifo_drain(avr->out_fifo, nb_samples); | ||||
| return av_audio_fifo_read(avr->out_fifo, output, nb_samples); | |||||
| return av_audio_fifo_read(avr->out_fifo, (void**)output, nb_samples); | |||||
| } | } | ||||
| unsigned avresample_version(void) | unsigned avresample_version(void) | ||||
| @@ -19,9 +19,9 @@ | |||||
| #ifndef AVRESAMPLE_VERSION_H | #ifndef AVRESAMPLE_VERSION_H | ||||
| #define AVRESAMPLE_VERSION_H | #define AVRESAMPLE_VERSION_H | ||||
| #define LIBAVRESAMPLE_VERSION_MAJOR 0 | |||||
| #define LIBAVRESAMPLE_VERSION_MAJOR 1 | |||||
| #define LIBAVRESAMPLE_VERSION_MINOR 0 | #define LIBAVRESAMPLE_VERSION_MINOR 0 | ||||
| #define LIBAVRESAMPLE_VERSION_MICRO 3 | |||||
| #define LIBAVRESAMPLE_VERSION_MICRO 0 | |||||
| #define LIBAVRESAMPLE_VERSION_INT AV_VERSION_INT(LIBAVRESAMPLE_VERSION_MAJOR, \ | #define LIBAVRESAMPLE_VERSION_INT AV_VERSION_INT(LIBAVRESAMPLE_VERSION_MAJOR, \ | ||||
| LIBAVRESAMPLE_VERSION_MINOR, \ | LIBAVRESAMPLE_VERSION_MINOR, \ | ||||
| @@ -74,7 +74,7 @@ | |||||
| #define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no | #define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no | ||||
| delimiter is added, the strings are simply concatenated. */ | delimiter is added, the strings are simply concatenated. */ | ||||
| typedef struct { | |||||
| typedef struct AVDictionaryEntry { | |||||
| char *key; | char *key; | ||||
| char *value; | char *value; | ||||
| } AVDictionaryEntry; | } AVDictionaryEntry; | ||||
| @@ -22,7 +22,7 @@ | |||||
| #ifndef AVUTIL_LFG_H | #ifndef AVUTIL_LFG_H | ||||
| #define AVUTIL_LFG_H | #define AVUTIL_LFG_H | ||||
| typedef struct { | |||||
| typedef struct AVLFG { | |||||
| unsigned int state[64]; | unsigned int state[64]; | ||||
| int index; | int index; | ||||
| } AVLFG; | } AVLFG; | ||||
| @@ -32,78 +32,37 @@ | |||||
| #define vzero vec_splat_s32(0) | #define vzero vec_splat_s32(0) | ||||
| static inline void altivec_packIntArrayToCharArray(int *val, uint8_t *dest, | |||||
| int dstW) | |||||
| #define yuv2planeX_8(d1, d2, l1, src, x, perm, filter) do { \ | |||||
| vector signed short l2 = vec_ld(((x) << 1) + 16, src); \ | |||||
| vector signed short ls = vec_perm(l1, l2, perm); \ | |||||
| vector signed int i1 = vec_mule(filter, ls); \ | |||||
| vector signed int i2 = vec_mulo(filter, ls); \ | |||||
| vector signed int vf1 = vec_mergeh(i1, i2); \ | |||||
| vector signed int vf2 = vec_mergel(i1, i2); \ | |||||
| d1 = vec_add(d1, vf1); \ | |||||
| d2 = vec_add(d2, vf2); \ | |||||
| l1 = l2; \ | |||||
| } while (0) | |||||
| static void yuv2planeX_16_altivec(const int16_t *filter, int filterSize, | |||||
| const int16_t **src, uint8_t *dest, | |||||
| const uint8_t *dither, int offset, int x) | |||||
| { | { | ||||
| register int i; | |||||
| register int i, j; | |||||
| DECLARE_ALIGNED(16, int, val)[16]; | |||||
| vector signed int vo1, vo2, vo3, vo4; | |||||
| vector unsigned short vs1, vs2; | |||||
| vector unsigned char vf; | |||||
| vector unsigned int altivec_vectorShiftInt19 = | vector unsigned int altivec_vectorShiftInt19 = | ||||
| vec_add(vec_splat_u32(10), vec_splat_u32(9)); | vec_add(vec_splat_u32(10), vec_splat_u32(9)); | ||||
| if ((uintptr_t)dest % 16) { | |||||
| /* badly aligned store, we force store alignment */ | |||||
| /* and will handle load misalignment on val w/ vec_perm */ | |||||
| vector unsigned char perm1; | |||||
| vector signed int v1; | |||||
| for (i = 0; (i < dstW) && | |||||
| (((uintptr_t)dest + i) % 16); i++) { | |||||
| int t = val[i] >> 19; | |||||
| dest[i] = (t < 0) ? 0 : ((t > 255) ? 255 : t); | |||||
| } | |||||
| perm1 = vec_lvsl(i << 2, val); | |||||
| v1 = vec_ld(i << 2, val); | |||||
| for (; i < (dstW - 15); i += 16) { | |||||
| int offset = i << 2; | |||||
| vector signed int v2 = vec_ld(offset + 16, val); | |||||
| vector signed int v3 = vec_ld(offset + 32, val); | |||||
| vector signed int v4 = vec_ld(offset + 48, val); | |||||
| vector signed int v5 = vec_ld(offset + 64, val); | |||||
| vector signed int v12 = vec_perm(v1, v2, perm1); | |||||
| vector signed int v23 = vec_perm(v2, v3, perm1); | |||||
| vector signed int v34 = vec_perm(v3, v4, perm1); | |||||
| vector signed int v45 = vec_perm(v4, v5, perm1); | |||||
| vector signed int vA = vec_sra(v12, altivec_vectorShiftInt19); | |||||
| vector signed int vB = vec_sra(v23, altivec_vectorShiftInt19); | |||||
| vector signed int vC = vec_sra(v34, altivec_vectorShiftInt19); | |||||
| vector signed int vD = vec_sra(v45, altivec_vectorShiftInt19); | |||||
| vector unsigned short vs1 = vec_packsu(vA, vB); | |||||
| vector unsigned short vs2 = vec_packsu(vC, vD); | |||||
| vector unsigned char vf = vec_packsu(vs1, vs2); | |||||
| vec_st(vf, i, dest); | |||||
| v1 = v5; | |||||
| } | |||||
| } else { // dest is properly aligned, great | |||||
| for (i = 0; i < (dstW - 15); i += 16) { | |||||
| int offset = i << 2; | |||||
| vector signed int v1 = vec_ld(offset, val); | |||||
| vector signed int v2 = vec_ld(offset + 16, val); | |||||
| vector signed int v3 = vec_ld(offset + 32, val); | |||||
| vector signed int v4 = vec_ld(offset + 48, val); | |||||
| vector signed int v5 = vec_sra(v1, altivec_vectorShiftInt19); | |||||
| vector signed int v6 = vec_sra(v2, altivec_vectorShiftInt19); | |||||
| vector signed int v7 = vec_sra(v3, altivec_vectorShiftInt19); | |||||
| vector signed int v8 = vec_sra(v4, altivec_vectorShiftInt19); | |||||
| vector unsigned short vs1 = vec_packsu(v5, v6); | |||||
| vector unsigned short vs2 = vec_packsu(v7, v8); | |||||
| vector unsigned char vf = vec_packsu(vs1, vs2); | |||||
| vec_st(vf, i, dest); | |||||
| } | |||||
| } | |||||
| for (; i < dstW; i++) { | |||||
| int t = val[i] >> 19; | |||||
| dest[i] = (t < 0) ? 0 : ((t > 255) ? 255 : t); | |||||
| } | |||||
| } | |||||
| // FIXME remove the usage of scratch buffers. | |||||
| static void yuv2planeX_altivec(const int16_t *filter, int filterSize, | |||||
| const int16_t **src, uint8_t *dest, int dstW, | |||||
| const uint8_t *dither, int offset) | |||||
| { | |||||
| register int i, j; | |||||
| DECLARE_ALIGNED(16, int, val)[dstW]; | |||||
| for (i = 0; i < 16; i++) | |||||
| val[i] = dither[(x + i + offset) & 7] << 12; | |||||
| for (i = 0; i < dstW; i++) | |||||
| val[i] = dither[(i + offset) & 7] << 12; | |||||
| vo1 = vec_ld(0, val); | |||||
| vo2 = vec_ld(16, val); | |||||
| vo3 = vec_ld(32, val); | |||||
| vo4 = vec_ld(48, val); | |||||
| for (j = 0; j < filterSize; j++) { | for (j = 0; j < filterSize; j++) { | ||||
| vector signed short l1, vLumFilter = vec_ld(j << 1, filter); | vector signed short l1, vLumFilter = vec_ld(j << 1, filter); | ||||
| @@ -111,36 +70,51 @@ static void yuv2planeX_altivec(const int16_t *filter, int filterSize, | |||||
| vLumFilter = vec_perm(vLumFilter, vLumFilter, perm0); | vLumFilter = vec_perm(vLumFilter, vLumFilter, perm0); | ||||
| vLumFilter = vec_splat(vLumFilter, 0); // lumFilter[j] is loaded 8 times in vLumFilter | vLumFilter = vec_splat(vLumFilter, 0); // lumFilter[j] is loaded 8 times in vLumFilter | ||||
| perm = vec_lvsl(0, src[j]); | |||||
| l1 = vec_ld(0, src[j]); | |||||
| perm = vec_lvsl(x << 1, src[j]); | |||||
| l1 = vec_ld(x << 1, src[j]); | |||||
| for (i = 0; i < (dstW - 7); i += 8) { | |||||
| int offset = i << 2; | |||||
| vector signed short l2 = vec_ld((i << 1) + 16, src[j]); | |||||
| yuv2planeX_8(vo1, vo2, l1, src[j], x, perm, vLumFilter); | |||||
| yuv2planeX_8(vo3, vo4, l1, src[j], x + 8, perm, vLumFilter); | |||||
| } | |||||
| vector signed int v1 = vec_ld(offset, val); | |||||
| vector signed int v2 = vec_ld(offset + 16, val); | |||||
| vo1 = vec_sra(vo1, altivec_vectorShiftInt19); | |||||
| vo2 = vec_sra(vo2, altivec_vectorShiftInt19); | |||||
| vo3 = vec_sra(vo3, altivec_vectorShiftInt19); | |||||
| vo4 = vec_sra(vo4, altivec_vectorShiftInt19); | |||||
| vs1 = vec_packsu(vo1, vo2); | |||||
| vs2 = vec_packsu(vo3, vo4); | |||||
| vf = vec_packsu(vs1, vs2); | |||||
| vec_st(vf, 0, dest); | |||||
| } | |||||
| vector signed short ls = vec_perm(l1, l2, perm); // lumSrc[j][i] ... lumSrc[j][i+7] | |||||
| static inline void yuv2planeX_u(const int16_t *filter, int filterSize, | |||||
| const int16_t **src, uint8_t *dest, int dstW, | |||||
| const uint8_t *dither, int offset, int x) | |||||
| { | |||||
| int i, j; | |||||
| vector signed int i1 = vec_mule(vLumFilter, ls); | |||||
| vector signed int i2 = vec_mulo(vLumFilter, ls); | |||||
| for (i = x; i < dstW; i++) { | |||||
| int t = dither[(i + offset) & 7] << 12; | |||||
| for (j = 0; j < filterSize; j++) | |||||
| t += src[j][i] * filter[j]; | |||||
| dest[i] = av_clip_uint8(t >> 19); | |||||
| } | |||||
| } | |||||
| vector signed int vf1 = vec_mergeh(i1, i2); | |||||
| vector signed int vf2 = vec_mergel(i1, i2); // lumSrc[j][i] * lumFilter[j] ... lumSrc[j][i+7] * lumFilter[j] | |||||
| static void yuv2planeX_altivec(const int16_t *filter, int filterSize, | |||||
| const int16_t **src, uint8_t *dest, int dstW, | |||||
| const uint8_t *dither, int offset) | |||||
| { | |||||
| int dst_u = -(uintptr_t)dest & 15; | |||||
| int i; | |||||
| vector signed int vo1 = vec_add(v1, vf1); | |||||
| vector signed int vo2 = vec_add(v2, vf2); | |||||
| yuv2planeX_u(filter, filterSize, src, dest, dst_u, dither, offset, 0); | |||||
| vec_st(vo1, offset, val); | |||||
| vec_st(vo2, offset + 16, val); | |||||
| for (i = dst_u; i < dstW - 15; i += 16) | |||||
| yuv2planeX_16_altivec(filter, filterSize, src, dest + i, dither, | |||||
| offset, i); | |||||
| l1 = l2; | |||||
| } | |||||
| for (; i < dstW; i++) | |||||
| val[i] += src[j][i] * filter[j]; | |||||
| } | |||||
| altivec_packIntArrayToCharArray(val, dest, dstW); | |||||
| yuv2planeX_u(filter, filterSize, src, dest, dstW, dither, offset, i); | |||||
| } | } | ||||
| static void hScale_altivec_real(SwsContext *c, int16_t *dst, int dstW, | static void hScale_altivec_real(SwsContext *c, int16_t *dst, int dstW, | ||||
| @@ -115,13 +115,13 @@ const int *sws_getCoefficients(int colorspace); | |||||
| // when used for filters they must have an odd number of elements | // when used for filters they must have an odd number of elements | ||||
| // coeffs cannot be shared between vectors | // coeffs cannot be shared between vectors | ||||
| typedef struct { | |||||
| typedef struct SwsVector { | |||||
| double *coeff; ///< pointer to the list of coefficients | double *coeff; ///< pointer to the list of coefficients | ||||
| int length; ///< number of coefficients in the vector | int length; ///< number of coefficients in the vector | ||||
| } SwsVector; | } SwsVector; | ||||
| // vectors can be shared | // vectors can be shared | ||||
| typedef struct { | |||||
| typedef struct SwsFilter { | |||||
| SwsVector *lumH; | SwsVector *lumH; | ||||
| SwsVector *lumV; | SwsVector *lumV; | ||||
| SwsVector *chrH; | SwsVector *chrH; | ||||