mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-23 19:49:56 +00:00
Merge remote-tracking branch 'qatar/master'
* 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>
This commit is contained in:
commit
55c49afc42
@ -139,7 +139,7 @@ typedef struct SpecifierOpt {
|
||||
} u;
|
||||
} SpecifierOpt;
|
||||
|
||||
typedef struct {
|
||||
typedef struct OptionDef {
|
||||
const char *name;
|
||||
int flags;
|
||||
#define HAS_ARG 0x0001
|
||||
|
1
configure
vendored
1
configure
vendored
@ -3911,6 +3911,7 @@ elif enabled gcc; then
|
||||
check_optflags -fno-tree-vectorize
|
||||
check_cflags -Werror=implicit-function-declaration
|
||||
check_cflags -Werror=missing-prototypes
|
||||
# check_cflags -Werror=vla
|
||||
elif enabled llvm_gcc; then
|
||||
check_cflags -mllvm -stack-alignment=16
|
||||
elif enabled clang; then
|
||||
|
@ -97,7 +97,12 @@ API changes, most recent first:
|
||||
2012-03-26 - a67d9cf - lavfi 2.66.100
|
||||
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
|
||||
be used for freeing an AVFrame.
|
||||
|
||||
|
@ -113,7 +113,7 @@ enum OCStatus {
|
||||
OC_LOCKED, ///< Output configuration locked in place
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
typedef struct OutputConfiguration {
|
||||
MPEG4AudioConfig m4ac;
|
||||
uint8_t layout_map[MAX_ELEM_ID*4][3];
|
||||
int layout_map_tags;
|
||||
@ -125,7 +125,7 @@ typedef struct {
|
||||
/**
|
||||
* Predictor State
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct PredictorState {
|
||||
float cor0;
|
||||
float cor1;
|
||||
float var0;
|
||||
@ -146,7 +146,7 @@ typedef struct {
|
||||
/**
|
||||
* Long Term Prediction
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct LongTermPrediction {
|
||||
int8_t present;
|
||||
int16_t lag;
|
||||
float coef;
|
||||
@ -156,7 +156,7 @@ typedef struct {
|
||||
/**
|
||||
* Individual Channel Stream
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct IndividualChannelStream {
|
||||
uint8_t max_sfb; ///< number of scalefactor bands per group
|
||||
enum WindowSequence window_sequence[2];
|
||||
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
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct TemporalNoiseShaping {
|
||||
int present;
|
||||
int n_filt[8];
|
||||
int length[8][4];
|
||||
@ -189,7 +189,7 @@ typedef struct {
|
||||
/**
|
||||
* 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 dyn_rng_sgn[17]; ///< DRC sign information; 0 - positive, 1 - negative
|
||||
int dyn_rng_ctl[17]; ///< DRC magnitude information
|
||||
@ -202,7 +202,7 @@ typedef struct {
|
||||
*/
|
||||
} DynamicRangeControl;
|
||||
|
||||
typedef struct {
|
||||
typedef struct Pulse {
|
||||
int num_pulse;
|
||||
int start;
|
||||
int pos[4];
|
||||
@ -212,7 +212,7 @@ typedef struct {
|
||||
/**
|
||||
* coupling parameters
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct ChannelCoupling {
|
||||
enum CouplingPoint coupling_point; ///< The point during decoding at which coupling is applied.
|
||||
int num_coupled; ///< number of target elements
|
||||
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.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct SingleChannelElement {
|
||||
IndividualChannelStream ics;
|
||||
TemporalNoiseShaping tns;
|
||||
Pulse pulse;
|
||||
@ -245,7 +245,7 @@ typedef struct {
|
||||
/**
|
||||
* channel element - generic struct for SCE/CPE/CCE/LFE
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct ChannelElement {
|
||||
// CPE specific
|
||||
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)
|
||||
@ -260,7 +260,7 @@ typedef struct {
|
||||
/**
|
||||
* main AAC context
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct AACContext {
|
||||
AVCodecContext *avctx;
|
||||
AVFrame frame;
|
||||
|
||||
|
@ -28,7 +28,7 @@
|
||||
|
||||
#define AAC_ADTS_HEADER_SIZE 7
|
||||
|
||||
typedef struct {
|
||||
typedef struct AACADTSHeaderInfo {
|
||||
uint32_t sample_rate;
|
||||
uint32_t samples;
|
||||
uint32_t bit_rate;
|
||||
|
@ -38,7 +38,7 @@
|
||||
#define PS_AP_LINKS 3
|
||||
#define PS_MAX_AP_DELAY 5
|
||||
|
||||
typedef struct {
|
||||
typedef struct PSContext {
|
||||
int start;
|
||||
int enable_iid;
|
||||
int iid_quant;
|
||||
|
@ -93,7 +93,7 @@ typedef struct AC3BitAllocParameters {
|
||||
* @struct AC3HeaderInfo
|
||||
* Coded AC-3 header values up to the lfeon element, plus derived values.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct AC3HeaderInfo {
|
||||
/** @name Coded elements
|
||||
* @{
|
||||
*/
|
||||
|
@ -65,7 +65,7 @@
|
||||
/** Large enough for maximum possible frame size when the specification limit is ignored */
|
||||
#define AC3_FRAME_BUFFER_SIZE 32768
|
||||
|
||||
typedef struct {
|
||||
typedef struct AC3DecodeContext {
|
||||
AVClass *class; ///< class for AVOptions
|
||||
AVCodecContext *avctx; ///< parent context
|
||||
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);
|
||||
|
||||
/** Sparse representation for the algebraic codebook (fixed) vector */
|
||||
typedef struct {
|
||||
typedef struct AMRFixed {
|
||||
int n;
|
||||
int x[10];
|
||||
float y[10];
|
||||
|
@ -35,11 +35,11 @@
|
||||
|
||||
#include "avcodec.h"
|
||||
|
||||
typedef struct {
|
||||
typedef struct ADXChannelState {
|
||||
int s1,s2;
|
||||
} ADXChannelState;
|
||||
|
||||
typedef struct {
|
||||
typedef struct ADXContext {
|
||||
AVFrame frame;
|
||||
int channels;
|
||||
ADXChannelState prev[2];
|
||||
|
@ -55,7 +55,7 @@ enum Mode {
|
||||
/**
|
||||
* AMRNB unpacked data subframe
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct AMRNBSubframe {
|
||||
uint16_t p_lag; ///< index to decode the pitch lag
|
||||
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
|
||||
@ -65,7 +65,7 @@ typedef struct {
|
||||
/**
|
||||
* 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
|
||||
AMRNBSubframe subframe[4]; ///< unpacked data for each subframe
|
||||
} AMRNBFrame;
|
||||
|
@ -66,7 +66,7 @@ enum Mode {
|
||||
|
||||
/* All decoded parameters in these structs must be 2 bytes long
|
||||
* because of the direct indexing at the frame parsing */
|
||||
typedef struct {
|
||||
typedef struct AMRWBSubFrame {
|
||||
uint16_t adap; ///< adaptive codebook index
|
||||
uint16_t ltp; ///< ltp-filtering flag
|
||||
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
|
||||
} AMRWBSubFrame;
|
||||
|
||||
typedef struct {
|
||||
typedef struct AMRWBFrame {
|
||||
uint16_t vad; ///< voice activity detection flag
|
||||
uint16_t isp_id[7]; ///< index of ISP subvectors
|
||||
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
|
||||
* @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
|
||||
* @return allocated ReSampleContext, NULL if error occurred
|
||||
*/
|
||||
attribute_deprecated
|
||||
ReSampleContext *av_audio_resample_init(int output_channels, int input_channels,
|
||||
int output_rate, int input_rate,
|
||||
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 linear, double cutoff);
|
||||
|
||||
attribute_deprecated
|
||||
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
|
||||
* created with av_audio_resample_init()
|
||||
*/
|
||||
attribute_deprecated
|
||||
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
|
||||
* @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);
|
||||
|
||||
/**
|
||||
@ -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.
|
||||
* @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);
|
||||
|
||||
|
||||
@ -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,
|
||||
* 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);
|
||||
attribute_deprecated
|
||||
void av_resample_close(struct AVResampleContext *c);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @addtogroup lavc_picture
|
||||
|
@ -29,11 +29,11 @@
|
||||
#include "libavutil/common.h"
|
||||
#include "libavutil/intreadwrite.h"
|
||||
|
||||
typedef struct {
|
||||
typedef struct GetByteContext {
|
||||
const uint8_t *buffer, *buffer_end, *buffer_start;
|
||||
} GetByteContext;
|
||||
|
||||
typedef struct {
|
||||
typedef struct PutByteContext {
|
||||
uint8_t *buffer, *buffer_end, *buffer_start;
|
||||
int eof;
|
||||
} PutByteContext;
|
||||
|
@ -152,7 +152,7 @@ struct dec_2dvlc {
|
||||
int8_t max_run;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
typedef struct AVSContext {
|
||||
MpegEncContext s;
|
||||
CAVSDSPContext cdsp;
|
||||
Picture picture; ///< currently decoded frame
|
||||
|
@ -34,7 +34,7 @@
|
||||
#include "avcodec.h"
|
||||
#include "get_bits.h"
|
||||
|
||||
typedef struct {
|
||||
typedef struct dirac_source_params {
|
||||
unsigned width;
|
||||
unsigned height;
|
||||
uint8_t chroma_format; ///< 0: 444 1: 422 2: 420
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include <stdint.h>
|
||||
#include "avcodec.h"
|
||||
|
||||
typedef struct {
|
||||
typedef struct CIDEntry {
|
||||
int cid;
|
||||
unsigned int width, height;
|
||||
int interlaced;
|
||||
|
@ -29,12 +29,12 @@
|
||||
#include "mpegvideo.h"
|
||||
#include "dnxhddata.h"
|
||||
|
||||
typedef struct {
|
||||
typedef struct RCCMPEntry {
|
||||
uint16_t mb;
|
||||
int value;
|
||||
} RCCMPEntry;
|
||||
|
||||
typedef struct {
|
||||
typedef struct RCEntry {
|
||||
int ssd;
|
||||
int bits;
|
||||
} RCEntry;
|
||||
|
@ -29,7 +29,7 @@ typedef short IDWTELEM;
|
||||
#define MAX_DWT_SUPPORT 8
|
||||
#define MAX_DECOMPOSITIONS 8
|
||||
|
||||
typedef struct {
|
||||
typedef struct DWTCompose {
|
||||
IDWTELEM *b[MAX_DWT_SUPPORT];
|
||||
|
||||
IDWTELEM *b0;
|
||||
|
@ -30,7 +30,7 @@
|
||||
|
||||
#define PREV_SAMPLES_BUF_SIZE 1024
|
||||
|
||||
typedef struct {
|
||||
typedef struct G722Context {
|
||||
const AVClass *class;
|
||||
AVFrame frame;
|
||||
int bits_per_codeword;
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include <stdint.h>
|
||||
#include "avcodec.h"
|
||||
|
||||
typedef struct {
|
||||
typedef struct GSMContext {
|
||||
AVFrame frame;
|
||||
// Contains first 120 elements from the previous frame
|
||||
// (used by long_term_synth according to the "lag"),
|
||||
|
@ -29,7 +29,7 @@
|
||||
#include "avcodec.h"
|
||||
#include "get_bits.h"
|
||||
|
||||
typedef struct {
|
||||
typedef struct Node {
|
||||
int16_t sym;
|
||||
int16_t n0;
|
||||
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 };
|
||||
|
||||
|
||||
typedef struct {
|
||||
typedef struct vqEntry {
|
||||
const int16_t *deltas; ///< delta tables for 4x4 block modes
|
||||
const int32_t *deltas_m10; ///< delta tables for 8x8 block modes
|
||||
uint8_t num_dyads; ///< number of two-pixel deltas
|
||||
|
@ -23,7 +23,7 @@
|
||||
#include "mpegvideo.h"
|
||||
#include "intrax8dsp.h"
|
||||
|
||||
typedef struct{
|
||||
typedef struct IntraX8Context {
|
||||
VLC * j_ac_vlc[4];//they point to the static j_mb_vlc
|
||||
VLC * j_orient_vlc;
|
||||
VLC * j_dc_vlc[3];
|
||||
|
@ -40,7 +40,7 @@
|
||||
/**
|
||||
* huffman codebook descriptor
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct IVIHuffDesc {
|
||||
int32_t num_rows;
|
||||
uint8_t xbits[16];
|
||||
} IVIHuffDesc;
|
||||
@ -48,7 +48,7 @@ typedef struct {
|
||||
/**
|
||||
* macroblock/block huffman table descriptor
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct IVIHuffTab {
|
||||
int32_t tab_sel; /// index of one of the predefined tables
|
||||
/// or "7" for custom one
|
||||
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
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct RVMapDesc {
|
||||
uint8_t eob_sym; ///< end of block symbol
|
||||
uint8_t esc_sym; ///< escape symbol
|
||||
uint8_t runtab[256];
|
||||
@ -98,7 +98,7 @@ extern const RVMapDesc ff_ivi_rvmap_tabs[9];
|
||||
/**
|
||||
* information for Indeo macroblock (16x16, 8x8 or 4x4)
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct IVIMbInfo {
|
||||
int16_t xpos;
|
||||
int16_t ypos;
|
||||
uint32_t buf_offs; ///< address in the output buffer for this mb
|
||||
@ -113,7 +113,7 @@ typedef struct {
|
||||
/**
|
||||
* information for Indeo tile
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct IVITile {
|
||||
int xpos;
|
||||
int ypos;
|
||||
int width;
|
||||
@ -130,7 +130,7 @@ typedef struct {
|
||||
/**
|
||||
* information for Indeo wavelet band
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct IVIBandDesc {
|
||||
int plane; ///< plane number this band belongs to
|
||||
int band_num; ///< band number
|
||||
int width;
|
||||
@ -178,7 +178,7 @@ typedef struct {
|
||||
/**
|
||||
* color plane (luma or chroma) information
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct IVIPlaneDesc {
|
||||
uint16_t width;
|
||||
uint16_t height;
|
||||
uint8_t num_bands; ///< number of bands this plane subdivided into
|
||||
@ -186,7 +186,7 @@ typedef struct {
|
||||
} IVIPlaneDesc;
|
||||
|
||||
|
||||
typedef struct {
|
||||
typedef struct IVIPicConfig {
|
||||
uint16_t pic_width;
|
||||
uint16_t pic_height;
|
||||
uint16_t chroma_width;
|
||||
|
@ -31,7 +31,7 @@
|
||||
|
||||
#include "avcodec.h"
|
||||
|
||||
typedef struct {
|
||||
typedef struct SchroVideoFormatInfo {
|
||||
uint16_t width;
|
||||
uint16_t height;
|
||||
uint16_t frame_rate_num;
|
||||
|
@ -219,7 +219,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
|
||||
/* Activiting Discontinuous Transmission */
|
||||
if (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");
|
||||
}
|
||||
|
||||
|
@ -71,7 +71,7 @@
|
||||
#define IIR 1
|
||||
|
||||
/** filter data */
|
||||
typedef struct {
|
||||
typedef struct FilterParams {
|
||||
uint8_t order; ///< number of taps in filter
|
||||
uint8_t shift; ///< Right shift to apply to output of filter.
|
||||
|
||||
@ -79,7 +79,7 @@ typedef struct {
|
||||
} FilterParams;
|
||||
|
||||
/** sample data coding information */
|
||||
typedef struct {
|
||||
typedef struct ChannelParams {
|
||||
FilterParams filter_params[NUM_FILTERS];
|
||||
int32_t coeff[NUM_FILTERS][MAX_FIR_ORDER];
|
||||
|
||||
|
@ -41,7 +41,7 @@
|
||||
#define MPC_FRAME_SIZE (BANDS * SAMPLES_PER_BAND)
|
||||
|
||||
/** Subband structure - hold all variables for each subband */
|
||||
typedef struct {
|
||||
typedef struct Band {
|
||||
int msf; ///< mid-stereo flag
|
||||
int res[2];
|
||||
int scfi[2];
|
||||
@ -49,7 +49,7 @@ typedef struct {
|
||||
int Q[2];
|
||||
}Band;
|
||||
|
||||
typedef struct {
|
||||
typedef struct MPCContext {
|
||||
AVFrame frame;
|
||||
DSPContext dsp;
|
||||
MPADSPContext mpadsp;
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include "get_bits.h"
|
||||
#include "put_bits.h"
|
||||
|
||||
typedef struct {
|
||||
typedef struct MPEG4AudioConfig {
|
||||
int object_type;
|
||||
int sampling_index;
|
||||
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,
|
||||
long len, int channels)
|
||||
{
|
||||
@ -124,13 +140,8 @@ static void float_to_int16_interleave_altivec(int16_t *dst, const float **src,
|
||||
}
|
||||
}
|
||||
} 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
|
||||
|
||||
typedef struct {
|
||||
typedef struct ProresDSPContext {
|
||||
int idct_permutation_type;
|
||||
uint8_t idct_permutation[64];
|
||||
int dct_permutation_type;
|
||||
|
@ -37,7 +37,7 @@
|
||||
/**
|
||||
* QCELP unpacked data frame
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct QCELPFrame {
|
||||
/// @name QCELP excitation codebook parameters
|
||||
/// @{
|
||||
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};
|
||||
|
||||
typedef struct {
|
||||
typedef struct QCELPBitmap {
|
||||
uint8_t index; /**< index into the QCELPContext structure */
|
||||
uint8_t bitpos; /**< position of the lowest bit in the value's byte */
|
||||
uint8_t bitlen; /**< number of bits to read */
|
||||
|
@ -33,7 +33,7 @@
|
||||
#define FRAMESIZE 20 ///< size of encoded frame
|
||||
#define LPC_ORDER 10 ///< order of LPC filter
|
||||
|
||||
typedef struct {
|
||||
typedef struct RA144Context {
|
||||
AVCodecContext *avctx;
|
||||
AVFrame frame;
|
||||
LPCContext lpc_ctx;
|
||||
|
@ -32,6 +32,8 @@
|
||||
#include "libavutil/mem.h"
|
||||
#include "libavutil/samplefmt.h"
|
||||
|
||||
#if FF_API_AVCODEC_RESAMPLE
|
||||
|
||||
#define MAX_CHANNELS 8
|
||||
|
||||
struct AVResampleContext;
|
||||
@ -429,3 +431,5 @@ void audio_resample_close(ReSampleContext *s)
|
||||
av_audio_convert_free(s->convert_ctx[1]);
|
||||
av_free(s);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -30,6 +30,8 @@
|
||||
#include "dsputil.h"
|
||||
#include "libavutil/common.h"
|
||||
|
||||
#if FF_API_AVCODEC_RESAMPLE
|
||||
|
||||
#ifndef CONFIG_RESAMPLE_HP
|
||||
#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;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -27,16 +27,16 @@
|
||||
#include "bytestream.h"
|
||||
#include "dsputil.h"
|
||||
|
||||
typedef struct {
|
||||
typedef struct roq_cell {
|
||||
unsigned char y[4];
|
||||
unsigned char u, v;
|
||||
} roq_cell;
|
||||
|
||||
typedef struct {
|
||||
typedef struct roq_qcell {
|
||||
int idx[4];
|
||||
} roq_qcell;
|
||||
|
||||
typedef struct {
|
||||
typedef struct motion_vect {
|
||||
int d[2];
|
||||
} motion_vect;
|
||||
|
||||
|
@ -29,7 +29,7 @@
|
||||
#define RTJPEG_FILE_VERSION 0
|
||||
#define RTJPEG_HEADER_SIZE 12
|
||||
|
||||
typedef struct {
|
||||
typedef struct RTJpegContext {
|
||||
int w, h;
|
||||
DSPContext *dsp;
|
||||
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.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct SpectrumParameters {
|
||||
uint8_t bs_start_freq;
|
||||
uint8_t bs_stop_freq;
|
||||
uint8_t bs_xover_band;
|
||||
@ -57,7 +57,7 @@ typedef struct {
|
||||
/**
|
||||
* Spectral Band Replication per channel data
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct SBRData {
|
||||
/**
|
||||
* @name Main bitstream data variables
|
||||
* @{
|
||||
@ -111,7 +111,7 @@ typedef struct {
|
||||
/**
|
||||
* Spectral Band Replication
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct SpectralBandReplication {
|
||||
int sample_rate;
|
||||
int start;
|
||||
int reset;
|
||||
|
@ -94,5 +94,8 @@
|
||||
#ifndef FF_API_VDA_ASYNC
|
||||
#define FF_API_VDA_ASYNC (LIBAVCODEC_VERSION_MAJOR < 55)
|
||||
#endif
|
||||
#ifndef FF_API_AVCODEC_RESAMPLE
|
||||
#define FF_API_AVCODEC_RESAMPLE (LIBAVCODEC_VERSION_MAJOR < 55)
|
||||
#endif
|
||||
|
||||
#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 uint64_t ff_vorbis_channel_layouts[9];
|
||||
|
||||
typedef struct {
|
||||
typedef struct vorbis_floor1_entry {
|
||||
uint16_t x;
|
||||
uint16_t sort;
|
||||
uint16_t low;
|
||||
|
@ -35,7 +35,7 @@
|
||||
|
||||
typedef struct vp56_context VP56Context;
|
||||
|
||||
typedef struct {
|
||||
typedef struct VP56mv {
|
||||
DECLARE_ALIGNED(4, int16_t, x);
|
||||
int16_t y;
|
||||
} VP56mv;
|
||||
@ -52,7 +52,7 @@ typedef int (*VP56ParseCoeffModels)(VP56Context *s);
|
||||
typedef int (*VP56ParseHeader)(VP56Context *s, const uint8_t *buf,
|
||||
int buf_size);
|
||||
|
||||
typedef struct {
|
||||
typedef struct VP56RangeCoder {
|
||||
int high;
|
||||
int bits; /* stored negated (i.e. negative "bits" is a positive number of
|
||||
bits left) in order to eliminate a negate in cache refilling */
|
||||
@ -61,18 +61,18 @@ typedef struct {
|
||||
unsigned int code_word;
|
||||
} VP56RangeCoder;
|
||||
|
||||
typedef struct {
|
||||
typedef struct VP56RefDc {
|
||||
uint8_t not_null_dc;
|
||||
VP56Frame ref_frame;
|
||||
DCTELEM dc_coeff;
|
||||
} VP56RefDc;
|
||||
|
||||
typedef struct {
|
||||
typedef struct VP56Macroblock {
|
||||
uint8_t type;
|
||||
VP56mv mv;
|
||||
} VP56Macroblock;
|
||||
|
||||
typedef struct {
|
||||
typedef struct VP56Model {
|
||||
uint8_t coeff_reorder[64]; /* used in vp6 only */
|
||||
uint8_t coeff_index_to_pos[64]; /* used in vp6 only */
|
||||
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 */
|
||||
} VP56mb;
|
||||
|
||||
typedef struct {
|
||||
typedef struct VP56Tree {
|
||||
int8_t val;
|
||||
int8_t prob_idx;
|
||||
} VP56Tree;
|
||||
|
@ -72,13 +72,13 @@ enum inter_splitmvmode {
|
||||
VP8_SPLITMVMODE_NONE, ///< (only used in prediction) no split MVs
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
typedef struct VP8FilterStrength {
|
||||
uint8_t filter_level;
|
||||
uint8_t inner_limit;
|
||||
uint8_t inner_filter;
|
||||
} VP8FilterStrength;
|
||||
|
||||
typedef struct {
|
||||
typedef struct VP8Macroblock {
|
||||
uint8_t skip;
|
||||
// todo: make it possible to check for at least (i4x4 or split_mv)
|
||||
// in one op. are others needed?
|
||||
@ -93,7 +93,7 @@ typedef struct {
|
||||
VP56mv bmv[16];
|
||||
} VP8Macroblock;
|
||||
|
||||
typedef struct {
|
||||
typedef struct VP8ThreadData {
|
||||
DECLARE_ALIGNED(16, DCTELEM, block)[6][4][16];
|
||||
DECLARE_ALIGNED(16, DCTELEM, block_dc)[16];
|
||||
/**
|
||||
@ -123,7 +123,7 @@ typedef struct {
|
||||
} VP8ThreadData;
|
||||
|
||||
#define MAX_THREADS 8
|
||||
typedef struct {
|
||||
typedef struct VP8Context {
|
||||
VP8ThreadData *thread_data;
|
||||
AVCodecContext *avctx;
|
||||
AVFrame *framep[4];
|
||||
|
@ -43,7 +43,7 @@
|
||||
#include "libavutil/internal.h"
|
||||
#include "libavutil/mem.h"
|
||||
|
||||
typedef struct {
|
||||
typedef struct pthread_t {
|
||||
void *handle;
|
||||
void *(*func)(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
|
||||
* conditional variables on kernels 6.0+.
|
||||
* MinGW does not currently have this typedef. */
|
||||
typedef struct {
|
||||
typedef struct pthread_cond_t {
|
||||
void *ptr;
|
||||
} 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
|
||||
* variable and api */
|
||||
typedef struct {
|
||||
typedef struct win32_cond_t {
|
||||
pthread_mutex_t mtx_broadcast;
|
||||
pthread_mutex_t mtx_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
|
||||
|
||||
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 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 dyy4[4] = { dyys, dyys, dyys, dyys };
|
||||
const uint64_t shift2 = 2 * shift;
|
||||
uint8_t edge_buf[(h + 1) * stride];
|
||||
int x, y;
|
||||
|
||||
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)) |
|
||||
(oy ^ (oy + dyw)) | (oy ^ (oy + dyh)) | (oy ^ (oy + dyw + dyh))) >> (16 + shift)
|
||||
// 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
|
||||
ff_gmc_c(dst, src, stride, h, ox, oy, dxx, dxy, dyx, dyy,
|
||||
shift, r, width, height);
|
||||
@ -1971,11 +1967,6 @@ static av_always_inline void gmc(uint8_t *dst, uint8_t *src,
|
||||
}
|
||||
|
||||
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 (
|
||||
"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) \
|
||||
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);
|
||||
}
|
||||
|
||||
#if ARCH_X86_32 || !HAVE_YASM
|
||||
c->gmc = gmc_mmx;
|
||||
#endif
|
||||
|
||||
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)
|
||||
c->emulated_edge_mc = emulated_edge_mc_sse;
|
||||
#if HAVE_INLINE_ASM
|
||||
c->gmc = gmc_sse;
|
||||
#endif
|
||||
#endif /* HAVE_YASM */
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include "libavcodec/dsputil.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_wtwo;
|
||||
|
@ -45,7 +45,7 @@ typedef void (*ff_reorder_func)(const void *, void *, int);
|
||||
|
||||
#define ALSA_BUFFER_SIZE_MAX 65536
|
||||
|
||||
typedef struct {
|
||||
typedef struct AlsaData {
|
||||
AVClass *class;
|
||||
snd_pcm_t *h;
|
||||
int frame_size; ///< bytes per sample * channels
|
||||
|
@ -28,7 +28,7 @@
|
||||
#include "libavutil/log.h"
|
||||
#include "avdevice.h"
|
||||
|
||||
typedef struct {
|
||||
typedef struct SndioData {
|
||||
AVClass *class;
|
||||
struct sio_hdl *hdl;
|
||||
enum AVCodecID codec_id;
|
||||
|
@ -127,7 +127,7 @@ static int request_frame(AVFilterLink *link)
|
||||
nb_samples);
|
||||
if (!buf)
|
||||
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);
|
||||
if (ret <= 0) {
|
||||
avfilter_unref_bufferp(&buf);
|
||||
@ -143,7 +143,7 @@ static int request_frame(AVFilterLink *link)
|
||||
|
||||
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);
|
||||
avfilter_unref_buffer(buf);
|
||||
return ret;
|
||||
@ -204,7 +204,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf)
|
||||
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;
|
||||
|
||||
if (delta > 0) {
|
||||
@ -224,7 +224,7 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf)
|
||||
avresample_read(s->avr, NULL, avresample_available(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);
|
||||
|
||||
fail:
|
||||
|
@ -149,7 +149,7 @@ static int request_frame(AVFilterLink *outlink)
|
||||
if (!buf)
|
||||
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);
|
||||
if (ret <= 0) {
|
||||
@ -186,9 +186,9 @@ static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf)
|
||||
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,
|
||||
(void**)buf->extended_data, buf->linesize[0],
|
||||
buf->extended_data, buf->linesize[0],
|
||||
buf->audio->nb_samples);
|
||||
if (ret < 0) {
|
||||
avfilter_unref_buffer(buf_out);
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include "avfilter.h"
|
||||
|
||||
/// Holds instance-specific information for gradfun.
|
||||
typedef struct {
|
||||
typedef struct GradFunContext {
|
||||
int thresh; ///< threshold for gradient algorithm
|
||||
int radius; ///< blur radius
|
||||
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_OUT_W] = var_values[VAR_OW] = 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 ?
|
||||
(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_HSUB] = 1 << pad->draw.hsub_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_OUT_W] = var_values[VAR_OW] = 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 ?
|
||||
(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_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;
|
||||
|
@ -22,7 +22,7 @@
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "avfilter.h"
|
||||
|
||||
typedef struct {
|
||||
typedef struct YADIFContext {
|
||||
/**
|
||||
* 0: send 1 frame for each frame
|
||||
* 1: send 1 frame for each field
|
||||
|
@ -28,7 +28,7 @@
|
||||
|
||||
#define PACKET_SIZE 3200
|
||||
|
||||
typedef struct {
|
||||
typedef struct ASFStream {
|
||||
int num;
|
||||
unsigned char seq;
|
||||
/* use for reading */
|
||||
@ -49,7 +49,7 @@ typedef struct {
|
||||
uint32_t palette[256];
|
||||
} ASFStream;
|
||||
|
||||
typedef struct {
|
||||
typedef struct ASFMainHeader {
|
||||
ff_asf_guid guid; ///< generated by client computer
|
||||
uint64_t file_size; /**< in bytes
|
||||
* invalid if broadcasting */
|
||||
@ -75,7 +75,7 @@ typedef struct {
|
||||
} ASFMainHeader;
|
||||
|
||||
|
||||
typedef struct {
|
||||
typedef struct ASFIndex {
|
||||
uint32_t packet_number;
|
||||
uint16_t packet_count;
|
||||
} ASFIndex;
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include "libavutil/fifo.h"
|
||||
#include "avformat.h"
|
||||
|
||||
typedef struct {
|
||||
typedef struct AudioInterleaveContext {
|
||||
AVFifoBuffer *fifo;
|
||||
unsigned fifo_size; ///< size of currently allocated FIFO
|
||||
uint64_t dts; ///< current dts
|
||||
|
@ -32,7 +32,7 @@ typedef enum HTTPAuthType {
|
||||
HTTP_AUTH_DIGEST, /**< HTTP 1.1 Digest auth from RFC 2617 */
|
||||
} HTTPAuthType;
|
||||
|
||||
typedef struct {
|
||||
typedef struct DigestParams {
|
||||
char nonce[300]; /**< Server specified nonce */
|
||||
char algorithm[10]; /**< Server specified digest algorithm */
|
||||
char qop[30]; /**< Quality of protection, containing the one
|
||||
@ -52,7 +52,7 @@ typedef struct {
|
||||
* HTTP Authentication state structure. Must be zero-initialized
|
||||
* before used with the functions below.
|
||||
*/
|
||||
typedef struct {
|
||||
typedef struct HTTPAuthState {
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
typedef struct MOVStts {
|
||||
int count;
|
||||
int duration;
|
||||
} MOVStts;
|
||||
|
||||
typedef struct {
|
||||
typedef struct MOVStsc {
|
||||
int first;
|
||||
int count;
|
||||
int id;
|
||||
} MOVStsc;
|
||||
|
||||
typedef struct {
|
||||
typedef struct MOVDref {
|
||||
uint32_t type;
|
||||
char *path;
|
||||
char *dir;
|
||||
@ -62,14 +62,14 @@ typedef struct {
|
||||
int16_t nlvl_to, nlvl_from;
|
||||
} MOVDref;
|
||||
|
||||
typedef struct {
|
||||
typedef struct MOVAtom {
|
||||
uint32_t type;
|
||||
int64_t size; /* total size (excluding the size and type fields) */
|
||||
} MOVAtom;
|
||||
|
||||
struct MOVParseTableEntry;
|
||||
|
||||
typedef struct {
|
||||
typedef struct MOVFragment {
|
||||
unsigned track_id;
|
||||
uint64_t base_data_offset;
|
||||
uint64_t moof_offset;
|
||||
@ -79,7 +79,7 @@ typedef struct {
|
||||
unsigned flags;
|
||||
} MOVFragment;
|
||||
|
||||
typedef struct {
|
||||
typedef struct MOVTrackExt {
|
||||
unsigned track_id;
|
||||
unsigned stsd_id;
|
||||
unsigned duration;
|
||||
@ -87,7 +87,7 @@ typedef struct {
|
||||
unsigned flags;
|
||||
} MOVTrackExt;
|
||||
|
||||
typedef struct {
|
||||
typedef struct MOVSbgp {
|
||||
unsigned int count;
|
||||
unsigned int index;
|
||||
} MOVSbgp;
|
||||
|
@ -23,11 +23,11 @@
|
||||
|
||||
#include "url.h"
|
||||
|
||||
typedef struct {
|
||||
typedef struct MMSStream {
|
||||
int id;
|
||||
}MMSStream;
|
||||
|
||||
typedef struct {
|
||||
typedef struct MMSContext {
|
||||
URLContext *mms_hd; ///< TCP connection handle
|
||||
MMSStream *streams;
|
||||
|
||||
|
@ -62,13 +62,13 @@ typedef struct HintSample {
|
||||
int own_data;
|
||||
} HintSample;
|
||||
|
||||
typedef struct {
|
||||
typedef struct HintSampleQueue {
|
||||
int size;
|
||||
int len;
|
||||
HintSample *samples;
|
||||
} HintSampleQueue;
|
||||
|
||||
typedef struct {
|
||||
typedef struct MOVFragmentInfo {
|
||||
int64_t offset;
|
||||
int64_t time;
|
||||
int64_t duration;
|
||||
|
@ -65,7 +65,7 @@ int ff_mpegts_parse_packet(MpegTSContext *ts, AVPacket *pkt,
|
||||
const uint8_t *buf, int len);
|
||||
void ff_mpegts_parse_close(MpegTSContext *ts);
|
||||
|
||||
typedef struct {
|
||||
typedef struct SLConfigDescr {
|
||||
int use_au_start;
|
||||
int use_au_end;
|
||||
int use_rand_acc_pt;
|
||||
@ -82,7 +82,7 @@ typedef struct {
|
||||
int packet_seq_num_len;
|
||||
} SLConfigDescr;
|
||||
|
||||
typedef struct {
|
||||
typedef struct Mp4Descr {
|
||||
int es_id;
|
||||
int dec_config_descr_len;
|
||||
uint8_t *dec_config_descr;
|
||||
|
@ -55,13 +55,13 @@ enum MXFFrameLayout {
|
||||
SegmentedFrame,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
typedef struct KLVPacket {
|
||||
UID key;
|
||||
int64_t offset;
|
||||
uint64_t length;
|
||||
} KLVPacket;
|
||||
|
||||
typedef struct {
|
||||
typedef struct MXFCodecUL {
|
||||
UID uid;
|
||||
unsigned matching_len;
|
||||
int id;
|
||||
|
@ -53,14 +53,14 @@ typedef enum{
|
||||
FLAG_INVALID =8192, ///<if set, frame_code is invalid
|
||||
} Flag;
|
||||
|
||||
typedef struct {
|
||||
typedef struct Syncpoint {
|
||||
uint64_t pos;
|
||||
uint64_t back_ptr;
|
||||
// uint64_t global_key_pts;
|
||||
int64_t ts;
|
||||
} Syncpoint;
|
||||
|
||||
typedef struct {
|
||||
typedef struct FrameCode {
|
||||
uint16_t flags;
|
||||
uint8_t stream_id;
|
||||
uint16_t size_mul;
|
||||
@ -70,7 +70,7 @@ typedef struct {
|
||||
uint8_t header_idx;
|
||||
} FrameCode;
|
||||
|
||||
typedef struct {
|
||||
typedef struct StreamContext {
|
||||
int last_flags;
|
||||
int skip_until_key_frame;
|
||||
int64_t last_pts;
|
||||
@ -82,11 +82,11 @@ typedef struct {
|
||||
int64_t *keyframe_pts;
|
||||
} StreamContext;
|
||||
|
||||
typedef struct {
|
||||
typedef struct ChapterContext {
|
||||
AVRational *time_base;
|
||||
} ChapterContext;
|
||||
|
||||
typedef struct {
|
||||
typedef struct NUTContext {
|
||||
AVFormatContext *avf;
|
||||
// int written_packet_size;
|
||||
// int64_t packet_start;
|
||||
@ -110,7 +110,7 @@ typedef struct {
|
||||
extern const AVCodecTag ff_nut_subtitle_tags[];
|
||||
extern const AVCodecTag ff_nut_video_tags[];
|
||||
|
||||
typedef struct {
|
||||
typedef struct Dispositions {
|
||||
char str[9];
|
||||
int flag;
|
||||
} 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);
|
||||
|
||||
// these statistics are used for rtcp receiver reports...
|
||||
typedef struct {
|
||||
typedef struct RTPStatistics {
|
||||
uint16_t max_seq; ///< highest sequence number seen
|
||||
uint32_t cycles; ///< shifted count of sequence number cycles
|
||||
uint32_t base_seq; ///< base sequence number
|
||||
|
@ -70,7 +70,7 @@
|
||||
#undef NDEBUG
|
||||
#include <assert.h>
|
||||
|
||||
typedef struct {
|
||||
typedef struct SWFContext {
|
||||
int64_t duration_pos;
|
||||
int64_t tag_pos;
|
||||
int64_t vframes_pos;
|
||||
|
@ -497,7 +497,7 @@ static int yuv4_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
{
|
||||
int i;
|
||||
char header[MAX_FRAME_HEADER+1];
|
||||
int packet_size, width, height;
|
||||
int packet_size, width, height, ret;
|
||||
AVStream *st = s->streams[0];
|
||||
struct frame_attributes *s1 = s->priv_data;
|
||||
|
||||
@ -508,20 +508,28 @@ static int yuv4_read_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
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)))
|
||||
return -1;
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
width = st->codec->width;
|
||||
height = st->codec->height;
|
||||
|
||||
packet_size = avpicture_get_size(st->codec->pix_fmt, width, height);
|
||||
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) {
|
||||
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;
|
||||
}
|
||||
|
||||
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 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)
|
||||
* @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 read_only, const char *name);
|
||||
|
||||
|
@ -305,8 +305,8 @@ int main(int argc, char **argv)
|
||||
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) {
|
||||
char errbuf[256];
|
||||
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
|
||||
* 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);
|
||||
|
||||
/**
|
||||
@ -287,6 +287,6 @@ int avresample_available(AVAudioResampleContext *avr);
|
||||
* @param nb_samples number of samples to read from the FIFO
|
||||
* @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 */
|
||||
|
@ -247,8 +247,8 @@ static int handle_buffered_output(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)
|
||||
{
|
||||
AudioData input_buffer;
|
||||
@ -410,11 +410,11 @@ int avresample_available(AVAudioResampleContext *avr)
|
||||
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)
|
||||
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)
|
||||
|
@ -19,9 +19,9 @@
|
||||
#ifndef 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_MICRO 3
|
||||
#define LIBAVRESAMPLE_VERSION_MICRO 0
|
||||
|
||||
#define LIBAVRESAMPLE_VERSION_INT AV_VERSION_INT(LIBAVRESAMPLE_VERSION_MAJOR, \
|
||||
LIBAVRESAMPLE_VERSION_MINOR, \
|
||||
|
@ -74,7 +74,7 @@
|
||||
#define AV_DICT_APPEND 32 /**< If the entry already exists, append to it. Note that no
|
||||
delimiter is added, the strings are simply concatenated. */
|
||||
|
||||
typedef struct {
|
||||
typedef struct AVDictionaryEntry {
|
||||
char *key;
|
||||
char *value;
|
||||
} AVDictionaryEntry;
|
||||
|
@ -22,7 +22,7 @@
|
||||
#ifndef AVUTIL_LFG_H
|
||||
#define AVUTIL_LFG_H
|
||||
|
||||
typedef struct {
|
||||
typedef struct AVLFG {
|
||||
unsigned int state[64];
|
||||
int index;
|
||||
} AVLFG;
|
||||
|
@ -32,78 +32,37 @@
|
||||
|
||||
#define vzero vec_splat_s32(0)
|
||||
|
||||
static inline void altivec_packIntArrayToCharArray(int *val, uint8_t *dest,
|
||||
int dstW)
|
||||
{
|
||||
register int i;
|
||||
vector unsigned int altivec_vectorShiftInt19 =
|
||||
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);
|
||||
#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)
|
||||
|
||||
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)
|
||||
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, j;
|
||||
DECLARE_ALIGNED(16, int, val)[dstW];
|
||||
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 =
|
||||
vec_add(vec_splat_u32(10), vec_splat_u32(9));
|
||||
|
||||
for (i = 0; i < dstW; i++)
|
||||
val[i] = dither[(i + offset) & 7] << 12;
|
||||
for (i = 0; i < 16; i++)
|
||||
val[i] = dither[(x + 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++) {
|
||||
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_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]);
|
||||
|
||||
vector signed int v1 = vec_ld(offset, val);
|
||||
vector signed int v2 = vec_ld(offset + 16, val);
|
||||
|
||||
vector signed short ls = vec_perm(l1, l2, perm); // lumSrc[j][i] ... lumSrc[j][i+7]
|
||||
|
||||
vector signed int i1 = vec_mule(vLumFilter, ls);
|
||||
vector signed int i2 = vec_mulo(vLumFilter, ls);
|
||||
|
||||
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]
|
||||
|
||||
vector signed int vo1 = vec_add(v1, vf1);
|
||||
vector signed int vo2 = vec_add(v2, vf2);
|
||||
|
||||
vec_st(vo1, offset, val);
|
||||
vec_st(vo2, offset + 16, val);
|
||||
|
||||
l1 = l2;
|
||||
}
|
||||
for (; i < dstW; i++)
|
||||
val[i] += src[j][i] * filter[j];
|
||||
yuv2planeX_8(vo1, vo2, l1, src[j], x, perm, vLumFilter);
|
||||
yuv2planeX_8(vo3, vo4, l1, src[j], x + 8, perm, vLumFilter);
|
||||
}
|
||||
altivec_packIntArrayToCharArray(val, dest, dstW);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
yuv2planeX_u(filter, filterSize, src, dest, dst_u, dither, offset, 0);
|
||||
|
||||
for (i = dst_u; i < dstW - 15; i += 16)
|
||||
yuv2planeX_16_altivec(filter, filterSize, src, dest + i, dither,
|
||||
offset, i);
|
||||
|
||||
yuv2planeX_u(filter, filterSize, src, dest, dstW, dither, offset, i);
|
||||
}
|
||||
|
||||
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
|
||||
// coeffs cannot be shared between vectors
|
||||
typedef struct {
|
||||
typedef struct SwsVector {
|
||||
double *coeff; ///< pointer to the list of coefficients
|
||||
int length; ///< number of coefficients in the vector
|
||||
} SwsVector;
|
||||
|
||||
// vectors can be shared
|
||||
typedef struct {
|
||||
typedef struct SwsFilter {
|
||||
SwsVector *lumH;
|
||||
SwsVector *lumV;
|
||||
SwsVector *chrH;
|
||||
|
Loading…
Reference in New Issue
Block a user