62 #define OFFSET(x) offsetof(MPTestContext, x)
63 #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
83 {
"max_frames",
"Set the maximum number of frames generated for each test",
OFFSET(max_frames),
85 {
"m",
"Set the maximum number of frames generated for each test",
OFFSET(max_frames),
98 for (
i = 0;
i < 8;
i++) {
99 double s =
i == 0 ? sqrt(0.125) : 0.5;
101 for (j = 0; j < 8; j++)
102 c[
i*8+j] =
s*cos((
M_PI/8.0)*
i*(j+0.5));
111 for (
i = 0;
i < 8;
i++) {
112 for (j = 0; j < 8; j++) {
115 for (k = 0; k < 8; k++)
116 sum +=
c[k*8+j] *
src[8*
i+k];
122 for (j = 0; j < 8; j++) {
123 for (
i = 0;
i < 8;
i++) {
126 for (k = 0; k < 8; k++)
127 sum +=
c[k*8+
i]*
tmp[8*k+j];
138 for (y = 0; y <
h; y++)
139 for (x = 0; x <
w; x++)
140 dst[x + y*dst_linesize] =
color;
147 memset(
src, 0, 64*
sizeof(
int));
156 if (cbp&1)
draw_basis(dst[0] , dst_linesize[0], amp, 1,
dc);
157 if (cbp&2)
draw_basis(dst[0]+8 , dst_linesize[0], amp, 1,
dc);
158 if (cbp&4)
draw_basis(dst[0]+ 8*dst_linesize[0], dst_linesize[0], amp, 1,
dc);
159 if (cbp&8)
draw_basis(dst[0]+8+8*dst_linesize[0], dst_linesize[0], amp, 1,
dc);
160 if (cbp&16)
draw_basis(dst[1] , dst_linesize[1], amp, 1,
dc);
161 if (cbp&32)
draw_basis(dst[2] , dst_linesize[2], amp, 1,
dc);
166 const int step =
FFMAX(256/(
w*
h/256), 1);
167 int x, y,
color = off;
169 for (y = 0; y <
h; y += 16) {
170 for (x = 0; x <
w; x += 16) {
171 draw_dc(dst + x + y*dst_linesize, dst_linesize,
color, 8, 8);
181 for (y = 0; y < 8*16; y += 16) {
182 for (x = 0; x < 8*16; x += 16) {
183 draw_basis(dst + x + y*dst_linesize, dst_linesize, 4*(96+off), freq, 128*8);
193 for (y = 0; y < 16*16; y += 16) {
194 for (x = 0; x < 16*16; x += 16) {
195 draw_basis(dst + x + y*dst_linesize, dst_linesize, 4*amp, 1, 128*8);
205 for (y = 0; y < 16*8; y += 16) {
206 for (x = 0; x < 16*8; x += 16) {
208 dst1[0] = dst[0] + x*2 + y*2*dst_linesize[0];
209 dst1[1] = dst[1] + x + y* dst_linesize[1];
210 dst1[2] = dst[2] + x + y* dst_linesize[2];
212 draw_cbp(dst1, dst_linesize, cbp, (64+off)*4, 128*8);
222 for (y = 0; y < 16*16; y++) {
225 for (x = 0; x < 16*16; x++)
226 dst[x + y*dst_linesize] = x + off*8/(y/32+1);
234 for (y = off; y < 16*16; y += 16) {
235 for (x = off; x < 16*16; x += 16) {
236 draw_dc(dst + x + y*dst_linesize, dst_linesize, ((x+y)&16) ?
color : -
color, 16, 16);
246 for (y = 0; y < 16*16; y++) {
247 for (x = 0; x < 16*16; x++) {
248 double d =
hypot(x-8*16, y-8*16);
249 double r = d/20 - (
int)(d/20);
251 dst[x + y*dst_linesize] = 255;
252 dst[x + y*dst_linesize+256] = 0;
254 dst[x + y*dst_linesize] = x;
255 dst[x + y*dst_linesize+256] = x;
265 test->max_pts =
test->duration >= 0 ?
270 test->frame_rate.num,
test->frame_rate.den,
324 for (
i = 0;
i <
h;
i++)
326 for (
i = 0;
i < ch;
i++) {
364 .priv_class = &mptestsrc_class,
static const AVFilterPad inputs[]
static const AVFilterPad outputs[]
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi - 0x80) *(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi - 0x80) *(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t, *(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t, *(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t, *(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t, *(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31)))) #define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac) { } void ff_audio_convert_free(AudioConvert **ac) { if(! *ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);} AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map) { AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method !=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt) > 2) { ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc) { av_free(ac);return NULL;} return ac;} in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar) { ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar ? ac->channels :1;} else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);return ac;} int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in) { int use_generic=1;int len=in->nb_samples;int p;if(ac->dc) { av_log(ac->avr, AV_LOG_TRACE, "%d samples - audio_convert: %s to %s (dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> dc
int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
Send a frame of data to the next filter.
Main libavfilter public API header.
#define AV_CEIL_RSHIFT(a, b)
@ AV_OPT_TYPE_VIDEO_RATE
offset must point to AVRational
#define AVERROR_EOF
End of file.
#define AV_LOG_VERBOSE
Detailed information.
static double av_q2d(AVRational a)
Convert an AVRational to a double.
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
static enum AVPixelFormat pix_fmts[]
static av_const double hypot(double x, double y)
static void test(const char *pattern, const char *host)
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
AVPixelFormat
Pixel format.
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Describe the class of an AVClass context structure.
void * priv
private data for use by the filter
A link between two filters.
int w
agreed upon image width
int h
agreed upon image height
AVFilterContext * src
source filter
int64_t frame_count_in
Number of past frames sent through the link.
AVRational time_base
Define the time base used by the PTS of the frames/samples which will pass through this link.
int format
agreed upon media format
A filter pad used for either input or output.
const char * name
Pad name.
const char * name
Filter name.
This structure describes decoded (raw) audio or video data.
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
Rational number (pair of numerator and denominator).
static int mod(int a, int b)
Modulo operation with only positive remainders.
AVFrame * ff_get_video_buffer(AVFilterLink *link, int w, int h)
Request a picture buffer with a specific set of permissions.
static const AVOption mptestsrc_options[]
static void cbp_test(uint8_t *dst[3], int dst_linesize[3], int off)
static int config_props(AVFilterLink *outlink)
static void draw_cbp(uint8_t *dst[3], int dst_linesize[3], int cbp, int amp, int dc)
static void mv_test(uint8_t *dst, int dst_linesize, int off)
static void idct(uint8_t *dst, int dst_linesize, int src[64])
static int query_formats(AVFilterContext *ctx)
static void init_idct(void)
static void amp_test(uint8_t *dst, int dst_linesize, int off)
static void draw_dc(uint8_t *dst, int dst_linesize, int color, int w, int h)
static void freq_test(uint8_t *dst, int dst_linesize, int off)
static int request_frame(AVFilterLink *outlink)
static void dc_test(uint8_t *dst, int dst_linesize, int w, int h, int off)
AVFilter ff_vsrc_mptestsrc
static const AVFilterPad mptestsrc_outputs[]
static void draw_basis(uint8_t *dst, int dst_linesize, int amp, int freq, int dc)
static av_cold int init(AVFilterContext *ctx)
AVFILTER_DEFINE_CLASS(mptestsrc)
static void ring1_test(uint8_t *dst, int dst_linesize, int off)
static void ring2_test(uint8_t *dst, int dst_linesize, int off)