You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
Remove libpostproc
Libpostproc will be available as source plugin at https://github.com/michaelni/FFmpeg/tree/sourceplugin-libpostproc OR https://github.com/michaelni/libpostproc whatever turns out more convenient to maintain For the upcoming 8.0 release, libpostproc will be included, so as not to cause delays or inconveniences Sponsored-by: Sovereign Tech Fund Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
@@ -12,7 +12,6 @@ configure to activate them. In this case, FFmpeg's license changes to GPL v2+.
|
||||
|
||||
Specifically, the GPL parts of FFmpeg are:
|
||||
|
||||
- libpostproc
|
||||
- optional x86 optimization in the files
|
||||
- `libavcodec/x86/flac_dsp_gpl.asm`
|
||||
- `libavcodec/x86/idct_mmx.c`
|
||||
@@ -45,7 +44,6 @@ Specifically, the GPL parts of FFmpeg are:
|
||||
- `vf_owdenoise.c`
|
||||
- `vf_perspective.c`
|
||||
- `vf_phase.c`
|
||||
- `vf_pp.c`
|
||||
- `vf_pp7.c`
|
||||
- `vf_pullup.c`
|
||||
- `vf_repeatfields.c`
|
||||
|
@@ -134,8 +134,6 @@ Generic Parts:
|
||||
ratecontrol.c [2] Michael Niedermayer
|
||||
simple IDCT:
|
||||
simple_idct.c, simple_idct.h [2] Michael Niedermayer
|
||||
postprocessing:
|
||||
libpostproc/* [2] Michael Niedermayer
|
||||
table generation:
|
||||
tableprint.c, tableprint.h Reimar Doeffinger
|
||||
fixed point FFT:
|
||||
|
13
configure
vendored
13
configure
vendored
@@ -130,7 +130,6 @@ Component options:
|
||||
--disable-avformat disable libavformat build
|
||||
--disable-swresample disable libswresample build
|
||||
--disable-swscale disable libswscale build
|
||||
--disable-postproc disable libpostproc build
|
||||
--disable-avfilter disable libavfilter build
|
||||
--disable-pthreads disable pthreads [autodetect]
|
||||
--disable-w32threads disable Win32 threads [autodetect]
|
||||
@@ -2072,7 +2071,6 @@ LIBRARY_LIST="
|
||||
avdevice
|
||||
avfilter
|
||||
swscale
|
||||
postproc
|
||||
avformat
|
||||
avcodec
|
||||
swresample
|
||||
@@ -3969,7 +3967,6 @@ pan_filter_deps="swresample"
|
||||
perspective_filter_deps="gpl"
|
||||
phase_filter_deps="gpl"
|
||||
pp7_filter_deps="gpl"
|
||||
pp_filter_deps="gpl postproc"
|
||||
prewitt_opencl_filter_deps="opencl"
|
||||
procamp_vaapi_filter_deps="vaapi"
|
||||
program_opencl_filter_deps="opencl"
|
||||
@@ -4086,8 +4083,6 @@ avfilter_suggest="libm stdatomic spirv_compiler"
|
||||
avformat_deps="avcodec avutil"
|
||||
avformat_suggest="libm network zlib stdatomic"
|
||||
avutil_suggest="clock_gettime ffnvcodec gcrypt libm libdrm libmfx opencl openssl user32 vaapi vulkan videotoolbox corefoundation corevideo coremedia bcrypt stdatomic"
|
||||
postproc_deps="avutil gpl"
|
||||
postproc_suggest="libm stdatomic"
|
||||
swresample_deps="avutil"
|
||||
swresample_suggest="libm libsoxr stdatomic"
|
||||
swscale_deps="avutil"
|
||||
@@ -7533,7 +7528,7 @@ void (^block)(void);
|
||||
EOF
|
||||
|
||||
# add some linker flags
|
||||
check_ldflags -Wl,-rpath-link=:libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil
|
||||
check_ldflags -Wl,-rpath-link=:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil
|
||||
enabled rpath && add_ldexeflags -Wl,-rpath,$libdir && add_ldsoflags -Wl,-rpath,$libdir
|
||||
test_ldflags -Wl,-Bsymbolic && append SHFLAGS -Wl,-Bsymbolic
|
||||
|
||||
@@ -7898,7 +7893,6 @@ enabled fsync_filter && prepend avfilter_deps "avformat"
|
||||
enabled mcdeint_filter && prepend avfilter_deps "avcodec"
|
||||
enabled movie_filter && prepend avfilter_deps "avformat avcodec"
|
||||
enabled pan_filter && prepend avfilter_deps "swresample"
|
||||
enabled pp_filter && prepend avfilter_deps "postproc"
|
||||
enabled qrencode_filter && prepend avfilter_deps "swscale"
|
||||
enabled qrencodesrc_filter && prepend avfilter_deps "swscale"
|
||||
enabled removelogo_filter && prepend avfilter_deps "avformat avcodec swscale"
|
||||
@@ -7950,9 +7944,6 @@ expand_deps(){
|
||||
reorder_by ${1}_deps LIBRARY_LIST # linking order is expected later
|
||||
}
|
||||
|
||||
#we have to remove gpl from the deps here as some code assumes all lib deps are libs
|
||||
postproc_deps="$(filter_out 'gpl' $postproc_deps)"
|
||||
|
||||
map 'expand_deps $v' $LIBRARY_LIST
|
||||
|
||||
if test "$quiet" != "yes"; then
|
||||
@@ -8043,7 +8034,6 @@ echo "optimize for size ${small-no}"
|
||||
echo "optimizations ${optimizations-no}"
|
||||
echo "static ${static-no}"
|
||||
echo "shared ${shared-no}"
|
||||
echo "postprocessing support ${postproc-no}"
|
||||
echo "network support ${network-no}"
|
||||
echo "threading support ${thread_type-no}"
|
||||
echo "safe bitstream reader ${safe_bitstream_reader-no}"
|
||||
@@ -8420,7 +8410,6 @@ extralibs_avcodec="$avcodec_extralibs"
|
||||
extralibs_avformat="$avformat_extralibs"
|
||||
extralibs_avdevice="$avdevice_extralibs"
|
||||
extralibs_avfilter="$avfilter_extralibs"
|
||||
extralibs_postproc="$postproc_extralibs"
|
||||
extralibs_swscale="$swscale_extralibs"
|
||||
extralibs_swresample="$swresample_extralibs"
|
||||
EOF
|
||||
|
175
doc/filters.texi
175
doc/filters.texi
@@ -19387,181 +19387,6 @@ Set window Y position, relative offset on Y axis.
|
||||
|
||||
This filter supports same @ref{commands} as options.
|
||||
|
||||
@section pp
|
||||
|
||||
Enable the specified chain of postprocessing subfilters using libpostproc. This
|
||||
library should be automatically selected with a GPL build (@code{--enable-gpl}).
|
||||
Subfilters must be separated by '/' and can be disabled by prepending a '-'.
|
||||
Each subfilter and some options have a short and a long name that can be used
|
||||
interchangeably, i.e. dr/dering are the same.
|
||||
|
||||
The filters accept the following options:
|
||||
|
||||
@table @option
|
||||
@item subfilters
|
||||
Set postprocessing subfilters string.
|
||||
@end table
|
||||
|
||||
All subfilters share common options to determine their scope:
|
||||
|
||||
@table @option
|
||||
@item a/autoq
|
||||
Honor the quality commands for this subfilter.
|
||||
|
||||
@item c/chrom
|
||||
Do chrominance filtering, too (default).
|
||||
|
||||
@item y/nochrom
|
||||
Do luma filtering only (no chrominance).
|
||||
|
||||
@item n/noluma
|
||||
Do chrominance filtering only (no luma).
|
||||
@end table
|
||||
|
||||
These options can be appended after the subfilter name, separated by a '|'.
|
||||
|
||||
Available subfilters are:
|
||||
|
||||
@table @option
|
||||
@item hb/hdeblock[|difference[|flatness]]
|
||||
Horizontal deblocking filter
|
||||
@table @option
|
||||
@item difference
|
||||
Difference factor where higher values mean more deblocking (default: @code{32}).
|
||||
@item flatness
|
||||
Flatness threshold where lower values mean more deblocking (default: @code{39}).
|
||||
@end table
|
||||
|
||||
@item vb/vdeblock[|difference[|flatness]]
|
||||
Vertical deblocking filter
|
||||
@table @option
|
||||
@item difference
|
||||
Difference factor where higher values mean more deblocking (default: @code{32}).
|
||||
@item flatness
|
||||
Flatness threshold where lower values mean more deblocking (default: @code{39}).
|
||||
@end table
|
||||
|
||||
@item ha/hadeblock[|difference[|flatness]]
|
||||
Accurate horizontal deblocking filter
|
||||
@table @option
|
||||
@item difference
|
||||
Difference factor where higher values mean more deblocking (default: @code{32}).
|
||||
@item flatness
|
||||
Flatness threshold where lower values mean more deblocking (default: @code{39}).
|
||||
@end table
|
||||
|
||||
@item va/vadeblock[|difference[|flatness]]
|
||||
Accurate vertical deblocking filter
|
||||
@table @option
|
||||
@item difference
|
||||
Difference factor where higher values mean more deblocking (default: @code{32}).
|
||||
@item flatness
|
||||
Flatness threshold where lower values mean more deblocking (default: @code{39}).
|
||||
@end table
|
||||
@end table
|
||||
|
||||
The horizontal and vertical deblocking filters share the difference and
|
||||
flatness values so you cannot set different horizontal and vertical
|
||||
thresholds.
|
||||
|
||||
@table @option
|
||||
@item h1/x1hdeblock
|
||||
Experimental horizontal deblocking filter
|
||||
|
||||
@item v1/x1vdeblock
|
||||
Experimental vertical deblocking filter
|
||||
|
||||
@item dr/dering
|
||||
Deringing filter
|
||||
|
||||
@item tn/tmpnoise[|threshold1[|threshold2[|threshold3]]], temporal noise reducer
|
||||
@table @option
|
||||
@item threshold1
|
||||
larger -> stronger filtering
|
||||
@item threshold2
|
||||
larger -> stronger filtering
|
||||
@item threshold3
|
||||
larger -> stronger filtering
|
||||
@end table
|
||||
|
||||
@item al/autolevels[:f/fullyrange], automatic brightness / contrast correction
|
||||
@table @option
|
||||
@item f/fullyrange
|
||||
Stretch luma to @code{0-255}.
|
||||
@end table
|
||||
|
||||
@item lb/linblenddeint
|
||||
Linear blend deinterlacing filter that deinterlaces the given block by
|
||||
filtering all lines with a @code{(1 2 1)} filter.
|
||||
|
||||
@item li/linipoldeint
|
||||
Linear interpolating deinterlacing filter that deinterlaces the given block by
|
||||
linearly interpolating every second line.
|
||||
|
||||
@item ci/cubicipoldeint
|
||||
Cubic interpolating deinterlacing filter deinterlaces the given block by
|
||||
cubically interpolating every second line.
|
||||
|
||||
@item md/mediandeint
|
||||
Median deinterlacing filter that deinterlaces the given block by applying a
|
||||
median filter to every second line.
|
||||
|
||||
@item fd/ffmpegdeint
|
||||
FFmpeg deinterlacing filter that deinterlaces the given block by filtering every
|
||||
second line with a @code{(-1 4 2 4 -1)} filter.
|
||||
|
||||
@item l5/lowpass5
|
||||
Vertically applied FIR lowpass deinterlacing filter that deinterlaces the given
|
||||
block by filtering all lines with a @code{(-1 2 6 2 -1)} filter.
|
||||
|
||||
@item fq/forceQuant[|quantizer]
|
||||
Overrides the quantizer table from the input with the constant quantizer you
|
||||
specify.
|
||||
@table @option
|
||||
@item quantizer
|
||||
Quantizer to use
|
||||
@end table
|
||||
|
||||
@item de/default
|
||||
Default pp filter combination (@code{hb|a,vb|a,dr|a})
|
||||
|
||||
@item fa/fast
|
||||
Fast pp filter combination (@code{h1|a,v1|a,dr|a})
|
||||
|
||||
@item ac
|
||||
High quality pp filter combination (@code{ha|a|128|7,va|a,dr|a})
|
||||
@end table
|
||||
|
||||
@subsection Examples
|
||||
|
||||
@itemize
|
||||
@item
|
||||
Apply horizontal and vertical deblocking, deringing and automatic
|
||||
brightness/contrast:
|
||||
@example
|
||||
pp=hb/vb/dr/al
|
||||
@end example
|
||||
|
||||
@item
|
||||
Apply default filters without brightness/contrast correction:
|
||||
@example
|
||||
pp=de/-al
|
||||
@end example
|
||||
|
||||
@item
|
||||
Apply default filters and temporal denoiser:
|
||||
@example
|
||||
pp=default/tmpnoise|1|2|3
|
||||
@end example
|
||||
|
||||
@item
|
||||
Apply deblocking on luma only, and switch vertical deblocking on or off
|
||||
automatically depending on available CPU time:
|
||||
@example
|
||||
pp=hb|y/vb|a
|
||||
@end example
|
||||
@end itemize
|
||||
|
||||
@section pp7
|
||||
Apply Postprocessing filter 7. It is variant of the @ref{spp} filter,
|
||||
similar to spp = 6 with 7 point DCT, where only the center sample is
|
||||
|
@@ -62,8 +62,6 @@
|
||||
#include "libswscale/version.h"
|
||||
#include "libswresample/swresample.h"
|
||||
#include "libswresample/version.h"
|
||||
#include "libpostproc/postprocess.h"
|
||||
#include "libpostproc/version.h"
|
||||
#include "libavfilter/version.h"
|
||||
#include "textformat/avtextformat.h"
|
||||
#include "cmdutils.h"
|
||||
@@ -2573,7 +2571,6 @@ static void ffprobe_show_library_versions(AVTextFormatContext *tfc)
|
||||
SHOW_LIB_VERSION(avfilter, AVFILTER);
|
||||
SHOW_LIB_VERSION(swscale, SWSCALE);
|
||||
SHOW_LIB_VERSION(swresample, SWRESAMPLE);
|
||||
SHOW_LIB_VERSION(postproc, POSTPROC);
|
||||
avtext_print_section_footer(tfc);
|
||||
}
|
||||
|
||||
|
@@ -60,8 +60,6 @@
|
||||
#include "libswresample/swresample.h"
|
||||
#include "libswresample/version.h"
|
||||
|
||||
#include "libpostproc/postprocess.h"
|
||||
#include "libpostproc/version.h"
|
||||
|
||||
enum show_muxdemuxers {
|
||||
SHOW_DEFAULT,
|
||||
@@ -191,7 +189,6 @@ static void print_all_libs_info(int flags, int level)
|
||||
PRINT_LIB_INFO(avfilter, AVFILTER, flags, level);
|
||||
PRINT_LIB_INFO(swscale, SWSCALE, flags, level);
|
||||
PRINT_LIB_INFO(swresample, SWRESAMPLE, flags, level);
|
||||
PRINT_LIB_INFO(postproc, POSTPROC, flags, level);
|
||||
}
|
||||
|
||||
static void print_program_info(int flags, int level)
|
||||
|
@@ -431,7 +431,6 @@ OBJS-$(CONFIG_PHOTOSENSITIVITY_FILTER) += vf_photosensitivity.o
|
||||
OBJS-$(CONFIG_PIXDESCTEST_FILTER) += vf_pixdesctest.o
|
||||
OBJS-$(CONFIG_PIXELIZE_FILTER) += vf_pixelize.o
|
||||
OBJS-$(CONFIG_PIXSCOPE_FILTER) += vf_datascope.o
|
||||
OBJS-$(CONFIG_PP_FILTER) += vf_pp.o qp_table.o
|
||||
OBJS-$(CONFIG_PP7_FILTER) += vf_pp7.o qp_table.o
|
||||
OBJS-$(CONFIG_PREMULTIPLY_FILTER) += vf_premultiply.o framesync.o
|
||||
OBJS-$(CONFIG_PREWITT_FILTER) += vf_convolution.o
|
||||
|
@@ -404,7 +404,6 @@ extern const FFFilter ff_vf_photosensitivity;
|
||||
extern const FFFilter ff_vf_pixdesctest;
|
||||
extern const FFFilter ff_vf_pixelize;
|
||||
extern const FFFilter ff_vf_pixscope;
|
||||
extern const FFFilter ff_vf_pp;
|
||||
extern const FFFilter ff_vf_pp7;
|
||||
extern const FFFilter ff_vf_premultiply;
|
||||
extern const FFFilter ff_vf_prewitt;
|
||||
|
@@ -1,191 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2002 A'rpi
|
||||
* Copyright (C) 2012 Clément Bœsch
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with FFmpeg; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* libpostproc filter, ported from MPlayer.
|
||||
*/
|
||||
|
||||
#include "libavutil/avassert.h"
|
||||
#include "libavutil/mem.h"
|
||||
#include "libavutil/opt.h"
|
||||
|
||||
#include "filters.h"
|
||||
#include "qp_table.h"
|
||||
#include "video.h"
|
||||
|
||||
#include "libpostproc/postprocess.h"
|
||||
|
||||
typedef struct PPFilterContext {
|
||||
const AVClass *class;
|
||||
char *subfilters;
|
||||
int mode_id;
|
||||
pp_mode *modes[PP_QUALITY_MAX + 1];
|
||||
void *pp_ctx;
|
||||
} PPFilterContext;
|
||||
|
||||
#define OFFSET(x) offsetof(PPFilterContext, x)
|
||||
#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
|
||||
static const AVOption pp_options[] = {
|
||||
{ "subfilters", "set postprocess subfilters", OFFSET(subfilters), AV_OPT_TYPE_STRING, {.str="de"}, .flags = FLAGS },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
AVFILTER_DEFINE_CLASS(pp);
|
||||
|
||||
static av_cold int pp_init(AVFilterContext *ctx)
|
||||
{
|
||||
int i;
|
||||
PPFilterContext *pp = ctx->priv;
|
||||
|
||||
for (i = 0; i <= PP_QUALITY_MAX; i++) {
|
||||
pp->modes[i] = pp_get_mode_by_name_and_quality(pp->subfilters, i);
|
||||
if (!pp->modes[i])
|
||||
return AVERROR_EXTERNAL;
|
||||
}
|
||||
pp->mode_id = PP_QUALITY_MAX;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pp_process_command(AVFilterContext *ctx, const char *cmd, const char *args,
|
||||
char *res, int res_len, int flags)
|
||||
{
|
||||
PPFilterContext *pp = ctx->priv;
|
||||
|
||||
if (!strcmp(cmd, "quality")) {
|
||||
pp->mode_id = av_clip(strtol(args, NULL, 10), 0, PP_QUALITY_MAX);
|
||||
return 0;
|
||||
}
|
||||
return AVERROR(ENOSYS);
|
||||
}
|
||||
|
||||
static const enum AVPixelFormat pix_fmts[] = {
|
||||
AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P,
|
||||
AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVJ422P,
|
||||
AV_PIX_FMT_YUV411P,
|
||||
AV_PIX_FMT_GBRP,
|
||||
AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P,
|
||||
AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUVJ440P,
|
||||
AV_PIX_FMT_GRAY8,
|
||||
AV_PIX_FMT_NONE
|
||||
};
|
||||
|
||||
static int pp_config_props(AVFilterLink *inlink)
|
||||
{
|
||||
int flags = PP_CPU_CAPS_AUTO;
|
||||
PPFilterContext *pp = inlink->dst->priv;
|
||||
|
||||
switch (inlink->format) {
|
||||
case AV_PIX_FMT_GRAY8:
|
||||
case AV_PIX_FMT_YUVJ420P:
|
||||
case AV_PIX_FMT_YUV420P: flags |= PP_FORMAT_420; break;
|
||||
case AV_PIX_FMT_YUVJ422P:
|
||||
case AV_PIX_FMT_YUV422P: flags |= PP_FORMAT_422; break;
|
||||
case AV_PIX_FMT_YUV411P: flags |= PP_FORMAT_411; break;
|
||||
case AV_PIX_FMT_GBRP:
|
||||
case AV_PIX_FMT_YUVJ444P:
|
||||
case AV_PIX_FMT_YUV444P: flags |= PP_FORMAT_444; break;
|
||||
case AV_PIX_FMT_YUVJ440P:
|
||||
case AV_PIX_FMT_YUV440P: flags |= PP_FORMAT_440; break;
|
||||
default: av_assert0(0);
|
||||
}
|
||||
|
||||
pp->pp_ctx = pp_get_context(inlink->w, inlink->h, flags);
|
||||
if (!pp->pp_ctx)
|
||||
return AVERROR(ENOMEM);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pp_filter_frame(AVFilterLink *inlink, AVFrame *inbuf)
|
||||
{
|
||||
AVFilterContext *ctx = inlink->dst;
|
||||
PPFilterContext *pp = ctx->priv;
|
||||
AVFilterLink *outlink = ctx->outputs[0];
|
||||
const int aligned_w = FFALIGN(outlink->w, 8);
|
||||
const int aligned_h = FFALIGN(outlink->h, 8);
|
||||
AVFrame *outbuf;
|
||||
int qstride = 0;
|
||||
int8_t *qp_table = NULL;
|
||||
int ret;
|
||||
|
||||
outbuf = ff_get_video_buffer(outlink, aligned_w, aligned_h);
|
||||
if (!outbuf) {
|
||||
av_frame_free(&inbuf);
|
||||
return AVERROR(ENOMEM);
|
||||
}
|
||||
av_frame_copy_props(outbuf, inbuf);
|
||||
outbuf->width = inbuf->width;
|
||||
outbuf->height = inbuf->height;
|
||||
|
||||
ret = ff_qp_table_extract(inbuf, &qp_table, &qstride, NULL, NULL);
|
||||
if (ret < 0) {
|
||||
av_frame_free(&inbuf);
|
||||
av_frame_free(&outbuf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
pp_postprocess((const uint8_t **)inbuf->data, inbuf->linesize,
|
||||
outbuf->data, outbuf->linesize,
|
||||
aligned_w, outlink->h,
|
||||
qp_table,
|
||||
qstride,
|
||||
pp->modes[pp->mode_id],
|
||||
pp->pp_ctx,
|
||||
outbuf->pict_type | (qp_table ? PP_PICT_TYPE_QP2 : 0));
|
||||
|
||||
av_frame_free(&inbuf);
|
||||
av_freep(&qp_table);
|
||||
return ff_filter_frame(outlink, outbuf);
|
||||
}
|
||||
|
||||
static av_cold void pp_uninit(AVFilterContext *ctx)
|
||||
{
|
||||
int i;
|
||||
PPFilterContext *pp = ctx->priv;
|
||||
|
||||
for (i = 0; i <= PP_QUALITY_MAX; i++)
|
||||
pp_free_mode(pp->modes[i]);
|
||||
if (pp->pp_ctx)
|
||||
pp_free_context(pp->pp_ctx);
|
||||
}
|
||||
|
||||
static const AVFilterPad pp_inputs[] = {
|
||||
{
|
||||
.name = "default",
|
||||
.type = AVMEDIA_TYPE_VIDEO,
|
||||
.config_props = pp_config_props,
|
||||
.filter_frame = pp_filter_frame,
|
||||
},
|
||||
};
|
||||
|
||||
const FFFilter ff_vf_pp = {
|
||||
.p.name = "pp",
|
||||
.p.description = NULL_IF_CONFIG_SMALL("Filter video using libpostproc."),
|
||||
.p.priv_class = &pp_class,
|
||||
.p.flags = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
|
||||
.priv_size = sizeof(PPFilterContext),
|
||||
.init = pp_init,
|
||||
.uninit = pp_uninit,
|
||||
FILTER_INPUTS(pp_inputs),
|
||||
FILTER_OUTPUTS(ff_video_default_filterpad),
|
||||
FILTER_PIXFMTS_ARRAY(pix_fmts),
|
||||
.process_command = pp_process_command,
|
||||
};
|
@@ -41,7 +41,6 @@
|
||||
* @li @ref lavd "libavdevice" special devices muxing/demuxing library
|
||||
* @li @ref lavu "libavutil" common utility library
|
||||
* @li @ref lswr "libswresample" audio resampling, format conversion and mixing
|
||||
* @li @ref lpp "libpostproc" post processing library
|
||||
* @li @ref libsws "libswscale" color conversion and scaling library
|
||||
*
|
||||
* @section ffmpeg_versioning Versioning and compatibility
|
||||
|
@@ -1,23 +0,0 @@
|
||||
NAME = postproc
|
||||
DESC = FFmpeg postprocessing library
|
||||
FFLIBS = avutil
|
||||
|
||||
HEADERS = postprocess.h \
|
||||
version.h \
|
||||
version_major.h \
|
||||
|
||||
OBJS = postprocess.o \
|
||||
version.o \
|
||||
|
||||
TESTOBJS = tests/test_utils.o \
|
||||
|
||||
# Windows resource file
|
||||
SHLIBOBJS-$(HAVE_GNU_WINDRES) += postprocres.o
|
||||
|
||||
TESTPROGS = blocktest \
|
||||
stripetest \
|
||||
temptest \
|
||||
|
||||
$(SUBDIR)tests/blocktest$(EXESUF): $(SUBDIR)tests/test_utils.o
|
||||
$(SUBDIR)tests/stripetest$(EXESUF): $(SUBDIR)tests/test_utils.o
|
||||
$(SUBDIR)tests/temptest$(EXESUF): $(SUBDIR)tests/test_utils.o
|
@@ -1,7 +0,0 @@
|
||||
LIBPOSTPROC_MAJOR {
|
||||
global:
|
||||
postproc_*;
|
||||
pp_*;
|
||||
local:
|
||||
*;
|
||||
};
|
@@ -1,992 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2001-2003 Michael Niedermayer (michaelni@gmx.at)
|
||||
*
|
||||
* AltiVec optimizations (C) 2004 Romain Dolbeau <romain@dolbeau.org>
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* postprocessing.
|
||||
*/
|
||||
|
||||
/*
|
||||
C MMX MMX2 AltiVec
|
||||
isVertDC Ec Ec Ec
|
||||
isVertMinMaxOk Ec Ec Ec
|
||||
doVertLowPass E e Ec
|
||||
doVertDefFilter Ec Ec e Ec
|
||||
isHorizDC Ec Ec Ec
|
||||
isHorizMinMaxOk a E Ec
|
||||
doHorizLowPass E e Ec
|
||||
doHorizDefFilter Ec Ec e Ec
|
||||
do_a_deblock Ec E Ec
|
||||
deRing E e Ecp
|
||||
Vertical RKAlgo1 E a
|
||||
Horizontal RKAlgo1 a
|
||||
Vertical X1# a E
|
||||
Horizontal X1# a E
|
||||
LinIpolDeinterlace e E
|
||||
CubicIpolDeinterlace a e
|
||||
LinBlendDeinterlace e E
|
||||
MedianDeinterlace# E Ec Ec
|
||||
TempDeNoiser# E e Ec
|
||||
|
||||
# more or less selfinvented filters so the exactness is not too meaningful
|
||||
E = Exact implementation
|
||||
e = almost exact implementation (slightly different rounding,...)
|
||||
a = alternative / approximate impl
|
||||
c = checked against the other implementations (-vo md5)
|
||||
p = partially optimized, still some work to do
|
||||
*/
|
||||
|
||||
/*
|
||||
TODO:
|
||||
reduce the time wasted on the mem transfer
|
||||
unroll stuff if instructions depend too much on the prior one
|
||||
move YScale thing to the end instead of fixing QP
|
||||
write a faster and higher quality deblocking filter :)
|
||||
make the mainloop more flexible (variable number of blocks at once
|
||||
(the if/else stuff per block is slowing things down)
|
||||
compare the quality & speed of all filters
|
||||
split this huge file
|
||||
optimize c versions
|
||||
try to unroll inner for(x=0 ... loop to avoid these damn if(x ... checks
|
||||
...
|
||||
*/
|
||||
|
||||
//Changelog: use git log
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "libavutil/common.h"
|
||||
#include "libavutil/cpu.h"
|
||||
#include "libavutil/intreadwrite.h"
|
||||
#include "libavutil/mem.h"
|
||||
//#undef HAVE_MMXEXT_INLINE
|
||||
//#undef HAVE_MMX_INLINE
|
||||
//#undef ARCH_X86
|
||||
//#define DEBUG_BRIGHTNESS
|
||||
#include "postprocess.h"
|
||||
#include "postprocess_internal.h"
|
||||
#include "libavutil/avstring.h"
|
||||
|
||||
#define GET_MODE_BUFFER_SIZE 500
|
||||
#define OPTIONS_ARRAY_SIZE 10
|
||||
#define BLOCK_SIZE 8
|
||||
#define TEMP_STRIDE 8
|
||||
//#define NUM_BLOCKS_AT_ONCE 16 //not used yet
|
||||
|
||||
#define DERING_THRESHOLD 20
|
||||
|
||||
#if ARCH_X86 && HAVE_INLINE_ASM
|
||||
DECLARE_ASM_CONST(8, uint64_t, w05)= 0x0005000500050005LL;
|
||||
DECLARE_ASM_CONST(8, uint64_t, w04)= 0x0004000400040004LL;
|
||||
DECLARE_ASM_CONST(8, uint64_t, w20)= 0x0020002000200020LL;
|
||||
DECLARE_ASM_CONST(8, uint64_t, b00)= 0x0000000000000000LL;
|
||||
DECLARE_ASM_CONST(8, uint64_t, b01)= 0x0101010101010101LL;
|
||||
DECLARE_ASM_CONST(8, uint64_t, b08)= 0x0808080808080808LL;
|
||||
DECLARE_ASM_CONST(8, uint64_t, b80)= 0x8080808080808080LL;
|
||||
#endif
|
||||
|
||||
static const struct PPFilter filters[]=
|
||||
{
|
||||
{"hb", "hdeblock", 1, 1, 3, H_DEBLOCK},
|
||||
{"vb", "vdeblock", 1, 2, 4, V_DEBLOCK},
|
||||
/* {"hr", "rkhdeblock", 1, 1, 3, H_RK1_FILTER},
|
||||
{"vr", "rkvdeblock", 1, 2, 4, V_RK1_FILTER},*/
|
||||
{"h1", "x1hdeblock", 1, 1, 3, H_X1_FILTER},
|
||||
{"v1", "x1vdeblock", 1, 2, 4, V_X1_FILTER},
|
||||
{"ha", "ahdeblock", 1, 1, 3, H_A_DEBLOCK},
|
||||
{"va", "avdeblock", 1, 2, 4, V_A_DEBLOCK},
|
||||
{"dr", "dering", 1, 5, 6, DERING},
|
||||
{"al", "autolevels", 0, 1, 2, LEVEL_FIX},
|
||||
{"lb", "linblenddeint", 1, 1, 4, LINEAR_BLEND_DEINT_FILTER},
|
||||
{"li", "linipoldeint", 1, 1, 4, LINEAR_IPOL_DEINT_FILTER},
|
||||
{"ci", "cubicipoldeint", 1, 1, 4, CUBIC_IPOL_DEINT_FILTER},
|
||||
{"md", "mediandeint", 1, 1, 4, MEDIAN_DEINT_FILTER},
|
||||
{"fd", "ffmpegdeint", 1, 1, 4, FFMPEG_DEINT_FILTER},
|
||||
{"l5", "lowpass5", 1, 1, 4, LOWPASS5_DEINT_FILTER},
|
||||
{"tn", "tmpnoise", 1, 7, 8, TEMP_NOISE_FILTER},
|
||||
{"fq", "forcequant", 1, 0, 0, FORCE_QUANT},
|
||||
{"be", "bitexact", 1, 0, 0, BITEXACT},
|
||||
{"vi", "visualize", 1, 0, 0, VISUALIZE},
|
||||
{NULL, NULL,0,0,0,0} //End Marker
|
||||
};
|
||||
|
||||
static const char * const replaceTable[]=
|
||||
{
|
||||
"default", "hb:a,vb:a,dr:a",
|
||||
"de", "hb:a,vb:a,dr:a",
|
||||
"fast", "h1:a,v1:a,dr:a",
|
||||
"fa", "h1:a,v1:a,dr:a",
|
||||
"ac", "ha:a:128:7,va:a,dr:a",
|
||||
NULL //End Marker
|
||||
};
|
||||
|
||||
/* The horizontal functions exist only in C because the MMX
|
||||
* code is faster with vertical filters and transposing. */
|
||||
|
||||
/**
|
||||
* Check if the given 8x8 Block is mostly "flat"
|
||||
*/
|
||||
static inline int isHorizDC_C(const uint8_t src[], int stride, const PPContext *c)
|
||||
{
|
||||
int numEq= 0;
|
||||
int y;
|
||||
const int dcOffset= ((c->nonBQP*c->ppMode.baseDcDiff)>>8) + 1;
|
||||
const int dcThreshold= dcOffset*2 + 1;
|
||||
|
||||
for(y=0; y<BLOCK_SIZE; y++){
|
||||
numEq += ((unsigned)(src[0] - src[1] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[1] - src[2] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[2] - src[3] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[3] - src[4] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[4] - src[5] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[5] - src[6] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[6] - src[7] + dcOffset)) < dcThreshold;
|
||||
src+= stride;
|
||||
}
|
||||
return numEq > c->ppMode.flatnessThreshold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the middle 8x8 Block in the given 8x16 block is flat
|
||||
*/
|
||||
static inline int isVertDC_C(const uint8_t src[], int stride, const PPContext *c)
|
||||
{
|
||||
int numEq= 0;
|
||||
int y;
|
||||
const int dcOffset= ((c->nonBQP*c->ppMode.baseDcDiff)>>8) + 1;
|
||||
const int dcThreshold= dcOffset*2 + 1;
|
||||
|
||||
src+= stride*4; // src points to begin of the 8x8 Block
|
||||
for(y=0; y<BLOCK_SIZE-1; y++){
|
||||
numEq += ((unsigned)(src[0] - src[0+stride] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[1] - src[1+stride] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[2] - src[2+stride] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[3] - src[3+stride] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[4] - src[4+stride] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[5] - src[5+stride] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[6] - src[6+stride] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[7] - src[7+stride] + dcOffset)) < dcThreshold;
|
||||
src+= stride;
|
||||
}
|
||||
return numEq > c->ppMode.flatnessThreshold;
|
||||
}
|
||||
|
||||
static inline int isHorizMinMaxOk_C(const uint8_t src[], int stride, int QP)
|
||||
{
|
||||
int i;
|
||||
for(i=0; i<2; i++){
|
||||
if((unsigned)(src[0] - src[5] + 2*QP) > 4*QP) return 0;
|
||||
src += stride;
|
||||
if((unsigned)(src[2] - src[7] + 2*QP) > 4*QP) return 0;
|
||||
src += stride;
|
||||
if((unsigned)(src[4] - src[1] + 2*QP) > 4*QP) return 0;
|
||||
src += stride;
|
||||
if((unsigned)(src[6] - src[3] + 2*QP) > 4*QP) return 0;
|
||||
src += stride;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline int isVertMinMaxOk_C(const uint8_t src[], int stride, int QP)
|
||||
{
|
||||
int x;
|
||||
src+= stride*4;
|
||||
for(x=0; x<BLOCK_SIZE; x+=4){
|
||||
if((unsigned)(src[ x + 0*stride] - src[ x + 5*stride] + 2*QP) > 4*QP) return 0;
|
||||
if((unsigned)(src[1+x + 2*stride] - src[1+x + 7*stride] + 2*QP) > 4*QP) return 0;
|
||||
if((unsigned)(src[2+x + 4*stride] - src[2+x + 1*stride] + 2*QP) > 4*QP) return 0;
|
||||
if((unsigned)(src[3+x + 6*stride] - src[3+x + 3*stride] + 2*QP) > 4*QP) return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static inline int horizClassify_C(const uint8_t src[], int stride, const PPContext *c)
|
||||
{
|
||||
if( isHorizDC_C(src, stride, c) ){
|
||||
return isHorizMinMaxOk_C(src, stride, c->QP);
|
||||
}else{
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
static inline int vertClassify_C(const uint8_t src[], int stride, const PPContext *c)
|
||||
{
|
||||
if( isVertDC_C(src, stride, c) ){
|
||||
return isVertMinMaxOk_C(src, stride, c->QP);
|
||||
}else{
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void doHorizDefFilter_C(uint8_t dst[], int stride, const PPContext *c)
|
||||
{
|
||||
int y;
|
||||
for(y=0; y<BLOCK_SIZE; y++){
|
||||
const int middleEnergy= 5*(dst[4] - dst[3]) + 2*(dst[2] - dst[5]);
|
||||
|
||||
if(FFABS(middleEnergy) < 8*c->QP){
|
||||
const int q=(dst[3] - dst[4])/2;
|
||||
const int leftEnergy= 5*(dst[2] - dst[1]) + 2*(dst[0] - dst[3]);
|
||||
const int rightEnergy= 5*(dst[6] - dst[5]) + 2*(dst[4] - dst[7]);
|
||||
|
||||
int d= FFABS(middleEnergy) - FFMIN( FFABS(leftEnergy), FFABS(rightEnergy) );
|
||||
d= FFMAX(d, 0);
|
||||
|
||||
d= (5*d + 32) >> 6;
|
||||
d*= FFSIGN(-middleEnergy);
|
||||
|
||||
if(q>0)
|
||||
{
|
||||
d = FFMAX(d, 0);
|
||||
d = FFMIN(d, q);
|
||||
}
|
||||
else
|
||||
{
|
||||
d = FFMIN(d, 0);
|
||||
d = FFMAX(d, q);
|
||||
}
|
||||
|
||||
dst[3]-= d;
|
||||
dst[4]+= d;
|
||||
}
|
||||
dst+= stride;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Do a horizontal low pass filter on the 10x8 block (dst points to middle 8x8 Block)
|
||||
* using the 9-Tap Filter (1,1,2,2,4,2,2,1,1)/16 (C version)
|
||||
*/
|
||||
static inline void doHorizLowPass_C(uint8_t dst[], int stride, const PPContext *c)
|
||||
{
|
||||
int y;
|
||||
for(y=0; y<BLOCK_SIZE; y++){
|
||||
const int first= FFABS(dst[-1] - dst[0]) < c->QP ? dst[-1] : dst[0];
|
||||
const int last= FFABS(dst[8] - dst[7]) < c->QP ? dst[8] : dst[7];
|
||||
|
||||
int sums[10];
|
||||
sums[0] = 4*first + dst[0] + dst[1] + dst[2] + 4;
|
||||
sums[1] = sums[0] - first + dst[3];
|
||||
sums[2] = sums[1] - first + dst[4];
|
||||
sums[3] = sums[2] - first + dst[5];
|
||||
sums[4] = sums[3] - first + dst[6];
|
||||
sums[5] = sums[4] - dst[0] + dst[7];
|
||||
sums[6] = sums[5] - dst[1] + last;
|
||||
sums[7] = sums[6] - dst[2] + last;
|
||||
sums[8] = sums[7] - dst[3] + last;
|
||||
sums[9] = sums[8] - dst[4] + last;
|
||||
|
||||
dst[0]= (sums[0] + sums[2] + 2*dst[0])>>4;
|
||||
dst[1]= (sums[1] + sums[3] + 2*dst[1])>>4;
|
||||
dst[2]= (sums[2] + sums[4] + 2*dst[2])>>4;
|
||||
dst[3]= (sums[3] + sums[5] + 2*dst[3])>>4;
|
||||
dst[4]= (sums[4] + sums[6] + 2*dst[4])>>4;
|
||||
dst[5]= (sums[5] + sums[7] + 2*dst[5])>>4;
|
||||
dst[6]= (sums[6] + sums[8] + 2*dst[6])>>4;
|
||||
dst[7]= (sums[7] + sums[9] + 2*dst[7])>>4;
|
||||
|
||||
dst+= stride;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Experimental Filter 1 (Horizontal)
|
||||
* will not damage linear gradients
|
||||
* Flat blocks should look like they were passed through the (1,1,2,2,4,2,2,1,1) 9-Tap filter
|
||||
* can only smooth blocks at the expected locations (it cannot smooth them if they did move)
|
||||
* MMX2 version does correct clipping C version does not
|
||||
* not identical with the vertical one
|
||||
*/
|
||||
static inline void horizX1Filter(uint8_t *src, int stride, int QP)
|
||||
{
|
||||
int y;
|
||||
static uint64_t lut[256];
|
||||
if(!lut[255])
|
||||
{
|
||||
int i;
|
||||
for(i=0; i<256; i++)
|
||||
{
|
||||
int v= i < 128 ? 2*i : 2*(i-256);
|
||||
/*
|
||||
//Simulate 112242211 9-Tap filter
|
||||
uint64_t a= (v/16) & 0xFF;
|
||||
uint64_t b= (v/8) & 0xFF;
|
||||
uint64_t c= (v/4) & 0xFF;
|
||||
uint64_t d= (3*v/8) & 0xFF;
|
||||
*/
|
||||
//Simulate piecewise linear interpolation
|
||||
uint64_t a= (v/16) & 0xFF;
|
||||
uint64_t b= (v*3/16) & 0xFF;
|
||||
uint64_t c= (v*5/16) & 0xFF;
|
||||
uint64_t d= (7*v/16) & 0xFF;
|
||||
uint64_t A= (0x100 - a)&0xFF;
|
||||
uint64_t B= (0x100 - b)&0xFF;
|
||||
uint64_t C= (0x100 - c)&0xFF;
|
||||
uint64_t D= (0x100 - c)&0xFF;
|
||||
|
||||
lut[i] = (a<<56) | (b<<48) | (c<<40) | (d<<32) |
|
||||
(D<<24) | (C<<16) | (B<<8) | (A);
|
||||
//lut[i] = (v<<32) | (v<<24);
|
||||
}
|
||||
}
|
||||
|
||||
for(y=0; y<BLOCK_SIZE; y++){
|
||||
int a= src[1] - src[2];
|
||||
int b= src[3] - src[4];
|
||||
int c= src[5] - src[6];
|
||||
|
||||
int d= FFMAX(FFABS(b) - (FFABS(a) + FFABS(c))/2, 0);
|
||||
|
||||
if(d < QP){
|
||||
int v = d * FFSIGN(-b);
|
||||
|
||||
src[1] +=v/8;
|
||||
src[2] +=v/4;
|
||||
src[3] +=3*v/8;
|
||||
src[4] -=3*v/8;
|
||||
src[5] -=v/4;
|
||||
src[6] -=v/8;
|
||||
}
|
||||
src+=stride;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* accurate deblock filter
|
||||
*/
|
||||
static av_always_inline void do_a_deblock_C(uint8_t *src, int step,
|
||||
int stride, const PPContext *c, int mode)
|
||||
{
|
||||
int y;
|
||||
const int QP= c->QP;
|
||||
const int dcOffset= ((c->nonBQP*c->ppMode.baseDcDiff)>>8) + 1;
|
||||
const int dcThreshold= dcOffset*2 + 1;
|
||||
|
||||
src+= step*4; // src points to begin of the 8x8 Block
|
||||
for(y=0; y<8; y++){
|
||||
int numEq= 0;
|
||||
|
||||
numEq += ((unsigned)(src[-1*step] - src[0*step] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[ 0*step] - src[1*step] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[ 1*step] - src[2*step] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[ 2*step] - src[3*step] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[ 3*step] - src[4*step] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[ 4*step] - src[5*step] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[ 5*step] - src[6*step] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[ 6*step] - src[7*step] + dcOffset)) < dcThreshold;
|
||||
numEq += ((unsigned)(src[ 7*step] - src[8*step] + dcOffset)) < dcThreshold;
|
||||
if(numEq > c->ppMode.flatnessThreshold){
|
||||
int min, max, x;
|
||||
|
||||
if(src[0] > src[step]){
|
||||
max= src[0];
|
||||
min= src[step];
|
||||
}else{
|
||||
max= src[step];
|
||||
min= src[0];
|
||||
}
|
||||
for(x=2; x<8; x+=2){
|
||||
if(src[x*step] > src[(x+1)*step]){
|
||||
if(src[x *step] > max) max= src[ x *step];
|
||||
if(src[(x+1)*step] < min) min= src[(x+1)*step];
|
||||
}else{
|
||||
if(src[(x+1)*step] > max) max= src[(x+1)*step];
|
||||
if(src[ x *step] < min) min= src[ x *step];
|
||||
}
|
||||
}
|
||||
if(max-min < 2*QP){
|
||||
const int first= FFABS(src[-1*step] - src[0]) < QP ? src[-1*step] : src[0];
|
||||
const int last= FFABS(src[8*step] - src[7*step]) < QP ? src[8*step] : src[7*step];
|
||||
|
||||
int sums[10];
|
||||
sums[0] = 4*first + src[0*step] + src[1*step] + src[2*step] + 4;
|
||||
sums[1] = sums[0] - first + src[3*step];
|
||||
sums[2] = sums[1] - first + src[4*step];
|
||||
sums[3] = sums[2] - first + src[5*step];
|
||||
sums[4] = sums[3] - first + src[6*step];
|
||||
sums[5] = sums[4] - src[0*step] + src[7*step];
|
||||
sums[6] = sums[5] - src[1*step] + last;
|
||||
sums[7] = sums[6] - src[2*step] + last;
|
||||
sums[8] = sums[7] - src[3*step] + last;
|
||||
sums[9] = sums[8] - src[4*step] + last;
|
||||
|
||||
if (mode & VISUALIZE) {
|
||||
src[0*step] =
|
||||
src[1*step] =
|
||||
src[2*step] =
|
||||
src[3*step] =
|
||||
src[4*step] =
|
||||
src[5*step] =
|
||||
src[6*step] =
|
||||
src[7*step] = 128;
|
||||
}
|
||||
src[0*step]= (sums[0] + sums[2] + 2*src[0*step])>>4;
|
||||
src[1*step]= (sums[1] + sums[3] + 2*src[1*step])>>4;
|
||||
src[2*step]= (sums[2] + sums[4] + 2*src[2*step])>>4;
|
||||
src[3*step]= (sums[3] + sums[5] + 2*src[3*step])>>4;
|
||||
src[4*step]= (sums[4] + sums[6] + 2*src[4*step])>>4;
|
||||
src[5*step]= (sums[5] + sums[7] + 2*src[5*step])>>4;
|
||||
src[6*step]= (sums[6] + sums[8] + 2*src[6*step])>>4;
|
||||
src[7*step]= (sums[7] + sums[9] + 2*src[7*step])>>4;
|
||||
}
|
||||
}else{
|
||||
const int middleEnergy= 5*(src[4*step] - src[3*step]) + 2*(src[2*step] - src[5*step]);
|
||||
|
||||
if(FFABS(middleEnergy) < 8*QP){
|
||||
const int q=(src[3*step] - src[4*step])/2;
|
||||
const int leftEnergy= 5*(src[2*step] - src[1*step]) + 2*(src[0*step] - src[3*step]);
|
||||
const int rightEnergy= 5*(src[6*step] - src[5*step]) + 2*(src[4*step] - src[7*step]);
|
||||
|
||||
int d= FFABS(middleEnergy) - FFMIN( FFABS(leftEnergy), FFABS(rightEnergy) );
|
||||
d= FFMAX(d, 0);
|
||||
|
||||
d= (5*d + 32) >> 6;
|
||||
d*= FFSIGN(-middleEnergy);
|
||||
|
||||
if(q>0){
|
||||
d = FFMAX(d, 0);
|
||||
d = FFMIN(d, q);
|
||||
}else{
|
||||
d = FFMIN(d, 0);
|
||||
d = FFMAX(d, q);
|
||||
}
|
||||
|
||||
if ((mode & VISUALIZE) && d) {
|
||||
d= (d < 0) ? 32 : -32;
|
||||
src[3*step]= av_clip_uint8(src[3*step] - d);
|
||||
src[4*step]= av_clip_uint8(src[4*step] + d);
|
||||
d = 0;
|
||||
}
|
||||
|
||||
src[3*step]-= d;
|
||||
src[4*step]+= d;
|
||||
}
|
||||
}
|
||||
|
||||
src += stride;
|
||||
}
|
||||
}
|
||||
|
||||
//Note: we have C and SSE2 version (which uses MMX(EXT) when advantageous)
|
||||
//Plain C versions
|
||||
//we always compile C for testing which needs bitexactness
|
||||
#define TEMPLATE_PP_C 1
|
||||
#include "postprocess_template.c"
|
||||
|
||||
#if HAVE_ALTIVEC
|
||||
#include "libavutil/ppc/util_altivec.h"
|
||||
|
||||
# define TEMPLATE_PP_ALTIVEC 1
|
||||
# include "postprocess_altivec_template.c"
|
||||
# include "postprocess_template.c"
|
||||
#endif
|
||||
|
||||
#if ARCH_X86 && HAVE_INLINE_ASM
|
||||
# if CONFIG_RUNTIME_CPUDETECT
|
||||
# define TEMPLATE_PP_SSE2 1
|
||||
# include "postprocess_template.c"
|
||||
# else
|
||||
# if HAVE_SSE2_INLINE
|
||||
# define TEMPLATE_PP_SSE2 1
|
||||
# include "postprocess_template.c"
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
typedef void (*pp_fn)(const uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height,
|
||||
const int8_t QPs[], int QPStride, int isColor, PPContext *c2);
|
||||
|
||||
static inline void postProcess(const uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height,
|
||||
const int8_t QPs[], int QPStride, int isColor, pp_mode *vm, pp_context *vc)
|
||||
{
|
||||
pp_fn pp = postProcess_C;
|
||||
PPContext *c= (PPContext *)vc;
|
||||
PPMode *ppMode= (PPMode *)vm;
|
||||
c->ppMode= *ppMode; //FIXME
|
||||
|
||||
if (!(ppMode->lumMode & BITEXACT)) {
|
||||
#if CONFIG_RUNTIME_CPUDETECT
|
||||
#if ARCH_X86 && HAVE_INLINE_ASM
|
||||
// ordered per speed fastest first
|
||||
if (c->cpuCaps & AV_CPU_FLAG_SSE2) pp = postProcess_SSE2;
|
||||
#elif HAVE_ALTIVEC
|
||||
if (c->cpuCaps & AV_CPU_FLAG_ALTIVEC) pp = postProcess_altivec;
|
||||
#endif
|
||||
#else /* CONFIG_RUNTIME_CPUDETECT */
|
||||
#if HAVE_SSE2_INLINE
|
||||
pp = postProcess_SSE2;
|
||||
#elif HAVE_ALTIVEC
|
||||
pp = postProcess_altivec;
|
||||
#endif
|
||||
#endif /* !CONFIG_RUNTIME_CPUDETECT */
|
||||
}
|
||||
|
||||
pp(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
|
||||
}
|
||||
|
||||
/* -pp Command line Help
|
||||
*/
|
||||
const char pp_help[] =
|
||||
"Available postprocessing filters:\n"
|
||||
"Filters Options\n"
|
||||
"short long name short long option Description\n"
|
||||
"* * a autoq CPU power dependent enabler\n"
|
||||
" c chrom chrominance filtering enabled\n"
|
||||
" y nochrom chrominance filtering disabled\n"
|
||||
" n noluma luma filtering disabled\n"
|
||||
"hb hdeblock (2 threshold) horizontal deblocking filter\n"
|
||||
" 1. difference factor: default=32, higher -> more deblocking\n"
|
||||
" 2. flatness threshold: default=39, lower -> more deblocking\n"
|
||||
" the h & v deblocking filters share these\n"
|
||||
" so you can't set different thresholds for h / v\n"
|
||||
"vb vdeblock (2 threshold) vertical deblocking filter\n"
|
||||
"ha hadeblock (2 threshold) horizontal deblocking filter\n"
|
||||
"va vadeblock (2 threshold) vertical deblocking filter\n"
|
||||
"h1 x1hdeblock experimental h deblock filter 1\n"
|
||||
"v1 x1vdeblock experimental v deblock filter 1\n"
|
||||
"dr dering deringing filter\n"
|
||||
"al autolevels automatic brightness / contrast\n"
|
||||
" f fullyrange stretch luminance to (0..255)\n"
|
||||
"lb linblenddeint linear blend deinterlacer\n"
|
||||
"li linipoldeint linear interpolating deinterlace\n"
|
||||
"ci cubicipoldeint cubic interpolating deinterlacer\n"
|
||||
"md mediandeint median deinterlacer\n"
|
||||
"fd ffmpegdeint ffmpeg deinterlacer\n"
|
||||
"l5 lowpass5 FIR lowpass deinterlacer\n"
|
||||
"de default hb:a,vb:a,dr:a\n"
|
||||
"fa fast h1:a,v1:a,dr:a\n"
|
||||
"ac ha:a:128:7,va:a,dr:a\n"
|
||||
"tn tmpnoise (3 threshold) temporal noise reducer\n"
|
||||
" 1. <= 2. <= 3. larger -> stronger filtering\n"
|
||||
"fq forceQuant <quantizer> force quantizer\n"
|
||||
"Usage:\n"
|
||||
"<filterName>[:<option>[:<option>...]][[,|/][-]<filterName>[:<option>...]]...\n"
|
||||
"long form example:\n"
|
||||
"vdeblock:autoq/hdeblock:autoq/linblenddeint default,-vdeblock\n"
|
||||
"short form example:\n"
|
||||
"vb:a/hb:a/lb de,-vb\n"
|
||||
"more examples:\n"
|
||||
"tn:64:128:256\n"
|
||||
"\n"
|
||||
;
|
||||
|
||||
pp_mode *pp_get_mode_by_name_and_quality(const char *name, int quality)
|
||||
{
|
||||
char temp[GET_MODE_BUFFER_SIZE];
|
||||
char *p= temp;
|
||||
static const char filterDelimiters[] = ",/";
|
||||
static const char optionDelimiters[] = ":|";
|
||||
struct PPMode *ppMode;
|
||||
char *filterToken;
|
||||
|
||||
if (!name) {
|
||||
av_log(NULL, AV_LOG_ERROR, "pp: Missing argument\n");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!strcmp(name, "help")) {
|
||||
const char *p;
|
||||
for (p = pp_help; strchr(p, '\n'); p = strchr(p, '\n') + 1) {
|
||||
av_strlcpy(temp, p, FFMIN(sizeof(temp), strchr(p, '\n') - p + 2));
|
||||
av_log(NULL, AV_LOG_INFO, "%s", temp);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ppMode= av_malloc(sizeof(PPMode));
|
||||
if (!ppMode)
|
||||
return NULL;
|
||||
|
||||
ppMode->lumMode= 0;
|
||||
ppMode->chromMode= 0;
|
||||
ppMode->maxTmpNoise[0]= 700;
|
||||
ppMode->maxTmpNoise[1]= 1500;
|
||||
ppMode->maxTmpNoise[2]= 3000;
|
||||
ppMode->maxAllowedY= 234;
|
||||
ppMode->minAllowedY= 16;
|
||||
ppMode->baseDcDiff= 256/8;
|
||||
ppMode->flatnessThreshold= 56-16-1;
|
||||
ppMode->maxClippedThreshold= (AVRational){1,100};
|
||||
ppMode->error=0;
|
||||
|
||||
memset(temp, 0, GET_MODE_BUFFER_SIZE);
|
||||
av_strlcpy(temp, name, GET_MODE_BUFFER_SIZE - 1);
|
||||
|
||||
av_log(NULL, AV_LOG_DEBUG, "pp: %s\n", name);
|
||||
|
||||
for(;;){
|
||||
const char *filterName;
|
||||
int q= 1000000; //PP_QUALITY_MAX;
|
||||
int chrom=-1;
|
||||
int luma=-1;
|
||||
const char *option;
|
||||
const char *options[OPTIONS_ARRAY_SIZE];
|
||||
int i;
|
||||
int filterNameOk=0;
|
||||
int numOfUnknownOptions=0;
|
||||
int enable=1; //does the user want us to enabled or disabled the filter
|
||||
char *tokstate;
|
||||
|
||||
filterToken= av_strtok(p, filterDelimiters, &tokstate);
|
||||
if(!filterToken) break;
|
||||
p+= strlen(filterToken) + 1; // p points to next filterToken
|
||||
filterName= av_strtok(filterToken, optionDelimiters, &tokstate);
|
||||
if (!filterName) {
|
||||
ppMode->error++;
|
||||
break;
|
||||
}
|
||||
av_log(NULL, AV_LOG_DEBUG, "pp: %s::%s\n", filterToken, filterName);
|
||||
|
||||
if(*filterName == '-'){
|
||||
enable=0;
|
||||
filterName++;
|
||||
}
|
||||
|
||||
for(;;){ //for all options
|
||||
option= av_strtok(NULL, optionDelimiters, &tokstate);
|
||||
if(!option) break;
|
||||
|
||||
av_log(NULL, AV_LOG_DEBUG, "pp: option: %s\n", option);
|
||||
if(!strcmp("autoq", option) || !strcmp("a", option)) q= quality;
|
||||
else if(!strcmp("nochrom", option) || !strcmp("y", option)) chrom=0;
|
||||
else if(!strcmp("chrom", option) || !strcmp("c", option)) chrom=1;
|
||||
else if(!strcmp("noluma", option) || !strcmp("n", option)) luma=0;
|
||||
else{
|
||||
options[numOfUnknownOptions] = option;
|
||||
numOfUnknownOptions++;
|
||||
}
|
||||
if(numOfUnknownOptions >= OPTIONS_ARRAY_SIZE-1) break;
|
||||
}
|
||||
options[numOfUnknownOptions] = NULL;
|
||||
|
||||
/* replace stuff from the replace Table */
|
||||
for(i=0; replaceTable[2*i]; i++){
|
||||
if(!strcmp(replaceTable[2*i], filterName)){
|
||||
size_t newlen = strlen(replaceTable[2*i + 1]);
|
||||
int plen;
|
||||
int spaceLeft;
|
||||
|
||||
p--, *p=',';
|
||||
|
||||
plen= strlen(p);
|
||||
spaceLeft= p - temp + plen;
|
||||
if(spaceLeft + newlen >= GET_MODE_BUFFER_SIZE - 1){
|
||||
ppMode->error++;
|
||||
break;
|
||||
}
|
||||
memmove(p + newlen, p, plen+1);
|
||||
memcpy(p, replaceTable[2*i + 1], newlen);
|
||||
filterNameOk=1;
|
||||
}
|
||||
}
|
||||
|
||||
for(i=0; filters[i].shortName; i++){
|
||||
if( !strcmp(filters[i].longName, filterName)
|
||||
|| !strcmp(filters[i].shortName, filterName)){
|
||||
ppMode->lumMode &= ~filters[i].mask;
|
||||
ppMode->chromMode &= ~filters[i].mask;
|
||||
|
||||
filterNameOk=1;
|
||||
if(!enable) break; // user wants to disable it
|
||||
|
||||
if(q >= filters[i].minLumQuality && luma)
|
||||
ppMode->lumMode|= filters[i].mask;
|
||||
if(chrom==1 || (chrom==-1 && filters[i].chromDefault))
|
||||
if(q >= filters[i].minChromQuality)
|
||||
ppMode->chromMode|= filters[i].mask;
|
||||
|
||||
if(filters[i].mask == LEVEL_FIX){
|
||||
int o;
|
||||
ppMode->minAllowedY= 16;
|
||||
ppMode->maxAllowedY= 234;
|
||||
for(o=0; options[o]; o++){
|
||||
if( !strcmp(options[o],"fullyrange")
|
||||
||!strcmp(options[o],"f")){
|
||||
ppMode->minAllowedY= 0;
|
||||
ppMode->maxAllowedY= 255;
|
||||
numOfUnknownOptions--;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(filters[i].mask == TEMP_NOISE_FILTER)
|
||||
{
|
||||
int o;
|
||||
int numOfNoises=0;
|
||||
|
||||
for(o=0; options[o]; o++){
|
||||
char *tail;
|
||||
ppMode->maxTmpNoise[numOfNoises]=
|
||||
strtol(options[o], &tail, 0);
|
||||
if(tail!=options[o]){
|
||||
numOfNoises++;
|
||||
numOfUnknownOptions--;
|
||||
if(numOfNoises >= 3) break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(filters[i].mask == V_DEBLOCK || filters[i].mask == H_DEBLOCK
|
||||
|| filters[i].mask == V_A_DEBLOCK || filters[i].mask == H_A_DEBLOCK){
|
||||
int o;
|
||||
|
||||
for(o=0; options[o] && o<2; o++){
|
||||
char *tail;
|
||||
int val= strtol(options[o], &tail, 0);
|
||||
if(tail==options[o]) break;
|
||||
|
||||
numOfUnknownOptions--;
|
||||
if(o==0) ppMode->baseDcDiff= val;
|
||||
else ppMode->flatnessThreshold= val;
|
||||
}
|
||||
}
|
||||
else if(filters[i].mask == FORCE_QUANT){
|
||||
int o;
|
||||
ppMode->forcedQuant= 15;
|
||||
|
||||
for(o=0; options[o] && o<1; o++){
|
||||
char *tail;
|
||||
int val= strtol(options[o], &tail, 0);
|
||||
if(tail==options[o]) break;
|
||||
|
||||
numOfUnknownOptions--;
|
||||
ppMode->forcedQuant= val;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!filterNameOk) ppMode->error++;
|
||||
ppMode->error += numOfUnknownOptions;
|
||||
}
|
||||
|
||||
av_log(NULL, AV_LOG_DEBUG, "pp: lumMode=%X, chromMode=%X\n", ppMode->lumMode, ppMode->chromMode);
|
||||
if(ppMode->error){
|
||||
av_log(NULL, AV_LOG_ERROR, "%d errors in postprocess string \"%s\"\n", ppMode->error, name);
|
||||
av_free(ppMode);
|
||||
return NULL;
|
||||
}
|
||||
return ppMode;
|
||||
}
|
||||
|
||||
void pp_free_mode(pp_mode *mode){
|
||||
av_free(mode);
|
||||
}
|
||||
|
||||
static void reallocAlign(void **p, int size){
|
||||
av_free(*p);
|
||||
*p= av_mallocz(size);
|
||||
}
|
||||
|
||||
static void reallocBuffers(PPContext *c, int width, int height, int stride, int qpStride){
|
||||
int mbWidth = (width+15)>>4;
|
||||
int mbHeight= (height+15)>>4;
|
||||
int i;
|
||||
|
||||
c->stride= stride;
|
||||
c->qpStride= qpStride;
|
||||
|
||||
reallocAlign((void **)&c->tempDst, stride*24+32);
|
||||
reallocAlign((void **)&c->tempSrc, stride*24);
|
||||
reallocAlign((void **)&c->tempBlocks, 2*16*8);
|
||||
reallocAlign((void **)&c->yHistogram, 256*sizeof(uint64_t));
|
||||
for(i=0; i<256; i++)
|
||||
c->yHistogram[i]= width*height/64*15/256;
|
||||
|
||||
for(i=0; i<3; i++){
|
||||
//Note: The +17*1024 is just there so I do not have to worry about r/w over the end.
|
||||
reallocAlign((void **)&c->tempBlurred[i], stride*mbHeight*16 + 17*1024);
|
||||
reallocAlign((void **)&c->tempBlurredPast[i], 256*((height+7)&(~7))/2 + 17*1024);//FIXME size
|
||||
}
|
||||
|
||||
reallocAlign((void **)&c->deintTemp, 2*width+32);
|
||||
reallocAlign((void **)&c->nonBQPTable, qpStride*mbHeight*sizeof(int8_t));
|
||||
reallocAlign((void **)&c->stdQPTable, qpStride*mbHeight*sizeof(int8_t));
|
||||
reallocAlign((void **)&c->forcedQPTable, mbWidth*sizeof(int8_t));
|
||||
}
|
||||
|
||||
static const char * context_to_name(void * ptr) {
|
||||
return "postproc";
|
||||
}
|
||||
|
||||
static const AVClass av_codec_context_class = { "Postproc", context_to_name, NULL };
|
||||
|
||||
av_cold pp_context *pp_get_context(int width, int height, int cpuCaps){
|
||||
PPContext *c= av_mallocz(sizeof(PPContext));
|
||||
int stride= FFALIGN(width, 16); //assumed / will realloc if needed
|
||||
int qpStride= (width+15)/16 + 2; //assumed / will realloc if needed
|
||||
|
||||
if (!c)
|
||||
return NULL;
|
||||
|
||||
c->av_class = &av_codec_context_class;
|
||||
if(cpuCaps&PP_FORMAT){
|
||||
c->hChromaSubSample= cpuCaps&0x3;
|
||||
c->vChromaSubSample= (cpuCaps>>4)&0x3;
|
||||
}else{
|
||||
c->hChromaSubSample= 1;
|
||||
c->vChromaSubSample= 1;
|
||||
}
|
||||
if (cpuCaps & PP_CPU_CAPS_AUTO) {
|
||||
c->cpuCaps = av_get_cpu_flags();
|
||||
} else {
|
||||
c->cpuCaps = 0;
|
||||
if (cpuCaps & PP_CPU_CAPS_ALTIVEC) c->cpuCaps |= AV_CPU_FLAG_ALTIVEC;
|
||||
}
|
||||
|
||||
reallocBuffers(c, width, height, stride, qpStride);
|
||||
|
||||
c->frameNum=-1;
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
av_cold void pp_free_context(void *vc){
|
||||
PPContext *c = (PPContext*)vc;
|
||||
int i;
|
||||
|
||||
for(i=0; i<FF_ARRAY_ELEMS(c->tempBlurred); i++)
|
||||
av_free(c->tempBlurred[i]);
|
||||
for(i=0; i<FF_ARRAY_ELEMS(c->tempBlurredPast); i++)
|
||||
av_free(c->tempBlurredPast[i]);
|
||||
|
||||
av_free(c->tempBlocks);
|
||||
av_free(c->yHistogram);
|
||||
av_free(c->tempDst);
|
||||
av_free(c->tempSrc);
|
||||
av_free(c->deintTemp);
|
||||
av_free(c->stdQPTable);
|
||||
av_free(c->nonBQPTable);
|
||||
av_free(c->forcedQPTable);
|
||||
|
||||
memset(c, 0, sizeof(PPContext));
|
||||
|
||||
av_free(c);
|
||||
}
|
||||
|
||||
void pp_postprocess(const uint8_t * src[3], const int srcStride[3],
|
||||
uint8_t * dst[3], const int dstStride[3],
|
||||
int width, int height,
|
||||
const int8_t *QP_store, int QPStride,
|
||||
pp_mode *vm, void *vc, int pict_type)
|
||||
{
|
||||
int mbWidth = (width+15)>>4;
|
||||
int mbHeight= (height+15)>>4;
|
||||
PPMode *mode = vm;
|
||||
PPContext *c = vc;
|
||||
int minStride= FFMAX(FFABS(srcStride[0]), FFABS(dstStride[0]));
|
||||
int absQPStride = FFABS(QPStride);
|
||||
|
||||
if (width < 16 || height < 16) {
|
||||
av_log(c, AV_LOG_ERROR, "Postproc is designed to filter 16x16 macroblock based formats, the minimum size is 1 macroblock\n");
|
||||
return;
|
||||
}
|
||||
|
||||
// c->stride and c->QPStride are always positive
|
||||
if(c->stride < minStride || c->qpStride < absQPStride)
|
||||
reallocBuffers(c, width, height,
|
||||
FFMAX(minStride, c->stride),
|
||||
FFMAX(c->qpStride, absQPStride));
|
||||
|
||||
if(!QP_store || (mode->lumMode & FORCE_QUANT)){
|
||||
int i;
|
||||
QP_store= c->forcedQPTable;
|
||||
absQPStride = QPStride = 0;
|
||||
if(mode->lumMode & FORCE_QUANT)
|
||||
for(i=0; i<mbWidth; i++) c->forcedQPTable[i]= mode->forcedQuant;
|
||||
else
|
||||
for(i=0; i<mbWidth; i++) c->forcedQPTable[i]= 1;
|
||||
}
|
||||
|
||||
if(pict_type & PP_PICT_TYPE_QP2){
|
||||
int i;
|
||||
const int count= FFMAX(mbHeight * absQPStride, mbWidth);
|
||||
for(i=0; i<(count>>2); i++){
|
||||
AV_WN32(c->stdQPTable + (i<<2), AV_RN32(QP_store + (i<<2)) >> 1 & 0x7F7F7F7F);
|
||||
}
|
||||
for(i<<=2; i<count; i++){
|
||||
c->stdQPTable[i] = QP_store[i]>>1;
|
||||
}
|
||||
QP_store= c->stdQPTable;
|
||||
QPStride= absQPStride;
|
||||
}
|
||||
|
||||
if(0){
|
||||
int x,y;
|
||||
for(y=0; y<mbHeight; y++){
|
||||
for(x=0; x<mbWidth; x++){
|
||||
av_log(c, AV_LOG_INFO, "%2d ", QP_store[x + y*QPStride]);
|
||||
}
|
||||
av_log(c, AV_LOG_INFO, "\n");
|
||||
}
|
||||
av_log(c, AV_LOG_INFO, "\n");
|
||||
}
|
||||
|
||||
if((pict_type&7)!=3){
|
||||
if (QPStride >= 0){
|
||||
int i;
|
||||
const int count= FFMAX(mbHeight * QPStride, mbWidth);
|
||||
for(i=0; i<(count>>2); i++){
|
||||
AV_WN32(c->nonBQPTable + (i<<2), AV_RN32(QP_store + (i<<2)) & 0x3F3F3F3F);
|
||||
}
|
||||
for(i<<=2; i<count; i++){
|
||||
c->nonBQPTable[i] = QP_store[i] & 0x3F;
|
||||
}
|
||||
} else {
|
||||
int i,j;
|
||||
for(i=0; i<mbHeight; i++) {
|
||||
for(j=0; j<absQPStride; j++) {
|
||||
c->nonBQPTable[i*absQPStride+j] = QP_store[i*QPStride+j] & 0x3F;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
av_log(c, AV_LOG_DEBUG, "using npp filters 0x%X/0x%X\n",
|
||||
mode->lumMode, mode->chromMode);
|
||||
|
||||
postProcess(src[0], srcStride[0], dst[0], dstStride[0],
|
||||
width, height, QP_store, QPStride, 0, mode, c);
|
||||
|
||||
if (!(src[1] && src[2] && dst[1] && dst[2]))
|
||||
return;
|
||||
|
||||
width = (width )>>c->hChromaSubSample;
|
||||
height = (height)>>c->vChromaSubSample;
|
||||
|
||||
if(mode->chromMode){
|
||||
postProcess(src[1], srcStride[1], dst[1], dstStride[1],
|
||||
width, height, QP_store, QPStride, 1, mode, c);
|
||||
postProcess(src[2], srcStride[2], dst[2], dstStride[2],
|
||||
width, height, QP_store, QPStride, 2, mode, c);
|
||||
}
|
||||
else if(srcStride[1] == dstStride[1] && srcStride[2] == dstStride[2]){
|
||||
linecpy(dst[1], src[1], height, srcStride[1]);
|
||||
linecpy(dst[2], src[2], height, srcStride[2]);
|
||||
}else{
|
||||
int y;
|
||||
for(y=0; y<height; y++){
|
||||
memcpy(&(dst[1][y*dstStride[1]]), &(src[1][y*srcStride[1]]), width);
|
||||
memcpy(&(dst[2][y*dstStride[2]]), &(src[2][y*srcStride[2]]), width);
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,109 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2001-2003 Michael Niedermayer (michaelni@gmx.at)
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef POSTPROC_POSTPROCESS_H
|
||||
#define POSTPROC_POSTPROCESS_H
|
||||
|
||||
/**
|
||||
* @file
|
||||
* @ingroup lpp
|
||||
* external API header
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup lpp libpostproc
|
||||
* Video postprocessing library.
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "libpostproc/version_major.h"
|
||||
#ifndef HAVE_AV_CONFIG_H
|
||||
/* When included as part of the ffmpeg build, only include the major version
|
||||
* to avoid unnecessary rebuilds. When included externally, keep including
|
||||
* the full version information. */
|
||||
#include "libpostproc/version.h"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Return the LIBPOSTPROC_VERSION_INT constant.
|
||||
*/
|
||||
unsigned postproc_version(void);
|
||||
|
||||
/**
|
||||
* Return the libpostproc build-time configuration.
|
||||
*/
|
||||
const char *postproc_configuration(void);
|
||||
|
||||
/**
|
||||
* Return the libpostproc license.
|
||||
*/
|
||||
const char *postproc_license(void);
|
||||
|
||||
#define PP_QUALITY_MAX 6
|
||||
|
||||
#include <inttypes.h>
|
||||
|
||||
typedef void pp_context;
|
||||
typedef void pp_mode;
|
||||
|
||||
extern const char pp_help[]; ///< a simple help text
|
||||
|
||||
void pp_postprocess(const uint8_t * src[3], const int srcStride[3],
|
||||
uint8_t * dst[3], const int dstStride[3],
|
||||
int horizontalSize, int verticalSize,
|
||||
const int8_t *QP_store, int QP_stride,
|
||||
pp_mode *mode, pp_context *ppContext, int pict_type);
|
||||
|
||||
|
||||
/**
|
||||
* Return a pp_mode or NULL if an error occurred.
|
||||
*
|
||||
* @param name the string after "-pp" on the command line
|
||||
* @param quality a number from 0 to PP_QUALITY_MAX
|
||||
*/
|
||||
pp_mode *pp_get_mode_by_name_and_quality(const char *name, int quality);
|
||||
void pp_free_mode(pp_mode *mode);
|
||||
|
||||
pp_context *pp_get_context(int width, int height, int flags);
|
||||
void pp_free_context(pp_context *ppContext);
|
||||
|
||||
#define PP_CPU_CAPS_MMX 0x80000000
|
||||
#define PP_CPU_CAPS_MMX2 0x20000000
|
||||
#if FF_API_PP_AMD_3DNOW
|
||||
#define PP_CPU_CAPS_3DNOW 0x40000000
|
||||
#endif
|
||||
#define PP_CPU_CAPS_ALTIVEC 0x10000000
|
||||
#define PP_CPU_CAPS_AUTO 0x00080000
|
||||
|
||||
#define PP_FORMAT 0x00000008
|
||||
#define PP_FORMAT_420 (0x00000011|PP_FORMAT)
|
||||
#define PP_FORMAT_422 (0x00000001|PP_FORMAT)
|
||||
#define PP_FORMAT_411 (0x00000002|PP_FORMAT)
|
||||
#define PP_FORMAT_444 (0x00000000|PP_FORMAT)
|
||||
#define PP_FORMAT_440 (0x00000010|PP_FORMAT)
|
||||
|
||||
#define PP_PICT_TYPE_QP2 0x00000010 ///< MPEG2 style QScale
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* POSTPROC_POSTPROCESS_H */
|
File diff suppressed because it is too large
Load Diff
@@ -1,185 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2001-2002 Michael Niedermayer (michaelni@gmx.at)
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* internal API header.
|
||||
*/
|
||||
|
||||
#ifndef POSTPROC_POSTPROCESS_INTERNAL_H
|
||||
#define POSTPROC_POSTPROCESS_INTERNAL_H
|
||||
|
||||
#include <string.h>
|
||||
#include "libavutil/avutil.h"
|
||||
#include "libavutil/intmath.h"
|
||||
#include "libavutil/log.h"
|
||||
#include "libavutil/mem_internal.h"
|
||||
#include "postprocess.h"
|
||||
|
||||
#define V_DEBLOCK 0x01
|
||||
#define H_DEBLOCK 0x02
|
||||
#define DERING 0x04
|
||||
#define LEVEL_FIX 0x08 ///< Brightness & Contrast
|
||||
|
||||
#define LUM_V_DEBLOCK V_DEBLOCK // 1
|
||||
#define LUM_H_DEBLOCK H_DEBLOCK // 2
|
||||
#define CHROM_V_DEBLOCK (V_DEBLOCK<<4) // 16
|
||||
#define CHROM_H_DEBLOCK (H_DEBLOCK<<4) // 32
|
||||
#define LUM_DERING DERING // 4
|
||||
#define CHROM_DERING (DERING<<4) // 64
|
||||
#define LUM_LEVEL_FIX LEVEL_FIX // 8
|
||||
#define CHROM_LEVEL_FIX (LEVEL_FIX<<4) // 128 (not implemented yet)
|
||||
|
||||
// Experimental vertical filters
|
||||
#define V_X1_FILTER 0x0200 // 512
|
||||
#define V_A_DEBLOCK 0x0400
|
||||
|
||||
// Experimental horizontal filters
|
||||
#define H_X1_FILTER 0x2000 // 8192
|
||||
#define H_A_DEBLOCK 0x4000
|
||||
|
||||
/// select between full y range (255-0) or standard one (234-16)
|
||||
#define FULL_Y_RANGE 0x8000 // 32768
|
||||
|
||||
//Deinterlacing Filters
|
||||
#define LINEAR_IPOL_DEINT_FILTER 0x10000 // 65536
|
||||
#define LINEAR_BLEND_DEINT_FILTER 0x20000 // 131072
|
||||
#define CUBIC_BLEND_DEINT_FILTER 0x8000 // (not implemented yet)
|
||||
#define CUBIC_IPOL_DEINT_FILTER 0x40000 // 262144
|
||||
#define MEDIAN_DEINT_FILTER 0x80000 // 524288
|
||||
#define FFMPEG_DEINT_FILTER 0x400000
|
||||
#define LOWPASS5_DEINT_FILTER 0x800000
|
||||
|
||||
#define TEMP_NOISE_FILTER 0x100000
|
||||
#define FORCE_QUANT 0x200000
|
||||
#define BITEXACT 0x1000000
|
||||
#define VISUALIZE 0x2000000
|
||||
|
||||
//use if you want a faster postprocessing code
|
||||
//cannot differentiate between chroma & luma filters (both on or both off)
|
||||
//obviously the -pp option on the command line has no effect except turning the here selected
|
||||
//filters on
|
||||
//#define COMPILE_TIME_MODE 0x77
|
||||
|
||||
/**
|
||||
* Postprocessing filter.
|
||||
*/
|
||||
struct PPFilter{
|
||||
const char *shortName;
|
||||
const char *longName;
|
||||
int chromDefault; ///< is chrominance filtering on by default if this filter is manually activated
|
||||
int minLumQuality; ///< minimum quality to turn luminance filtering on
|
||||
int minChromQuality; ///< minimum quality to turn chrominance filtering on
|
||||
int mask; ///< Bitmask to turn this filter on
|
||||
};
|
||||
|
||||
/**
|
||||
* Postprocessing mode.
|
||||
*/
|
||||
typedef struct PPMode{
|
||||
int lumMode; ///< activates filters for luminance
|
||||
int chromMode; ///< activates filters for chrominance
|
||||
int error; ///< non zero on error
|
||||
|
||||
int minAllowedY; ///< for brightness correction
|
||||
int maxAllowedY; ///< for brightness correction
|
||||
AVRational maxClippedThreshold; ///< amount of "black" you are willing to lose to get a brightness-corrected picture
|
||||
|
||||
int maxTmpNoise[3]; ///< for Temporal Noise Reducing filter (Maximal sum of abs differences)
|
||||
|
||||
int baseDcDiff;
|
||||
int flatnessThreshold;
|
||||
|
||||
int forcedQuant; ///< quantizer if FORCE_QUANT is used
|
||||
} PPMode;
|
||||
|
||||
/**
|
||||
* postprocess context.
|
||||
*/
|
||||
typedef struct PPContext{
|
||||
/**
|
||||
* info on struct for av_log
|
||||
*/
|
||||
const AVClass *av_class;
|
||||
|
||||
uint8_t *tempBlocks; ///<used for the horizontal code
|
||||
|
||||
/**
|
||||
* luma histogram.
|
||||
* we need 64bit here otherwise we'll going to have a problem
|
||||
* after watching a black picture for 5 hours
|
||||
*/
|
||||
uint64_t *yHistogram;
|
||||
|
||||
DECLARE_ALIGNED(8, uint64_t, packedYOffset);
|
||||
DECLARE_ALIGNED(8, uint64_t, packedYScale);
|
||||
|
||||
/** Temporal noise reducing buffers */
|
||||
uint8_t *tempBlurred[3];
|
||||
int32_t *tempBlurredPast[3];
|
||||
|
||||
/** Temporary buffers for handling the last row(s) */
|
||||
uint8_t *tempDst;
|
||||
uint8_t *tempSrc;
|
||||
|
||||
uint8_t *deintTemp;
|
||||
|
||||
DECLARE_ALIGNED(8, uint64_t, pQPb);
|
||||
DECLARE_ALIGNED(8, uint64_t, pQPb2);
|
||||
|
||||
DECLARE_ALIGNED(32, uint64_t, pQPb_block)[4];
|
||||
DECLARE_ALIGNED(32, uint64_t, pQPb2_block)[4];
|
||||
|
||||
DECLARE_ALIGNED(32, uint64_t, mmxDcOffset)[64];
|
||||
DECLARE_ALIGNED(32, uint64_t, mmxDcThreshold)[64];
|
||||
|
||||
int8_t *stdQPTable; ///< used to fix MPEG2 style qscale
|
||||
int8_t *nonBQPTable;
|
||||
int8_t *forcedQPTable;
|
||||
|
||||
int QP;
|
||||
int nonBQP;
|
||||
|
||||
DECLARE_ALIGNED(32, int, QP_block)[4];
|
||||
DECLARE_ALIGNED(32, int, nonBQP_block)[4];
|
||||
|
||||
int frameNum;
|
||||
|
||||
int cpuCaps;
|
||||
|
||||
int qpStride; ///<size of qp buffers (needed to realloc them if needed)
|
||||
int stride; ///<size of some buffers (needed to realloc them if needed)
|
||||
|
||||
int hChromaSubSample;
|
||||
int vChromaSubSample;
|
||||
|
||||
PPMode ppMode;
|
||||
} PPContext;
|
||||
|
||||
|
||||
static inline void linecpy(void *dest, const void *src, int lines, int stride) {
|
||||
if (stride > 0) {
|
||||
memcpy(dest, src, lines*stride);
|
||||
} else {
|
||||
memcpy((uint8_t*)dest+(lines-1)*stride, (const uint8_t*)src+(lines-1)*stride, -lines*stride);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* POSTPROC_POSTPROCESS_INTERNAL_H */
|
File diff suppressed because it is too large
Load Diff
@@ -1,55 +0,0 @@
|
||||
/*
|
||||
* Windows resource file for libpostproc
|
||||
*
|
||||
* Copyright (C) 2012 James Almer
|
||||
* Copyright (C) 2013 Tiancheng "Timothy" Gu
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
#include "libpostproc/version.h"
|
||||
#include "libavutil/ffversion.h"
|
||||
#include "config.h"
|
||||
|
||||
1 VERSIONINFO
|
||||
FILEVERSION LIBPOSTPROC_VERSION_MAJOR, LIBPOSTPROC_VERSION_MINOR, LIBPOSTPROC_VERSION_MICRO, 0
|
||||
PRODUCTVERSION LIBPOSTPROC_VERSION_MAJOR, LIBPOSTPROC_VERSION_MINOR, LIBPOSTPROC_VERSION_MICRO, 0
|
||||
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
|
||||
FILEOS VOS_NT_WINDOWS32
|
||||
FILETYPE VFT_DLL
|
||||
{
|
||||
BLOCK "StringFileInfo"
|
||||
{
|
||||
BLOCK "040904B0"
|
||||
{
|
||||
VALUE "CompanyName", "FFmpeg Project"
|
||||
VALUE "FileDescription", "FFmpeg postprocessing library"
|
||||
VALUE "FileVersion", AV_STRINGIFY(LIBPOSTPROC_VERSION)
|
||||
VALUE "InternalName", "libpostproc"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2000-" AV_STRINGIFY(CONFIG_THIS_YEAR) " FFmpeg Project"
|
||||
VALUE "OriginalFilename", "postproc" BUILDSUF "-" AV_STRINGIFY(LIBPOSTPROC_VERSION_MAJOR) SLIBSUF
|
||||
VALUE "ProductName", "FFmpeg"
|
||||
VALUE "ProductVersion", FFMPEG_VERSION
|
||||
}
|
||||
}
|
||||
|
||||
BLOCK "VarFileInfo"
|
||||
{
|
||||
VALUE "Translation", 0x0409, 0x04B0
|
||||
}
|
||||
}
|
3
libpostproc/tests/.gitignore
vendored
3
libpostproc/tests/.gitignore
vendored
@@ -1,3 +0,0 @@
|
||||
/blocktest
|
||||
/stripetest
|
||||
/temptest
|
@@ -1,113 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Michael Niedermayer
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "libavutil/frame.h"
|
||||
#include "libavutil/adler32.h"
|
||||
#include "libpostproc/postprocess.h"
|
||||
#include "test_utils.h"
|
||||
|
||||
typedef const uint8_t *cuint8;
|
||||
|
||||
static void blocks(AVFrame *frame, int blocksize, int mul)
|
||||
{
|
||||
for(int y=0; y<frame->height; y++) {
|
||||
for(int x=0; x<frame->width; x++) {
|
||||
frame->data[0][x + y*frame->linesize[0]] = x/blocksize*mul + y/blocksize*mul;
|
||||
}
|
||||
}
|
||||
for(int y=0; y<(frame->height+1)/2; y++) {
|
||||
for(int x=0; x<(frame->width+1)/2; x++) {
|
||||
frame->data[1][x + y*frame->linesize[1]] = x/blocksize*mul + y/blocksize*mul;
|
||||
frame->data[2][x + y*frame->linesize[2]] = x/blocksize * (y/blocksize)*mul;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int64_t test(int width, int height, const char * filter_string, int blocksize, int flags, int pict_type, int quality) {
|
||||
AVFrame *in = av_frame_alloc();
|
||||
AVFrame *out = av_frame_alloc();
|
||||
pp_context *context = pp_get_context(width, height, flags);
|
||||
pp_mode *mode = pp_get_mode_by_name_and_quality(filter_string, quality);
|
||||
int64_t ret;
|
||||
#define QP_STRIDE (352/16)
|
||||
int8_t qp[QP_STRIDE * 352/16];
|
||||
|
||||
if (!in || !out || !context || !mode) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto end;
|
||||
}
|
||||
|
||||
in-> width = out->width = width;
|
||||
in->height = out->height = height;
|
||||
in->format = out->format = AV_PIX_FMT_YUV420P;
|
||||
|
||||
ret = av_frame_get_buffer(in, 0);
|
||||
if (ret < 0)
|
||||
goto end;
|
||||
|
||||
ret = av_frame_get_buffer(out, 0);
|
||||
if (ret < 0)
|
||||
goto end;
|
||||
|
||||
blocks(in, blocksize, 11);
|
||||
|
||||
for(int i= 0; i<sizeof(qp); i++)
|
||||
qp[i] = i % 31;
|
||||
|
||||
pp_postprocess( (cuint8[]){in->data[0], in->data[1], in->data[2]}, in->linesize,
|
||||
out->data, out->linesize,
|
||||
width, height, qp, QP_STRIDE,
|
||||
mode, context, pict_type);
|
||||
|
||||
ret = ff_chksum(out);
|
||||
end:
|
||||
av_frame_free(&in);
|
||||
av_frame_free(&out);
|
||||
pp_free_context(context);
|
||||
pp_free_mode(mode);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
const char *teststrings[] = {
|
||||
"be,de",
|
||||
"be,h1,v1",
|
||||
"be,ha,va",
|
||||
"be,al,de",
|
||||
"be,vi,de",
|
||||
"be,vi,ha,va",
|
||||
};
|
||||
|
||||
for (int w=16; w< 352; w=w*3-16) {
|
||||
for (int h=16; h< 352; h=h*5-16) {
|
||||
for (int b=1; b<17; b*=2) {
|
||||
for (int c=0; c<6; c++) {
|
||||
for (int q=0; q<17; q = 2*q+1) {
|
||||
int64_t ret = test(w, h, teststrings[c], b, PP_FORMAT_420, 0, q);
|
||||
printf("blocktest %dx%d %s b:%d q:%d result %"PRIX64"\n", w, h, teststrings[c], b, q, ret);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
@@ -1,115 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Michael Niedermayer
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "libavutil/frame.h"
|
||||
#include "libavutil/adler32.h"
|
||||
#include "libpostproc/postprocess.h"
|
||||
#include "test_utils.h"
|
||||
|
||||
typedef const uint8_t *cuint8;
|
||||
|
||||
static void strips(AVFrame *frame, int mul)
|
||||
{
|
||||
for(int y=0; y<frame->height; y++) {
|
||||
for(int x=0; x<frame->width; x++) {
|
||||
if (y&1) {
|
||||
frame->data[0][x + y*frame->linesize[0]] = x*x + y*mul;
|
||||
} else {
|
||||
frame->data[0][x + y*frame->linesize[0]] = (y-x)*(y-x);
|
||||
}
|
||||
}
|
||||
}
|
||||
for(int y=0; y<(frame->height+1)/2; y++) {
|
||||
for(int x=0; x<(frame->width+1)/2; x++) {
|
||||
if (y&1) {
|
||||
frame->data[1][x + y*frame->linesize[1]] = x + y + mul;
|
||||
frame->data[2][x + y*frame->linesize[2]] = mul*x - y*x;
|
||||
} else {
|
||||
frame->data[1][x + y*frame->linesize[1]] = (x - y)/(mul+1);
|
||||
frame->data[2][x + y*frame->linesize[2]] = (y + x)/(mul+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int64_t test(int width, int height, const char *testname, int mul, int flags, int pict_type, int quality) {
|
||||
AVFrame *in = av_frame_alloc();
|
||||
AVFrame *out = av_frame_alloc();
|
||||
pp_context *context = pp_get_context(width, height, flags);
|
||||
pp_mode *mode = pp_get_mode_by_name_and_quality(testname, quality);
|
||||
int64_t ret;
|
||||
|
||||
if (!in || !out || !context || !mode) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto end;
|
||||
}
|
||||
|
||||
in-> width = out->width = width;
|
||||
in->height = out->height = height;
|
||||
in->format = out->format = AV_PIX_FMT_YUV420P;
|
||||
|
||||
ret = av_frame_get_buffer(in, 0);
|
||||
if (ret < 0)
|
||||
goto end;
|
||||
|
||||
ret = av_frame_get_buffer(out, 0);
|
||||
if (ret < 0)
|
||||
goto end;
|
||||
|
||||
strips(in, mul);
|
||||
|
||||
pp_postprocess( (cuint8[]){in->data[0], in->data[1], in->data[2]}, in->linesize,
|
||||
out->data, out->linesize,
|
||||
width, height, NULL, 0,
|
||||
mode, context, pict_type);
|
||||
|
||||
ret = ff_chksum(out);
|
||||
end:
|
||||
av_frame_free(&in);
|
||||
av_frame_free(&out);
|
||||
pp_free_context(context);
|
||||
pp_free_mode(mode);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
const char *teststrings[] = {
|
||||
"be,lb",
|
||||
"be,li",
|
||||
"be,ci",
|
||||
"be,md",
|
||||
"be,fd",
|
||||
"be,l5",
|
||||
};
|
||||
|
||||
for (int w=16; w< 352; w=w*3-16) {
|
||||
for (int h=16; h< 352; h=h*5-16) {
|
||||
for (int b=0; b<6; b++) {
|
||||
for (int m=0; m<17; m = 2*m+1) {
|
||||
int64_t ret = test(w, h, teststrings[b], m, PP_FORMAT_420, 0, 11);
|
||||
printf("striptest %dx%d T:%s m:%d result %"PRIX64"\n", w, h, teststrings[b], m, ret);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
@@ -1,106 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Michael Niedermayer
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "libavutil/frame.h"
|
||||
#include "libavutil/adler32.h"
|
||||
#include "libpostproc/postprocess.h"
|
||||
#include "test_utils.h"
|
||||
|
||||
typedef const uint8_t *cuint8;
|
||||
|
||||
static void stuff(AVFrame *frame, unsigned *state, int mul)
|
||||
{
|
||||
for(int y=0; y<frame->height; y++) {
|
||||
for(int x=0; x<frame->width; x++) {
|
||||
*state= *state*1664525+1013904223;
|
||||
frame->data[0][x + y*frame->linesize[0]] = x*x + (y-x)*mul + ((((x+y)&0xFF)* (int64_t)(*state))>>32);
|
||||
}
|
||||
}
|
||||
for(int y=0; y<(frame->height+1)/2; y++) {
|
||||
for(int x=0; x<(frame->width+1)/2; x++) {
|
||||
*state= *state*1664525+1013904223;
|
||||
frame->data[1][x + y*frame->linesize[1]] = x + y + ((mul*(int64_t)(*state))>>32);
|
||||
frame->data[2][x + y*frame->linesize[2]] = mul*x - ((y*x*(int64_t)(*state))>>32);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int64_t test(int width, int height, const char *testname, int mul, int flags, int pict_type, int quality) {
|
||||
AVFrame *in = av_frame_alloc();
|
||||
AVFrame *out = av_frame_alloc();
|
||||
pp_context *context = pp_get_context(width, height, flags);
|
||||
pp_mode *mode = pp_get_mode_by_name_and_quality(testname, quality);
|
||||
int64_t ret;
|
||||
|
||||
if (!in || !out || !context || !mode) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
goto end;
|
||||
}
|
||||
|
||||
in-> width = out->width = width;
|
||||
in->height = out->height = height;
|
||||
in->format = out->format = AV_PIX_FMT_YUV420P;
|
||||
|
||||
ret = av_frame_get_buffer(in, 0);
|
||||
if (ret < 0)
|
||||
goto end;
|
||||
|
||||
ret = av_frame_get_buffer(out, 0);
|
||||
if (ret < 0)
|
||||
goto end;
|
||||
|
||||
unsigned state = mul;
|
||||
for(int f=0; f<10; f++) {
|
||||
stuff(in, &state, mul);
|
||||
|
||||
pp_postprocess( (cuint8[]){in->data[0], in->data[1], in->data[2]}, in->linesize,
|
||||
out->data, out->linesize,
|
||||
width, height, NULL, 0,
|
||||
mode, context, pict_type);
|
||||
|
||||
ret += ff_chksum(out);
|
||||
ret *= 1664525U;
|
||||
}
|
||||
end:
|
||||
av_frame_free(&in);
|
||||
av_frame_free(&out);
|
||||
pp_free_context(context);
|
||||
pp_free_mode(mode);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
|
||||
for(int a=0; a<600000; a= 17*a+1) {
|
||||
for(int b=a; b<600000; b= 17*b+1) {
|
||||
for(int c=b; c<600000; c= 17*c+1) {
|
||||
for (int m=0; m<128; m = 3*m+1) {
|
||||
char buf[100];
|
||||
snprintf(buf, sizeof(buf), "be,tn:%d:%d:%d", a, b, c);
|
||||
int64_t ret = test(352, 288, buf, m, PP_FORMAT_420, 0, 11);
|
||||
printf("temptest %d %d %d %d result %"PRIX64"\n", a,b,c,m, ret);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
@@ -1,38 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Michael Niedermayer
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "libavutil/frame.h"
|
||||
#include "libavutil/adler32.h"
|
||||
#include "test_utils.h"
|
||||
|
||||
int64_t ff_chksum(AVFrame *f)
|
||||
{
|
||||
AVAdler a = 123;
|
||||
|
||||
for(int y=0; y<f->height; y++) {
|
||||
a = av_adler32_update(a, &f->data[0][y*f->linesize[0]], f->width);
|
||||
}
|
||||
for(int y=0; y<(f->height+1)/2; y++) {
|
||||
a = av_adler32_update(a, &f->data[1][y*f->linesize[1]], (f->width+1)/2);
|
||||
a = av_adler32_update(a, &f->data[2][y*f->linesize[2]], (f->width+1)/2);
|
||||
}
|
||||
|
||||
return a;
|
||||
}
|
@@ -1,27 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Michael Niedermayer
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
|
||||
#ifndef POSTPROC_TESTS_TEST_UTILS_H
|
||||
#define POSTPROC_TESTS_TEST_UTILS_H
|
||||
|
||||
int64_t ff_chksum(AVFrame *f);
|
||||
|
||||
#endif /* POSTPROC_TESTS_TEST_UTILS_H */
|
@@ -1,45 +0,0 @@
|
||||
/*
|
||||
* Version functions.
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "postprocess.h"
|
||||
#include "version.h"
|
||||
|
||||
#include "libavutil/ffversion.h"
|
||||
const char postproc_ffversion[] = "FFmpeg version " FFMPEG_VERSION;
|
||||
|
||||
unsigned postproc_version(void)
|
||||
{
|
||||
static_assert(LIBPOSTPROC_VERSION_MICRO >= 100, "micro version starts at 100");
|
||||
return LIBPOSTPROC_VERSION_INT;
|
||||
}
|
||||
|
||||
const char *postproc_configuration(void)
|
||||
{
|
||||
return FFMPEG_CONFIGURATION;
|
||||
}
|
||||
|
||||
const char *postproc_license(void)
|
||||
{
|
||||
#define LICENSE_PREFIX "libpostproc license: "
|
||||
return &LICENSE_PREFIX FFMPEG_LICENSE[sizeof(LICENSE_PREFIX) - 1];
|
||||
}
|
@@ -1,48 +0,0 @@
|
||||
/*
|
||||
* Version macros.
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef POSTPROC_VERSION_H
|
||||
#define POSTPROC_VERSION_H
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Libpostproc version macros
|
||||
*/
|
||||
|
||||
#include "libavutil/version.h"
|
||||
|
||||
#include "version_major.h"
|
||||
|
||||
#define LIBPOSTPROC_VERSION_MINOR 1
|
||||
#define LIBPOSTPROC_VERSION_MICRO 100
|
||||
|
||||
#define LIBPOSTPROC_VERSION_INT AV_VERSION_INT(LIBPOSTPROC_VERSION_MAJOR, \
|
||||
LIBPOSTPROC_VERSION_MINOR, \
|
||||
LIBPOSTPROC_VERSION_MICRO)
|
||||
#define LIBPOSTPROC_VERSION AV_VERSION(LIBPOSTPROC_VERSION_MAJOR, \
|
||||
LIBPOSTPROC_VERSION_MINOR, \
|
||||
LIBPOSTPROC_VERSION_MICRO)
|
||||
#define LIBPOSTPROC_BUILD LIBPOSTPROC_VERSION_INT
|
||||
|
||||
#define LIBPOSTPROC_IDENT "postproc" AV_STRINGIFY(LIBPOSTPROC_VERSION)
|
||||
|
||||
#define PP_AMD_3DNOW (LIBPOSTPROC_VERSION_MAJOR < 60)
|
||||
|
||||
#endif /* POSTPROC_VERSION_H */
|
@@ -1,33 +0,0 @@
|
||||
/*
|
||||
* Version macros.
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with FFmpeg; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef POSTPROC_VERSION_MAJOR_H
|
||||
#define POSTPROC_VERSION_MAJOR_H
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Libpostproc version macros
|
||||
*/
|
||||
|
||||
#define LIBPOSTPROC_VERSION_MAJOR 59
|
||||
|
||||
#define FF_API_PP_AMD_3DNOW (LIBPOSTPROC_VERSION_MAJOR < 60)
|
||||
|
||||
#endif /* POSTPROC_VERSION_MAJOR_H */
|
@@ -208,7 +208,6 @@ include $(SRC_PATH)/tests/fate/libavformat.mak
|
||||
include $(SRC_PATH)/tests/fate/libavutil.mak
|
||||
include $(SRC_PATH)/tests/fate/libswresample.mak
|
||||
include $(SRC_PATH)/tests/fate/libswscale.mak
|
||||
include $(SRC_PATH)/tests/fate/libpostproc.mak
|
||||
include $(SRC_PATH)/tests/fate/lossless-audio.mak
|
||||
include $(SRC_PATH)/tests/fate/lossless-video.mak
|
||||
include $(SRC_PATH)/tests/fate/matroska.mak
|
||||
|
@@ -533,19 +533,6 @@ fate-filter-idet: CMD = framecrc -flags bitexact -idct simple -i $(SRC) -vf idet
|
||||
FATE_FILTER_VSYNTH_VIDEO_FILTER-$(CONFIG_PAD_FILTER) += fate-filter-pad
|
||||
fate-filter-pad: CMD = video_filter "pad=iw*1.5:ih*1.5:iw*0.3:ih*0.2"
|
||||
|
||||
fate-filter-pp1: CMD = video_filter "pp=fq|4/be/hb/vb/tn/l5/al"
|
||||
fate-filter-pp2: CMD = video_filter "qp=2*(x+y),pp=be/h1/v1/lb"
|
||||
fate-filter-pp3: CMD = video_filter "qp=2*(x+y),pp=be/ha|128|7/va/li"
|
||||
fate-filter-pp4: CMD = video_filter "pp=be/ci"
|
||||
fate-filter-pp5: CMD = video_filter "pp=md"
|
||||
fate-filter-pp6: CMD = video_filter "pp=be/fd"
|
||||
|
||||
FATE_FILTER_VSYNTH_VIDEO_FILTER-$(CONFIG_PP_FILTER) += $(addprefix fate-filter-, pp1 pp4 pp5 pp6)
|
||||
FATE_FILTER_VSYNTH_VIDEO_FILTER-$(call ALLYES, PP_FILTER QP_FILTER) += fate-filter-pp2 fate-filter-pp3
|
||||
|
||||
FATE_FILTER_VSYNTH1_MPEG4_QPRD-$(call FILTERDEMDEC, PP, AVI, MPEG4) += pp
|
||||
fate-filter-pp: CMD = framecrc -flags bitexact -export_side_data venc_params -idct simple -i $(TARGET_PATH)/tests/data/fate/vsynth1-mpeg4-qprd.avi -frames:v 5 -flags +bitexact -vf "pp=be/hb/vb/tn/l5/al"
|
||||
|
||||
FATE_FILTER_VSYNTH1_MPEG4_QPRD-$(call FILTERDEMDEC, PP7, AVI, MPEG4) += pp7
|
||||
fate-filter-pp7: CMD = framecrc -flags bitexact -export_side_data venc_params -idct simple -i $(TARGET_PATH)/tests/data/fate/vsynth1-mpeg4-qprd.avi -frames:v 5 -flags +bitexact -vf "pp7"
|
||||
|
||||
@@ -563,9 +550,6 @@ FATE_FILTER_VSYNTH-yes += $(FATE_FILTER_VSYNTH1_MPEG4_QPRD)
|
||||
$(FATE_FILTER_VSYNTH1_MPEG4_QPRD): fate-vsynth1-mpeg4-qprd
|
||||
fate-vsynth1-mpeg4-qprd: KEEP_FILES ?= 1
|
||||
|
||||
FATE_FILTER_VSYNTH_VIDEO_FILTER-$(call ALLYES, QP_FILTER PP_FILTER) += fate-filter-qp
|
||||
fate-filter-qp: CMD = video_filter "qp=34,pp=be/hb/vb/tn/l5/al"
|
||||
|
||||
FATE_FILTER_VSYNTH-$(call FILTERDEMDEC, SELECT, IMAGE2, PGM) += fate-filter-select
|
||||
fate-filter-select: CMD = framecrc -flags bitexact -idct simple -i $(SRC) -vf "select=not(eq(mod(n\,2)\,0)+eq(mod(n\,3)\,0))" -frames:v 25 -flags +bitexact
|
||||
|
||||
|
@@ -1,14 +0,0 @@
|
||||
FATE_LIBPOSTPROC += fate-blocktest
|
||||
fate-blocktest: libpostproc/tests/blocktest$(EXESUF)
|
||||
fate-blocktest: CMD = run libpostproc/tests/blocktest$(EXESUF)
|
||||
|
||||
FATE_LIBPOSTPROC += fate-stripetest
|
||||
fate-stripetest: libpostproc/tests/stripetest$(EXESUF)
|
||||
fate-stripetest: CMD = run libpostproc/tests/stripetest$(EXESUF)
|
||||
|
||||
FATE_LIBPOSTPROC += fate-temptest
|
||||
fate-temptest: libpostproc/tests/temptest$(EXESUF)
|
||||
fate-temptest: CMD = run libpostproc/tests/temptest$(EXESUF)
|
||||
|
||||
FATE-$(CONFIG_POSTPROC) += $(FATE_LIBPOSTPROC)
|
||||
fate-libpostproc: $(FATE_LIBPOSTPROC)
|
File diff suppressed because it is too large
Load Diff
@@ -1,10 +0,0 @@
|
||||
#tb 0: 1/25
|
||||
#media_type 0: video
|
||||
#codec_id 0: rawvideo
|
||||
#dimensions 0: 352x288
|
||||
#sar 0: 1/1
|
||||
0, 1, 1, 1, 152064, 0x0af8a873
|
||||
0, 2, 2, 1, 152064, 0xaeb99897
|
||||
0, 3, 3, 1, 152064, 0x8f3712c8
|
||||
0, 4, 4, 1, 152064, 0x5bf6a64c
|
||||
0, 5, 5, 1, 152064, 0x262de352
|
@@ -1 +0,0 @@
|
||||
pp1 1a45041dd20a941e36b7729116950107
|
@@ -1 +0,0 @@
|
||||
pp2 566d48ad25dfa7a9680de933cbdf66d9
|
@@ -1 +0,0 @@
|
||||
pp3 586fc14a52699540a865c070dd113229
|
@@ -1 +0,0 @@
|
||||
pp4 8a072806ae6b5c68c5c3c57197641e4a
|
@@ -1 +0,0 @@
|
||||
pp5 5695b8193095a63b9f397fff8343d1a6
|
@@ -1 +0,0 @@
|
||||
pp6 f823b3330935cd1824d526041b429d9a
|
@@ -1 +0,0 @@
|
||||
qp 2d4da13e883e073084d547a6b41ba688
|
@@ -1,360 +0,0 @@
|
||||
striptest 16x16 T:be,lb m:0 result B75464A3
|
||||
striptest 16x16 T:be,lb m:1 result B15C5EE1
|
||||
striptest 16x16 T:be,lb m:3 result 92D058DD
|
||||
striptest 16x16 T:be,lb m:7 result 32044FFD
|
||||
striptest 16x16 T:be,lb m:15 result E10A5D71
|
||||
striptest 16x16 T:be,li m:0 result BDD047EB
|
||||
striptest 16x16 T:be,li m:1 result 616441B0
|
||||
striptest 16x16 T:be,li m:3 result 558C37C7
|
||||
striptest 16x16 T:be,li m:7 result 7C432D31
|
||||
striptest 16x16 T:be,li m:15 result A1EA2DE3
|
||||
striptest 16x16 T:be,ci m:0 result B274814D
|
||||
striptest 16x16 T:be,ci m:1 result 87857BD2
|
||||
striptest 16x16 T:be,ci m:3 result 22D37968
|
||||
striptest 16x16 T:be,ci m:7 result 3DE37214
|
||||
striptest 16x16 T:be,ci m:15 result 8DFC8C6B
|
||||
striptest 16x16 T:be,md m:0 result ECC6470F
|
||||
striptest 16x16 T:be,md m:1 result 26B8426B
|
||||
striptest 16x16 T:be,md m:3 result 29023B89
|
||||
striptest 16x16 T:be,md m:7 result BE9D3241
|
||||
striptest 16x16 T:be,md m:15 result A68334B7
|
||||
striptest 16x16 T:be,fd m:0 result E1654815
|
||||
striptest 16x16 T:be,fd m:1 result 47CB41A7
|
||||
striptest 16x16 T:be,fd m:3 result 72937A6
|
||||
striptest 16x16 T:be,fd m:7 result F1522C31
|
||||
striptest 16x16 T:be,fd m:15 result 9AD82C81
|
||||
striptest 16x16 T:be,l5 m:0 result 3C796608
|
||||
striptest 16x16 T:be,l5 m:1 result E5DB5FD8
|
||||
striptest 16x16 T:be,l5 m:3 result 8C405943
|
||||
striptest 16x16 T:be,l5 m:7 result 11AE4FBB
|
||||
striptest 16x16 T:be,l5 m:15 result F9D5D70
|
||||
striptest 16x64 T:be,lb m:0 result 1E6F2D39
|
||||
striptest 16x64 T:be,lb m:1 result A4A45080
|
||||
striptest 16x64 T:be,lb m:3 result E3F9754A
|
||||
striptest 16x64 T:be,lb m:7 result F07062E9
|
||||
striptest 16x64 T:be,lb m:15 result 146B3ABB
|
||||
striptest 16x64 T:be,li m:0 result 902769D9
|
||||
striptest 16x64 T:be,li m:1 result 587F5FDD
|
||||
striptest 16x64 T:be,li m:3 result 98C64F74
|
||||
striptest 16x64 T:be,li m:7 result D04F2E9D
|
||||
striptest 16x64 T:be,li m:15 result B5BBEE5E
|
||||
striptest 16x64 T:be,ci m:0 result 3B54EFEC
|
||||
striptest 16x64 T:be,ci m:1 result 40553F60
|
||||
striptest 16x64 T:be,ci m:3 result 6CD498B5
|
||||
striptest 16x64 T:be,ci m:7 result 758F94A9
|
||||
striptest 16x64 T:be,ci m:15 result D93F8464
|
||||
striptest 16x64 T:be,md m:0 result 1534468B
|
||||
striptest 16x64 T:be,md m:1 result 51034B7D
|
||||
striptest 16x64 T:be,md m:3 result 8C8D5298
|
||||
striptest 16x64 T:be,md m:7 result BFAE319B
|
||||
striptest 16x64 T:be,md m:15 result AF99F19A
|
||||
striptest 16x64 T:be,fd m:0 result 331B6F73
|
||||
striptest 16x64 T:be,fd m:1 result F0BC60FD
|
||||
striptest 16x64 T:be,fd m:3 result CF484DC1
|
||||
striptest 16x64 T:be,fd m:7 result 4A6D2CF6
|
||||
striptest 16x64 T:be,fd m:15 result A66EEDEB
|
||||
striptest 16x64 T:be,l5 m:0 result 8D5B31DB
|
||||
striptest 16x64 T:be,l5 m:1 result BEF45364
|
||||
striptest 16x64 T:be,l5 m:3 result 49DF773B
|
||||
striptest 16x64 T:be,l5 m:7 result 74C16528
|
||||
striptest 16x64 T:be,l5 m:15 result FE573D47
|
||||
striptest 16x304 T:be,lb m:0 result D64AF689
|
||||
striptest 16x304 T:be,lb m:1 result 4A939516
|
||||
striptest 16x304 T:be,lb m:3 result 6CC4A9F1
|
||||
striptest 16x304 T:be,lb m:7 result B54DA3E6
|
||||
striptest 16x304 T:be,lb m:15 result E8ED947D
|
||||
striptest 16x304 T:be,li m:0 result 18F45FFF
|
||||
striptest 16x304 T:be,li m:1 result 6CFD4AC3
|
||||
striptest 16x304 T:be,li m:3 result 916325A
|
||||
striptest 16x304 T:be,li m:7 result 256D0CC4
|
||||
striptest 16x304 T:be,li m:15 result 89DCCBAC
|
||||
striptest 16x304 T:be,ci m:0 result 126A89B2
|
||||
striptest 16x304 T:be,ci m:1 result 792DD640
|
||||
striptest 16x304 T:be,ci m:3 result F8B15D3
|
||||
striptest 16x304 T:be,ci m:7 result 670C2E42
|
||||
striptest 16x304 T:be,ci m:15 result 71EF500A
|
||||
striptest 16x304 T:be,md m:0 result AA5ECCA8
|
||||
striptest 16x304 T:be,md m:1 result 99A74EF3
|
||||
striptest 16x304 T:be,md m:3 result 732A49B6
|
||||
striptest 16x304 T:be,md m:7 result 41152671
|
||||
striptest 16x304 T:be,md m:15 result 556AE624
|
||||
striptest 16x304 T:be,fd m:0 result 7338643
|
||||
striptest 16x304 T:be,fd m:1 result 752146F0
|
||||
striptest 16x304 T:be,fd m:3 result 4D4D2B2F
|
||||
striptest 16x304 T:be,fd m:7 result 296D03F3
|
||||
striptest 16x304 T:be,fd m:15 result 8362C227
|
||||
striptest 16x304 T:be,l5 m:0 result 2F06030A
|
||||
striptest 16x304 T:be,l5 m:1 result ECA299C7
|
||||
striptest 16x304 T:be,l5 m:3 result 5844ADCA
|
||||
striptest 16x304 T:be,l5 m:7 result 8A9CA976
|
||||
striptest 16x304 T:be,l5 m:15 result 8CDC9B7D
|
||||
striptest 32x16 T:be,lb m:0 result D62DF0CB
|
||||
striptest 32x16 T:be,lb m:1 result 303AE741
|
||||
striptest 32x16 T:be,lb m:3 result 37BFDEB2
|
||||
striptest 32x16 T:be,lb m:7 result 81F3CDB9
|
||||
striptest 32x16 T:be,lb m:15 result 1E7EE673
|
||||
striptest 32x16 T:be,li m:0 result D5CFBCDB
|
||||
striptest 32x16 T:be,li m:1 result 3151B49A
|
||||
striptest 32x16 T:be,li m:3 result 3964A991
|
||||
striptest 32x16 T:be,li m:7 result 6E5D9B68
|
||||
striptest 32x16 T:be,li m:15 result 450E9D09
|
||||
striptest 32x16 T:be,ci m:0 result 160E24FC
|
||||
striptest 32x16 T:be,ci m:1 result 54B5199D
|
||||
striptest 32x16 T:be,ci m:3 result 6B4912C9
|
||||
striptest 32x16 T:be,ci m:7 result 144FEB1
|
||||
striptest 32x16 T:be,ci m:15 result E96E2EFB
|
||||
striptest 32x16 T:be,md m:0 result 46FEBFE7
|
||||
striptest 32x16 T:be,md m:1 result ED2BBAD3
|
||||
striptest 32x16 T:be,md m:3 result B352B490
|
||||
striptest 32x16 T:be,md m:7 result 9ECDA45C
|
||||
striptest 32x16 T:be,md m:15 result B303A918
|
||||
striptest 32x16 T:be,fd m:0 result 3236BCFF
|
||||
striptest 32x16 T:be,fd m:1 result A9B4B49F
|
||||
striptest 32x16 T:be,fd m:3 result DFEDA9A4
|
||||
striptest 32x16 T:be,fd m:7 result 7BFC9A10
|
||||
striptest 32x16 T:be,fd m:15 result 7DAA9BC1
|
||||
striptest 32x16 T:be,l5 m:0 result EFE7F276
|
||||
striptest 32x16 T:be,l5 m:1 result FA1DE825
|
||||
striptest 32x16 T:be,l5 m:3 result 5005DF04
|
||||
striptest 32x16 T:be,l5 m:7 result C1E4CD9A
|
||||
striptest 32x16 T:be,l5 m:15 result 8178E6BC
|
||||
striptest 32x64 T:be,lb m:0 result 8C56EF7
|
||||
striptest 32x64 T:be,lb m:1 result F4DA575
|
||||
striptest 32x64 T:be,lb m:3 result C53DC302
|
||||
striptest 32x64 T:be,lb m:7 result 45489A36
|
||||
striptest 32x64 T:be,lb m:15 result 6412575D
|
||||
striptest 32x64 T:be,li m:0 result 5C779137
|
||||
striptest 32x64 T:be,li m:1 result 21DE74DF
|
||||
striptest 32x64 T:be,li m:3 result E3BC4E4D
|
||||
striptest 32x64 T:be,li m:7 result D8010B20
|
||||
striptest 32x64 T:be,li m:15 result 97ED88B0
|
||||
striptest 32x64 T:be,ci m:0 result F52C4BCA
|
||||
striptest 32x64 T:be,ci m:1 result 9F97D29C
|
||||
striptest 32x64 T:be,ci m:3 result 571D32E8
|
||||
striptest 32x64 T:be,ci m:7 result B61244F
|
||||
striptest 32x64 T:be,ci m:15 result 411D20E5
|
||||
striptest 32x64 T:be,md m:0 result 9D0A6629
|
||||
striptest 32x64 T:be,md m:1 result E0BA6229
|
||||
striptest 32x64 T:be,md m:3 result 895759F9
|
||||
striptest 32x64 T:be,md m:7 result E56F1265
|
||||
striptest 32x64 T:be,md m:15 result D56C91BF
|
||||
striptest 32x64 T:be,fd m:0 result B28194AC
|
||||
striptest 32x64 T:be,fd m:1 result DAFA71B2
|
||||
striptest 32x64 T:be,fd m:3 result 46374997
|
||||
striptest 32x64 T:be,fd m:7 result 49BD07FF
|
||||
striptest 32x64 T:be,fd m:15 result C37F87F8
|
||||
striptest 32x64 T:be,l5 m:0 result 31C27724
|
||||
striptest 32x64 T:be,l5 m:1 result 1E34AB3F
|
||||
striptest 32x64 T:be,l5 m:3 result 937CC78C
|
||||
striptest 32x64 T:be,l5 m:7 result E3AE9FA6
|
||||
striptest 32x64 T:be,l5 m:15 result E3CB5D3A
|
||||
striptest 32x304 T:be,lb m:0 result 96873EC4
|
||||
striptest 32x304 T:be,lb m:1 result F73560B0
|
||||
striptest 32x304 T:be,lb m:3 result 23868DD
|
||||
striptest 32x304 T:be,lb m:7 result 660D5005
|
||||
striptest 32x304 T:be,lb m:15 result 21D72EDC
|
||||
striptest 32x304 T:be,li m:0 result 3578C383
|
||||
striptest 32x304 T:be,li m:1 result 7E372AB
|
||||
striptest 32x304 T:be,li m:3 result 72DC2E19
|
||||
striptest 32x304 T:be,li m:7 result 5BF2D9DD
|
||||
striptest 32x304 T:be,li m:15 result 562D5100
|
||||
striptest 32x304 T:be,ci m:0 result 9B18B34C
|
||||
striptest 32x304 T:be,ci m:1 result D6973C87
|
||||
striptest 32x304 T:be,ci m:3 result 80A18C1C
|
||||
striptest 32x304 T:be,ci m:7 result D954AC92
|
||||
striptest 32x304 T:be,ci m:15 result 182F259
|
||||
striptest 32x304 T:be,md m:0 result 612A1191
|
||||
striptest 32x304 T:be,md m:1 result 11D3893C
|
||||
striptest 32x304 T:be,md m:3 result AB4D607C
|
||||
striptest 32x304 T:be,md m:7 result AD580914
|
||||
striptest 32x304 T:be,md m:15 result 6CB686E3
|
||||
striptest 32x304 T:be,fd m:0 result 2DFBF2FD
|
||||
striptest 32x304 T:be,fd m:1 result 43C640C
|
||||
striptest 32x304 T:be,fd m:3 result 31FF1A7F
|
||||
striptest 32x304 T:be,fd m:7 result C845C5A8
|
||||
striptest 32x304 T:be,fd m:15 result DFCD3EF6
|
||||
striptest 32x304 T:be,l5 m:0 result 9E04521A
|
||||
striptest 32x304 T:be,l5 m:1 result DA7E69FB
|
||||
striptest 32x304 T:be,l5 m:3 result 65A87204
|
||||
striptest 32x304 T:be,l5 m:7 result 5965E41
|
||||
striptest 32x304 T:be,l5 m:15 result EC7C4054
|
||||
striptest 80x16 T:be,lb m:0 result 111DA361
|
||||
striptest 80x16 T:be,lb m:1 result BEE5807F
|
||||
striptest 80x16 T:be,lb m:3 result 211C7853
|
||||
striptest 80x16 T:be,lb m:7 result 5450697F
|
||||
striptest 80x16 T:be,lb m:15 result 58E9478
|
||||
striptest 80x16 T:be,li m:0 result 38874149
|
||||
striptest 80x16 T:be,li m:1 result 2BBC2576
|
||||
striptest 80x16 T:be,li m:3 result 8A5714ED
|
||||
striptest 80x16 T:be,li m:7 result 5B0CFB30
|
||||
striptest 80x16 T:be,li m:15 result 66AA0055
|
||||
striptest 80x16 T:be,ci m:0 result 824D064D
|
||||
striptest 80x16 T:be,ci m:1 result 66AEDA81
|
||||
striptest 80x16 T:be,ci m:3 result A0EFD91E
|
||||
striptest 80x16 T:be,ci m:7 result F3BD56D
|
||||
striptest 80x16 T:be,ci m:15 result DF272622
|
||||
striptest 80x16 T:be,md m:0 result AFA5463D
|
||||
striptest 80x16 T:be,md m:1 result AC1C2EEA
|
||||
striptest 80x16 T:be,md m:3 result B13928CA
|
||||
striptest 80x16 T:be,md m:7 result 623E0985
|
||||
striptest 80x16 T:be,md m:15 result 11AD17F7
|
||||
striptest 80x16 T:be,fd m:0 result F2E403A
|
||||
striptest 80x16 T:be,fd m:1 result 74442449
|
||||
striptest 80x16 T:be,fd m:3 result 99161651
|
||||
striptest 80x16 T:be,fd m:7 result 735FF9A0
|
||||
striptest 80x16 T:be,fd m:15 result 52C70073
|
||||
striptest 80x16 T:be,l5 m:0 result 502A713
|
||||
striptest 80x16 T:be,l5 m:1 result 92B68284
|
||||
striptest 80x16 T:be,l5 m:3 result 8379797F
|
||||
striptest 80x16 T:be,l5 m:7 result 60986B80
|
||||
striptest 80x16 T:be,l5 m:15 result 172B954D
|
||||
striptest 80x64 T:be,lb m:0 result 5F5E1A40
|
||||
striptest 80x64 T:be,lb m:1 result D4573B0B
|
||||
striptest 80x64 T:be,lb m:3 result 878952B3
|
||||
striptest 80x64 T:be,lb m:7 result D8C714A1
|
||||
striptest 80x64 T:be,lb m:15 result 2EF9CC8F
|
||||
striptest 80x64 T:be,li m:0 result 997474D1
|
||||
striptest 80x64 T:be,li m:1 result 70B0FA2D
|
||||
striptest 80x64 T:be,li m:3 result A3D59129
|
||||
striptest 80x64 T:be,li m:7 result 3D6A10FC
|
||||
striptest 80x64 T:be,li m:15 result B2A16481
|
||||
striptest 80x64 T:be,ci m:0 result 8642BD76
|
||||
striptest 80x64 T:be,ci m:1 result D9E472E9
|
||||
striptest 80x64 T:be,ci m:3 result B68707CC
|
||||
striptest 80x64 T:be,ci m:7 result 3A580B8E
|
||||
striptest 80x64 T:be,ci m:15 result EF5E2771
|
||||
striptest 80x64 T:be,md m:0 result 12FB40C9
|
||||
striptest 80x64 T:be,md m:1 result 417FF439
|
||||
striptest 80x64 T:be,md m:3 result 9887B9A9
|
||||
striptest 80x64 T:be,md m:7 result AC03159
|
||||
striptest 80x64 T:be,md m:15 result DC2B8B70
|
||||
striptest 80x64 T:be,fd m:0 result 486E6CA9
|
||||
striptest 80x64 T:be,fd m:1 result 4740E6D8
|
||||
striptest 80x64 T:be,fd m:3 result FB284A3
|
||||
striptest 80x64 T:be,fd m:7 result C6C409A5
|
||||
striptest 80x64 T:be,fd m:15 result CA3F6366
|
||||
striptest 80x64 T:be,l5 m:0 result 9DAA28DE
|
||||
striptest 80x64 T:be,l5 m:1 result ECE545D4
|
||||
striptest 80x64 T:be,l5 m:3 result CD7D5CB2
|
||||
striptest 80x64 T:be,l5 m:7 result 77382111
|
||||
striptest 80x64 T:be,l5 m:15 result CFDED94C
|
||||
striptest 80x304 T:be,lb m:0 result 5F319B66
|
||||
striptest 80x304 T:be,lb m:1 result 12EF231E
|
||||
striptest 80x304 T:be,lb m:3 result 550BD604
|
||||
striptest 80x304 T:be,lb m:7 result B7327E26
|
||||
striptest 80x304 T:be,lb m:15 result 3740245A
|
||||
striptest 80x304 T:be,li m:0 result D685F82D
|
||||
striptest 80x304 T:be,li m:1 result A0A30EB2
|
||||
striptest 80x304 T:be,li m:3 result D8F4D287
|
||||
striptest 80x304 T:be,li m:7 result E8ABBB88
|
||||
striptest 80x304 T:be,li m:15 result CBE440B3
|
||||
striptest 80x304 T:be,ci m:0 result 4DD92E38
|
||||
striptest 80x304 T:be,ci m:1 result 80570956
|
||||
striptest 80x304 T:be,ci m:3 result B9199E43
|
||||
striptest 80x304 T:be,ci m:7 result 379900A8
|
||||
striptest 80x304 T:be,ci m:15 result C9CC544
|
||||
striptest 80x304 T:be,md m:0 result C9A0AA1
|
||||
striptest 80x304 T:be,md m:1 result D71C6826
|
||||
striptest 80x304 T:be,md m:3 result 358C53FF
|
||||
striptest 80x304 T:be,md m:7 result CC983926
|
||||
striptest 80x304 T:be,md m:15 result F1FAC564
|
||||
striptest 80x304 T:be,fd m:0 result 2CA4360A
|
||||
striptest 80x304 T:be,fd m:1 result CF71D48F
|
||||
striptest 80x304 T:be,fd m:3 result 5C849085
|
||||
striptest 80x304 T:be,fd m:7 result 560B833A
|
||||
striptest 80x304 T:be,fd m:15 result 6A3C1C08
|
||||
striptest 80x304 T:be,l5 m:0 result 659DC22A
|
||||
striptest 80x304 T:be,l5 m:1 result F5C03787
|
||||
striptest 80x304 T:be,l5 m:3 result 462BF053
|
||||
striptest 80x304 T:be,l5 m:7 result 82BDA906
|
||||
striptest 80x304 T:be,l5 m:15 result ACD5942
|
||||
striptest 224x16 T:be,lb m:0 result 356C0D23
|
||||
striptest 224x16 T:be,lb m:1 result D00F7A2A
|
||||
striptest 224x16 T:be,lb m:3 result E5EA5D23
|
||||
striptest 224x16 T:be,lb m:7 result 526D674E
|
||||
striptest 224x16 T:be,lb m:15 result BCE3B81D
|
||||
striptest 224x16 T:be,li m:0 result F1126804
|
||||
striptest 224x16 T:be,li m:1 result AF23B0EC
|
||||
striptest 224x16 T:be,li m:3 result 42C4FC3
|
||||
striptest 224x16 T:be,li m:7 result F87C00B2
|
||||
striptest 224x16 T:be,li m:15 result EC6026F
|
||||
striptest 224x16 T:be,ci m:0 result 297FB291
|
||||
striptest 224x16 T:be,ci m:1 result 1E673D4B
|
||||
striptest 224x16 T:be,ci m:3 result 8456644B
|
||||
striptest 224x16 T:be,ci m:7 result 3DC9CA10
|
||||
striptest 224x16 T:be,ci m:15 result 73EB67B2
|
||||
striptest 224x16 T:be,md m:0 result 43E06F84
|
||||
striptest 224x16 T:be,md m:1 result 8B4BD0B4
|
||||
striptest 224x16 T:be,md m:3 result F9E282D7
|
||||
striptest 224x16 T:be,md m:7 result CF442864
|
||||
striptest 224x16 T:be,md m:15 result 40FF4C35
|
||||
striptest 224x16 T:be,fd m:0 result E9136713
|
||||
striptest 224x16 T:be,fd m:1 result 5504AAD5
|
||||
striptest 224x16 T:be,fd m:3 result 62CF4ED1
|
||||
striptest 224x16 T:be,fd m:7 result 1FBFFEB5
|
||||
striptest 224x16 T:be,fd m:15 result 1A8802F2
|
||||
striptest 224x16 T:be,l5 m:0 result 6B4E140C
|
||||
striptest 224x16 T:be,l5 m:1 result 317D78DE
|
||||
striptest 224x16 T:be,l5 m:3 result 10D76452
|
||||
striptest 224x16 T:be,l5 m:7 result B4157203
|
||||
striptest 224x16 T:be,l5 m:15 result 7485BB4E
|
||||
striptest 224x64 T:be,lb m:0 result 2B8AC21B
|
||||
striptest 224x64 T:be,lb m:1 result 20901C76
|
||||
striptest 224x64 T:be,lb m:3 result 9DD93F3D
|
||||
striptest 224x64 T:be,lb m:7 result 7344B91E
|
||||
striptest 224x64 T:be,lb m:15 result 1AF370A4
|
||||
striptest 224x64 T:be,li m:0 result DBBDD6BD
|
||||
striptest 224x64 T:be,li m:1 result 11F7C325
|
||||
striptest 224x64 T:be,li m:3 result 3CE50C42
|
||||
striptest 224x64 T:be,li m:7 result 7E69E47E
|
||||
striptest 224x64 T:be,li m:15 result A4BBE1A1
|
||||
striptest 224x64 T:be,ci m:0 result F82BA5E8
|
||||
striptest 224x64 T:be,ci m:1 result 85115A85
|
||||
striptest 224x64 T:be,ci m:3 result 58C651AE
|
||||
striptest 224x64 T:be,ci m:7 result A9126A8F
|
||||
striptest 224x64 T:be,ci m:15 result 7B9FDB4F
|
||||
striptest 224x64 T:be,md m:0 result C2526431
|
||||
striptest 224x64 T:be,md m:1 result 827DC726
|
||||
striptest 224x64 T:be,md m:3 result 8DA3941F
|
||||
striptest 224x64 T:be,md m:7 result 51B05951
|
||||
striptest 224x64 T:be,md m:15 result ED5F5AD8
|
||||
striptest 224x64 T:be,fd m:0 result 12A1C5DC
|
||||
striptest 224x64 T:be,fd m:1 result 73CF788F
|
||||
striptest 224x64 T:be,fd m:3 result DA0EC20B
|
||||
striptest 224x64 T:be,fd m:7 result 5F61C207
|
||||
striptest 224x64 T:be,fd m:15 result D315E2C2
|
||||
striptest 224x64 T:be,l5 m:0 result B838DBE8
|
||||
striptest 224x64 T:be,l5 m:1 result 9DDA2818
|
||||
striptest 224x64 T:be,l5 m:3 result 936E539F
|
||||
striptest 224x64 T:be,l5 m:7 result B72DD580
|
||||
striptest 224x64 T:be,l5 m:15 result DEF9939C
|
||||
striptest 224x304 T:be,lb m:0 result 1FEC5688
|
||||
striptest 224x304 T:be,lb m:1 result 90A34708
|
||||
striptest 224x304 T:be,lb m:3 result A7392576
|
||||
striptest 224x304 T:be,lb m:7 result 5CE6F508
|
||||
striptest 224x304 T:be,lb m:15 result 1AED25A0
|
||||
striptest 224x304 T:be,li m:0 result 9DDCEAD8
|
||||
striptest 224x304 T:be,li m:1 result A0734E1E
|
||||
striptest 224x304 T:be,li m:3 result 1F7E2AA8
|
||||
striptest 224x304 T:be,li m:7 result A77BC413
|
||||
striptest 224x304 T:be,li m:15 result B2066E34
|
||||
striptest 224x304 T:be,ci m:0 result A1F1930F
|
||||
striptest 224x304 T:be,ci m:1 result B0BCBBCB
|
||||
striptest 224x304 T:be,ci m:3 result BC517C16
|
||||
striptest 224x304 T:be,ci m:7 result 42B87247
|
||||
striptest 224x304 T:be,ci m:15 result 390F228A
|
||||
striptest 224x304 T:be,md m:0 result 26DE8A64
|
||||
striptest 224x304 T:be,md m:1 result 422A5459
|
||||
striptest 224x304 T:be,md m:3 result 3FBA4F6
|
||||
striptest 224x304 T:be,md m:7 result 16B03C7E
|
||||
striptest 224x304 T:be,md m:15 result DC1EC11
|
||||
striptest 224x304 T:be,fd m:0 result AAC476C5
|
||||
striptest 224x304 T:be,fd m:1 result 43724E73
|
||||
striptest 224x304 T:be,fd m:3 result A35E0764
|
||||
striptest 224x304 T:be,fd m:7 result 7A17EA8D
|
||||
striptest 224x304 T:be,fd m:15 result FACA116D
|
||||
striptest 224x304 T:be,l5 m:0 result E9D6B236
|
||||
striptest 224x304 T:be,l5 m:1 result B4336EAD
|
||||
striptest 224x304 T:be,l5 m:3 result 284B6451
|
||||
striptest 224x304 T:be,l5 m:7 result 637B6C54
|
||||
striptest 224x304 T:be,l5 m:15 result 3503C609
|
@@ -1,336 +0,0 @@
|
||||
temptest 0 0 0 0 result 4747FD2B6BCBD98D
|
||||
temptest 0 0 0 1 result B131E49BB453EC88
|
||||
temptest 0 0 0 4 result 38CC2AC032A60E8E
|
||||
temptest 0 0 0 13 result B2C1B45AE4547480
|
||||
temptest 0 0 0 40 result 7CCF1AC011E2ACEB
|
||||
temptest 0 0 0 121 result CEFAC9CA19A5F777
|
||||
temptest 0 0 1 0 result 4747FD2B6BCBD98D
|
||||
temptest 0 0 1 1 result B131E49BB453EC88
|
||||
temptest 0 0 1 4 result 38CC2AC032A60E8E
|
||||
temptest 0 0 1 13 result B2C1B45AE4547480
|
||||
temptest 0 0 1 40 result 7CCF1AC011E2ACEB
|
||||
temptest 0 0 1 121 result CEFAC9CA19A5F777
|
||||
temptest 0 0 18 0 result 4747FD2B6BCBD98D
|
||||
temptest 0 0 18 1 result B131E49BB453EC88
|
||||
temptest 0 0 18 4 result 38CC2AC032A60E8E
|
||||
temptest 0 0 18 13 result B2C1B45AE4547480
|
||||
temptest 0 0 18 40 result 7CCF1AC011E2ACEB
|
||||
temptest 0 0 18 121 result CEFAC9CA19A5F777
|
||||
temptest 0 0 307 0 result 4747FD2B6BCBD98D
|
||||
temptest 0 0 307 1 result B131E49BB453EC88
|
||||
temptest 0 0 307 4 result 9A1F4C627F31E806
|
||||
temptest 0 0 307 13 result B2C1B45AE4547480
|
||||
temptest 0 0 307 40 result 7CCF1AC011E2ACEB
|
||||
temptest 0 0 307 121 result CEFAC9CA19A5F777
|
||||
temptest 0 0 5220 0 result A3F4794F3A735E24
|
||||
temptest 0 0 5220 1 result 2FEB559286787E28
|
||||
temptest 0 0 5220 4 result E77D4EBDFA3E06BF
|
||||
temptest 0 0 5220 13 result D77446C32EEDD169
|
||||
temptest 0 0 5220 40 result 7CCF1AC011E2ACEB
|
||||
temptest 0 0 5220 121 result CEFAC9CA19A5F777
|
||||
temptest 0 0 88741 0 result FBDDA11DF717CD14
|
||||
temptest 0 0 88741 1 result FB7C8CEBFD07B08B
|
||||
temptest 0 0 88741 4 result 677BF6D89305A705
|
||||
temptest 0 0 88741 13 result AC256153D241FEAC
|
||||
temptest 0 0 88741 40 result 53E5C6EFC8DA58D1
|
||||
temptest 0 0 88741 121 result 284B4DD880549A05
|
||||
temptest 0 1 1 0 result 4747FD2B6BCBD98D
|
||||
temptest 0 1 1 1 result B131E49BB453EC88
|
||||
temptest 0 1 1 4 result 38CC2AC032A60E8E
|
||||
temptest 0 1 1 13 result B2C1B45AE4547480
|
||||
temptest 0 1 1 40 result 7CCF1AC011E2ACEB
|
||||
temptest 0 1 1 121 result CEFAC9CA19A5F777
|
||||
temptest 0 1 18 0 result 4747FD2B6BCBD98D
|
||||
temptest 0 1 18 1 result B131E49BB453EC88
|
||||
temptest 0 1 18 4 result 38CC2AC032A60E8E
|
||||
temptest 0 1 18 13 result B2C1B45AE4547480
|
||||
temptest 0 1 18 40 result 7CCF1AC011E2ACEB
|
||||
temptest 0 1 18 121 result CEFAC9CA19A5F777
|
||||
temptest 0 1 307 0 result 4747FD2B6BCBD98D
|
||||
temptest 0 1 307 1 result B131E49BB453EC88
|
||||
temptest 0 1 307 4 result 9A1F4C627F31E806
|
||||
temptest 0 1 307 13 result B2C1B45AE4547480
|
||||
temptest 0 1 307 40 result 7CCF1AC011E2ACEB
|
||||
temptest 0 1 307 121 result CEFAC9CA19A5F777
|
||||
temptest 0 1 5220 0 result A3F4794F3A735E24
|
||||
temptest 0 1 5220 1 result 2FEB559286787E28
|
||||
temptest 0 1 5220 4 result E77D4EBDFA3E06BF
|
||||
temptest 0 1 5220 13 result D77446C32EEDD169
|
||||
temptest 0 1 5220 40 result 7CCF1AC011E2ACEB
|
||||
temptest 0 1 5220 121 result CEFAC9CA19A5F777
|
||||
temptest 0 1 88741 0 result FBDDA11DF717CD14
|
||||
temptest 0 1 88741 1 result FB7C8CEBFD07B08B
|
||||
temptest 0 1 88741 4 result 677BF6D89305A705
|
||||
temptest 0 1 88741 13 result AC256153D241FEAC
|
||||
temptest 0 1 88741 40 result 53E5C6EFC8DA58D1
|
||||
temptest 0 1 88741 121 result 284B4DD880549A05
|
||||
temptest 0 18 18 0 result 4747FD2B6BCBD98D
|
||||
temptest 0 18 18 1 result B131E49BB453EC88
|
||||
temptest 0 18 18 4 result 38CC2AC032A60E8E
|
||||
temptest 0 18 18 13 result B2C1B45AE4547480
|
||||
temptest 0 18 18 40 result 7CCF1AC011E2ACEB
|
||||
temptest 0 18 18 121 result CEFAC9CA19A5F777
|
||||
temptest 0 18 307 0 result 4747FD2B6BCBD98D
|
||||
temptest 0 18 307 1 result B131E49BB453EC88
|
||||
temptest 0 18 307 4 result 9A1F4C627F31E806
|
||||
temptest 0 18 307 13 result B2C1B45AE4547480
|
||||
temptest 0 18 307 40 result 7CCF1AC011E2ACEB
|
||||
temptest 0 18 307 121 result CEFAC9CA19A5F777
|
||||
temptest 0 18 5220 0 result E2D79A25DEB7D8A0
|
||||
temptest 0 18 5220 1 result 6ECE76692ABCF8A4
|
||||
temptest 0 18 5220 4 result E77D4EBDFA3E06BF
|
||||
temptest 0 18 5220 13 result D77446C32EEDD169
|
||||
temptest 0 18 5220 40 result 7CCF1AC011E2ACEB
|
||||
temptest 0 18 5220 121 result CEFAC9CA19A5F777
|
||||
temptest 0 18 88741 0 result FBDDA11DF717CD14
|
||||
temptest 0 18 88741 1 result FB7C8CEBFD07B08B
|
||||
temptest 0 18 88741 4 result 677BF6D89305A705
|
||||
temptest 0 18 88741 13 result AC256153D241FEAC
|
||||
temptest 0 18 88741 40 result 53E5C6EFC8DA58D1
|
||||
temptest 0 18 88741 121 result 284B4DD880549A05
|
||||
temptest 0 307 307 0 result 4747FD2B6BCBD98D
|
||||
temptest 0 307 307 1 result B131E49BB453EC88
|
||||
temptest 0 307 307 4 result B17A67893E803FB9
|
||||
temptest 0 307 307 13 result B2C1B45AE4547480
|
||||
temptest 0 307 307 40 result 7CCF1AC011E2ACEB
|
||||
temptest 0 307 307 121 result CEFAC9CA19A5F777
|
||||
temptest 0 307 5220 0 result 555181C06E0FA1AA
|
||||
temptest 0 307 5220 1 result 3235D486256EC1AE
|
||||
temptest 0 307 5220 4 result 964FE2F503607C70
|
||||
temptest 0 307 5220 13 result D77446C32EEDD169
|
||||
temptest 0 307 5220 40 result 7CCF1AC011E2ACEB
|
||||
temptest 0 307 5220 121 result CEFAC9CA19A5F777
|
||||
temptest 0 307 88741 0 result 797EDCC74D223AE8
|
||||
temptest 0 307 88741 1 result 791DC89553121E5F
|
||||
temptest 0 307 88741 4 result 46E37B54A5142319
|
||||
temptest 0 307 88741 13 result AC256153D241FEAC
|
||||
temptest 0 307 88741 40 result 53E5C6EFC8DA58D1
|
||||
temptest 0 307 88741 121 result 284B4DD880549A05
|
||||
temptest 0 5220 5220 0 result 4A2207CA23BA4CC0
|
||||
temptest 0 5220 5220 1 result E5B4E54A5D48B507
|
||||
temptest 0 5220 5220 4 result EA39A4876A38648F
|
||||
temptest 0 5220 5220 13 result B6B4F5C1A6864CBD
|
||||
temptest 0 5220 5220 40 result 7CCF1AC011E2ACEB
|
||||
temptest 0 5220 5220 121 result CEFAC9CA19A5F777
|
||||
temptest 0 5220 88741 0 result 706EBAB75F0C52EA
|
||||
temptest 0 5220 88741 1 result D4F0475270F0795C
|
||||
temptest 0 5220 88741 4 result DF8A5296FD69B527
|
||||
temptest 0 5220 88741 13 result BB5686FA9BA23C7B
|
||||
temptest 0 5220 88741 40 result A9201E8DBD3B9B3
|
||||
temptest 0 5220 88741 121 result 284B4DD880549A05
|
||||
temptest 0 88741 88741 0 result CF4F8ABE751594E0
|
||||
temptest 0 88741 88741 1 result 9222D52614EFA86B
|
||||
temptest 0 88741 88741 4 result DFC399F2247B7714
|
||||
temptest 0 88741 88741 13 result 4781E2B92F5BD91B
|
||||
temptest 0 88741 88741 40 result 8986560C6636BCBA
|
||||
temptest 0 88741 88741 121 result 31FBA2F823230BBF
|
||||
temptest 1 1 1 0 result 4747FD2B6BCBD98D
|
||||
temptest 1 1 1 1 result B131E49BB453EC88
|
||||
temptest 1 1 1 4 result 38CC2AC032A60E8E
|
||||
temptest 1 1 1 13 result B2C1B45AE4547480
|
||||
temptest 1 1 1 40 result 7CCF1AC011E2ACEB
|
||||
temptest 1 1 1 121 result CEFAC9CA19A5F777
|
||||
temptest 1 1 18 0 result 4747FD2B6BCBD98D
|
||||
temptest 1 1 18 1 result B131E49BB453EC88
|
||||
temptest 1 1 18 4 result 38CC2AC032A60E8E
|
||||
temptest 1 1 18 13 result B2C1B45AE4547480
|
||||
temptest 1 1 18 40 result 7CCF1AC011E2ACEB
|
||||
temptest 1 1 18 121 result CEFAC9CA19A5F777
|
||||
temptest 1 1 307 0 result 4747FD2B6BCBD98D
|
||||
temptest 1 1 307 1 result B131E49BB453EC88
|
||||
temptest 1 1 307 4 result 9A1F4C627F31E806
|
||||
temptest 1 1 307 13 result B2C1B45AE4547480
|
||||
temptest 1 1 307 40 result 7CCF1AC011E2ACEB
|
||||
temptest 1 1 307 121 result CEFAC9CA19A5F777
|
||||
temptest 1 1 5220 0 result A3F4794F3A735E24
|
||||
temptest 1 1 5220 1 result 2FEB559286787E28
|
||||
temptest 1 1 5220 4 result E77D4EBDFA3E06BF
|
||||
temptest 1 1 5220 13 result D77446C32EEDD169
|
||||
temptest 1 1 5220 40 result 7CCF1AC011E2ACEB
|
||||
temptest 1 1 5220 121 result CEFAC9CA19A5F777
|
||||
temptest 1 1 88741 0 result FBDDA11DF717CD14
|
||||
temptest 1 1 88741 1 result FB7C8CEBFD07B08B
|
||||
temptest 1 1 88741 4 result 677BF6D89305A705
|
||||
temptest 1 1 88741 13 result AC256153D241FEAC
|
||||
temptest 1 1 88741 40 result 53E5C6EFC8DA58D1
|
||||
temptest 1 1 88741 121 result 284B4DD880549A05
|
||||
temptest 1 18 18 0 result 4747FD2B6BCBD98D
|
||||
temptest 1 18 18 1 result B131E49BB453EC88
|
||||
temptest 1 18 18 4 result 38CC2AC032A60E8E
|
||||
temptest 1 18 18 13 result B2C1B45AE4547480
|
||||
temptest 1 18 18 40 result 7CCF1AC011E2ACEB
|
||||
temptest 1 18 18 121 result CEFAC9CA19A5F777
|
||||
temptest 1 18 307 0 result 4747FD2B6BCBD98D
|
||||
temptest 1 18 307 1 result B131E49BB453EC88
|
||||
temptest 1 18 307 4 result 9A1F4C627F31E806
|
||||
temptest 1 18 307 13 result B2C1B45AE4547480
|
||||
temptest 1 18 307 40 result 7CCF1AC011E2ACEB
|
||||
temptest 1 18 307 121 result CEFAC9CA19A5F777
|
||||
temptest 1 18 5220 0 result E2D79A25DEB7D8A0
|
||||
temptest 1 18 5220 1 result 6ECE76692ABCF8A4
|
||||
temptest 1 18 5220 4 result E77D4EBDFA3E06BF
|
||||
temptest 1 18 5220 13 result D77446C32EEDD169
|
||||
temptest 1 18 5220 40 result 7CCF1AC011E2ACEB
|
||||
temptest 1 18 5220 121 result CEFAC9CA19A5F777
|
||||
temptest 1 18 88741 0 result FBDDA11DF717CD14
|
||||
temptest 1 18 88741 1 result FB7C8CEBFD07B08B
|
||||
temptest 1 18 88741 4 result 677BF6D89305A705
|
||||
temptest 1 18 88741 13 result AC256153D241FEAC
|
||||
temptest 1 18 88741 40 result 53E5C6EFC8DA58D1
|
||||
temptest 1 18 88741 121 result 284B4DD880549A05
|
||||
temptest 1 307 307 0 result 4747FD2B6BCBD98D
|
||||
temptest 1 307 307 1 result B131E49BB453EC88
|
||||
temptest 1 307 307 4 result B17A67893E803FB9
|
||||
temptest 1 307 307 13 result B2C1B45AE4547480
|
||||
temptest 1 307 307 40 result 7CCF1AC011E2ACEB
|
||||
temptest 1 307 307 121 result CEFAC9CA19A5F777
|
||||
temptest 1 307 5220 0 result 555181C06E0FA1AA
|
||||
temptest 1 307 5220 1 result 3235D486256EC1AE
|
||||
temptest 1 307 5220 4 result 964FE2F503607C70
|
||||
temptest 1 307 5220 13 result D77446C32EEDD169
|
||||
temptest 1 307 5220 40 result 7CCF1AC011E2ACEB
|
||||
temptest 1 307 5220 121 result CEFAC9CA19A5F777
|
||||
temptest 1 307 88741 0 result 797EDCC74D223AE8
|
||||
temptest 1 307 88741 1 result 791DC89553121E5F
|
||||
temptest 1 307 88741 4 result 46E37B54A5142319
|
||||
temptest 1 307 88741 13 result AC256153D241FEAC
|
||||
temptest 1 307 88741 40 result 53E5C6EFC8DA58D1
|
||||
temptest 1 307 88741 121 result 284B4DD880549A05
|
||||
temptest 1 5220 5220 0 result 4A2207CA23BA4CC0
|
||||
temptest 1 5220 5220 1 result E5B4E54A5D48B507
|
||||
temptest 1 5220 5220 4 result EA39A4876A38648F
|
||||
temptest 1 5220 5220 13 result B6B4F5C1A6864CBD
|
||||
temptest 1 5220 5220 40 result 7CCF1AC011E2ACEB
|
||||
temptest 1 5220 5220 121 result CEFAC9CA19A5F777
|
||||
temptest 1 5220 88741 0 result 706EBAB75F0C52EA
|
||||
temptest 1 5220 88741 1 result D4F0475270F0795C
|
||||
temptest 1 5220 88741 4 result DF8A5296FD69B527
|
||||
temptest 1 5220 88741 13 result BB5686FA9BA23C7B
|
||||
temptest 1 5220 88741 40 result A9201E8DBD3B9B3
|
||||
temptest 1 5220 88741 121 result 284B4DD880549A05
|
||||
temptest 1 88741 88741 0 result CF4F8ABE751594E0
|
||||
temptest 1 88741 88741 1 result 9222D52614EFA86B
|
||||
temptest 1 88741 88741 4 result DFC399F2247B7714
|
||||
temptest 1 88741 88741 13 result 4781E2B92F5BD91B
|
||||
temptest 1 88741 88741 40 result 8986560C6636BCBA
|
||||
temptest 1 88741 88741 121 result 31FBA2F823230BBF
|
||||
temptest 18 18 18 0 result 4747FD2B6BCBD98D
|
||||
temptest 18 18 18 1 result B131E49BB453EC88
|
||||
temptest 18 18 18 4 result 38CC2AC032A60E8E
|
||||
temptest 18 18 18 13 result B2C1B45AE4547480
|
||||
temptest 18 18 18 40 result 7CCF1AC011E2ACEB
|
||||
temptest 18 18 18 121 result CEFAC9CA19A5F777
|
||||
temptest 18 18 307 0 result 4747FD2B6BCBD98D
|
||||
temptest 18 18 307 1 result B131E49BB453EC88
|
||||
temptest 18 18 307 4 result 9A1F4C627F31E806
|
||||
temptest 18 18 307 13 result B2C1B45AE4547480
|
||||
temptest 18 18 307 40 result 7CCF1AC011E2ACEB
|
||||
temptest 18 18 307 121 result CEFAC9CA19A5F777
|
||||
temptest 18 18 5220 0 result E2D79A25DEB7D8A0
|
||||
temptest 18 18 5220 1 result 6ECE76692ABCF8A4
|
||||
temptest 18 18 5220 4 result E77D4EBDFA3E06BF
|
||||
temptest 18 18 5220 13 result D77446C32EEDD169
|
||||
temptest 18 18 5220 40 result 7CCF1AC011E2ACEB
|
||||
temptest 18 18 5220 121 result CEFAC9CA19A5F777
|
||||
temptest 18 18 88741 0 result FBDDA11DF717CD14
|
||||
temptest 18 18 88741 1 result FB7C8CEBFD07B08B
|
||||
temptest 18 18 88741 4 result 677BF6D89305A705
|
||||
temptest 18 18 88741 13 result AC256153D241FEAC
|
||||
temptest 18 18 88741 40 result 53E5C6EFC8DA58D1
|
||||
temptest 18 18 88741 121 result 284B4DD880549A05
|
||||
temptest 18 307 307 0 result 4747FD2B6BCBD98D
|
||||
temptest 18 307 307 1 result B131E49BB453EC88
|
||||
temptest 18 307 307 4 result B17A67893E803FB9
|
||||
temptest 18 307 307 13 result B2C1B45AE4547480
|
||||
temptest 18 307 307 40 result 7CCF1AC011E2ACEB
|
||||
temptest 18 307 307 121 result CEFAC9CA19A5F777
|
||||
temptest 18 307 5220 0 result 555181C06E0FA1AA
|
||||
temptest 18 307 5220 1 result 3235D486256EC1AE
|
||||
temptest 18 307 5220 4 result 964FE2F503607C70
|
||||
temptest 18 307 5220 13 result D77446C32EEDD169
|
||||
temptest 18 307 5220 40 result 7CCF1AC011E2ACEB
|
||||
temptest 18 307 5220 121 result CEFAC9CA19A5F777
|
||||
temptest 18 307 88741 0 result 797EDCC74D223AE8
|
||||
temptest 18 307 88741 1 result 791DC89553121E5F
|
||||
temptest 18 307 88741 4 result 46E37B54A5142319
|
||||
temptest 18 307 88741 13 result AC256153D241FEAC
|
||||
temptest 18 307 88741 40 result 53E5C6EFC8DA58D1
|
||||
temptest 18 307 88741 121 result 284B4DD880549A05
|
||||
temptest 18 5220 5220 0 result 4A2207CA23BA4CC0
|
||||
temptest 18 5220 5220 1 result E5B4E54A5D48B507
|
||||
temptest 18 5220 5220 4 result EA39A4876A38648F
|
||||
temptest 18 5220 5220 13 result B6B4F5C1A6864CBD
|
||||
temptest 18 5220 5220 40 result 7CCF1AC011E2ACEB
|
||||
temptest 18 5220 5220 121 result CEFAC9CA19A5F777
|
||||
temptest 18 5220 88741 0 result 706EBAB75F0C52EA
|
||||
temptest 18 5220 88741 1 result D4F0475270F0795C
|
||||
temptest 18 5220 88741 4 result DF8A5296FD69B527
|
||||
temptest 18 5220 88741 13 result BB5686FA9BA23C7B
|
||||
temptest 18 5220 88741 40 result A9201E8DBD3B9B3
|
||||
temptest 18 5220 88741 121 result 284B4DD880549A05
|
||||
temptest 18 88741 88741 0 result CF4F8ABE751594E0
|
||||
temptest 18 88741 88741 1 result 9222D52614EFA86B
|
||||
temptest 18 88741 88741 4 result DFC399F2247B7714
|
||||
temptest 18 88741 88741 13 result 4781E2B92F5BD91B
|
||||
temptest 18 88741 88741 40 result 8986560C6636BCBA
|
||||
temptest 18 88741 88741 121 result 31FBA2F823230BBF
|
||||
temptest 307 307 307 0 result 4747FD2B6BCBD98D
|
||||
temptest 307 307 307 1 result B131E49BB453EC88
|
||||
temptest 307 307 307 4 result 8B1D395E5808B6DC
|
||||
temptest 307 307 307 13 result B2C1B45AE4547480
|
||||
temptest 307 307 307 40 result 7CCF1AC011E2ACEB
|
||||
temptest 307 307 307 121 result CEFAC9CA19A5F777
|
||||
temptest 307 307 5220 0 result A69033A091FC2080
|
||||
temptest 307 307 5220 1 result 32870FE3DE014084
|
||||
temptest 307 307 5220 4 result B2649AC2BCF207E4
|
||||
temptest 307 307 5220 13 result D77446C32EEDD169
|
||||
temptest 307 307 5220 40 result 7CCF1AC011E2ACEB
|
||||
temptest 307 307 5220 121 result CEFAC9CA19A5F777
|
||||
temptest 307 307 88741 0 result 6148B9F1437BB580
|
||||
temptest 307 307 88741 1 result 6F49A40209698F7
|
||||
temptest 307 307 88741 4 result 9E9DD518954D5E5
|
||||
temptest 307 307 88741 13 result AC256153D241FEAC
|
||||
temptest 307 307 88741 40 result 53E5C6EFC8DA58D1
|
||||
temptest 307 307 88741 121 result 284B4DD880549A05
|
||||
temptest 307 5220 5220 0 result 2A63D0D557F45750
|
||||
temptest 307 5220 5220 1 result 9254608D71205E52
|
||||
temptest 307 5220 5220 4 result E46F831B8295F417
|
||||
temptest 307 5220 5220 13 result B6B4F5C1A6864CBD
|
||||
temptest 307 5220 5220 40 result 7CCF1AC011E2ACEB
|
||||
temptest 307 5220 5220 121 result CEFAC9CA19A5F777
|
||||
temptest 307 5220 88741 0 result EADD24BF32F80792
|
||||
temptest 307 5220 88741 1 result DABC179FB1931BE8
|
||||
temptest 307 5220 88741 4 result 8AA934A713F0D4AD
|
||||
temptest 307 5220 88741 13 result BB5686FA9BA23C7B
|
||||
temptest 307 5220 88741 40 result A9201E8DBD3B9B3
|
||||
temptest 307 5220 88741 121 result 284B4DD880549A05
|
||||
temptest 307 88741 88741 0 result 1A2909BF51BC6E28
|
||||
temptest 307 88741 88741 1 result 6614127EF76D81B3
|
||||
temptest 307 88741 88741 4 result 9B0BC4A00B7DB1F2
|
||||
temptest 307 88741 88741 13 result 4781E2B92F5BD91B
|
||||
temptest 307 88741 88741 40 result 8986560C6636BCBA
|
||||
temptest 307 88741 88741 121 result 31FBA2F823230BBF
|
||||
temptest 5220 5220 5220 0 result 7FE69B4F88AD274B
|
||||
temptest 5220 5220 5220 1 result 2262574F78791826
|
||||
temptest 5220 5220 5220 4 result 597A21AB80E82FAC
|
||||
temptest 5220 5220 5220 13 result 7F930A71275853B8
|
||||
temptest 5220 5220 5220 40 result 7CCF1AC011E2ACEB
|
||||
temptest 5220 5220 5220 121 result CEFAC9CA19A5F777
|
||||
temptest 5220 5220 88741 0 result D5F7F8D19289D7C3
|
||||
temptest 5220 5220 88741 1 result CD3256F7DFF12EE2
|
||||
temptest 5220 5220 88741 4 result 84E2DB3DECECD065
|
||||
temptest 5220 5220 88741 13 result A751FC922A9A8365
|
||||
temptest 5220 5220 88741 40 result 2FA93067097FB349
|
||||
temptest 5220 5220 88741 121 result 284B4DD880549A05
|
||||
temptest 5220 88741 88741 0 result 684F350A49E03B23
|
||||
temptest 5220 88741 88741 1 result 6E9FD32757E3AD46
|
||||
temptest 5220 88741 88741 4 result 5F4C037B5CFEDACB
|
||||
temptest 5220 88741 88741 13 result 6B03209BFA60079D
|
||||
temptest 5220 88741 88741 40 result 8986560C6636BCBA
|
||||
temptest 5220 88741 88741 121 result 31FBA2F823230BBF
|
||||
temptest 88741 88741 88741 0 result B1D4DA59CAAF6224
|
||||
temptest 88741 88741 88741 1 result 42DD8F9FBDC2D6C0
|
||||
temptest 88741 88741 88741 4 result B40B6B1CAD3A609F
|
||||
temptest 88741 88741 88741 13 result 221AA124FEFA141C
|
||||
temptest 88741 88741 88741 40 result FC31041053B7B237
|
||||
temptest 88741 88741 88741 121 result CB3E66FC05552055
|
@@ -42,7 +42,6 @@ EOF
|
||||
# gen-rc libavformat "FFmpeg container format library"
|
||||
# gen-rc libavdevice "FFmpeg device handling library"
|
||||
# gen-rc libavfilter "FFmpeg audio/video filtering library"
|
||||
# gen-rc libpostproc "FFmpeg postprocessing library"
|
||||
# gen-rc libswscale "FFmpeg image rescaling library"
|
||||
# gen-rc libswresample "FFmpeg audio resampling library"
|
||||
|
||||
|
Reference in New Issue
Block a user