Go to the documentation of this file.
93 register unsigned x = *((
const uint32_t *)
s);
94 *((uint32_t *)d) = (
x & 0x7FFF7FFF) + (
x & 0x7FE07FE0);
99 register unsigned short x = *((
const uint16_t *)
s);
100 *((uint16_t *)d) = (
x & 0x7FFF) + (
x & 0x7FE0);
112 register uint32_t
x = *((
const uint32_t *)
s);
113 *((uint32_t *)d) = ((
x >> 1) & 0x7FE07FE0) | (
x & 0x001F001F);
118 register uint16_t
x = *((
const uint16_t *)
s);
119 *((uint16_t *)d) = ((
x >> 1) & 0x7FE0) | (
x & 0x001F);
125 uint16_t *d = (uint16_t *)dst;
130 register int rgb = *(
const uint32_t *)
s;
132 *d++ = ((rgb & 0xFF) >> 3) +
133 ((rgb & 0xFC00) >> 5) +
134 ((rgb & 0xF80000) >> 8);
141 uint16_t *d = (uint16_t *)dst;
146 register int rgb = *(
const uint32_t *)
s;
148 *d++ = ((rgb & 0xF8) << 8) +
149 ((rgb & 0xFC00) >> 5) +
150 ((rgb & 0xF80000) >> 19);
156 uint16_t *d = (uint16_t *)dst;
161 register int rgb = *(
const uint32_t *)
s;
163 *d++ = ((rgb & 0xFF) >> 3) +
164 ((rgb & 0xF800) >> 6) +
165 ((rgb & 0xF80000) >> 9);
172 uint16_t *d = (uint16_t *)dst;
177 register int rgb = *(
const uint32_t *)
s;
179 *d++ = ((rgb & 0xF8) << 7) +
180 ((rgb & 0xF800) >> 6) +
181 ((rgb & 0xF80000) >> 19);
188 uint16_t *d = (uint16_t *)dst;
196 *d++ = (
b >> 3) | ((
g & 0xFC) << 3) | ((
r & 0xF8) << 8);
202 uint16_t *d = (uint16_t *)dst;
210 *d++ = (
b >> 3) | ((
g & 0xFC) << 3) | ((
r & 0xF8) << 8);
217 uint16_t *d = (uint16_t *)dst;
225 *d++ = (
b >> 3) | ((
g & 0xF8) << 2) | ((
r & 0xF8) << 7);
231 uint16_t *d = (uint16_t *)dst;
239 *d++ = (
b >> 3) | ((
g & 0xF8) << 2) | ((
r & 0xF8) << 7);
247 const uint16_t *
s = (
const uint16_t *)
src;
248 const uint16_t *
end =
s + src_size / 2;
251 register uint16_t bgr = *
s++;
252 *d++ = ((bgr&0x001F)<<3) | ((bgr&0x001F)>> 2);
253 *d++ = ((bgr&0x03E0)>>2) | ((bgr&0x03E0)>> 7);
254 *d++ = ((bgr&0x7C00)>>7) | ((bgr&0x7C00)>>12);
262 const uint16_t *
s = (
const uint16_t *)
src;
263 const uint16_t *
end =
s + src_size / 2;
266 register uint16_t bgr = *
s++;
267 *d++ = ((bgr&0x001F)<<3) | ((bgr&0x001F)>> 2);
268 *d++ = ((bgr&0x07E0)>>3) | ((bgr&0x07E0)>> 9);
269 *d++ = ((bgr&0xF800)>>8) | ((bgr&0xF800)>>13);
276 const uint16_t *
s = (
const uint16_t *)
src;
277 const uint16_t *
end =
s + src_size / 2;
280 register uint16_t bgr = *
s++;
283 *d++ = ((bgr&0x7C00)>>7) | ((bgr&0x7C00)>>12);
284 *d++ = ((bgr&0x03E0)>>2) | ((bgr&0x03E0)>> 7);
285 *d++ = ((bgr&0x001F)<<3) | ((bgr&0x001F)>> 2);
287 *d++ = ((bgr&0x001F)<<3) | ((bgr&0x001F)>> 2);
288 *d++ = ((bgr&0x03E0)>>2) | ((bgr&0x03E0)>> 7);
289 *d++ = ((bgr&0x7C00)>>7) | ((bgr&0x7C00)>>12);
298 const uint16_t *
s = (
const uint16_t *)
src;
299 const uint16_t *
end =
s + src_size / 2;
302 register uint16_t bgr = *
s++;
305 *d++ = ((bgr&0xF800)>>8) | ((bgr&0xF800)>>13);
306 *d++ = ((bgr&0x07E0)>>3) | ((bgr&0x07E0)>> 9);
307 *d++ = ((bgr&0x001F)<<3) | ((bgr&0x001F)>> 2);
309 *d++ = ((bgr&0x001F)<<3) | ((bgr&0x001F)>> 2);
310 *d++ = ((bgr&0x07E0)>>3) | ((bgr&0x07E0)>> 9);
311 *d++ = ((bgr&0xF800)>>8) | ((bgr&0xF800)>>13);
320 int idx = 15 - src_size;
324 for (; idx < 15; idx += 4) {
325 register unsigned v = *(
const uint32_t *)&
s[idx],
g = v & 0xff00ff00;
327 *(uint32_t *)&d[idx] = (v >> 16) +
g + (v << 16);
334 int idx = 15 - src_size;
338 for (; idx < 15; idx += 4) {
339 register unsigned v = *(
const uint32_t *)&
s[idx],
g = v & 0x00ff00ff;
341 *(uint32_t *)&d[idx] = (v >> 16) +
g + (v << 16);
346 #define DEFINE_SHUFFLE_BYTES(name, a, b, c, d) \
347 static void shuffle_bytes_##name (const uint8_t *src, \
348 uint8_t *dst, int src_size) \
352 for (i = 0; i < src_size; i += 4) { \
353 dst[i + 0] = src[i + a]; \
354 dst[i + 1] = src[i + b]; \
355 dst[i + 2] = src[i + c]; \
356 dst[i + 3] = src[i + d]; \
369 for (
i = 0;
i < src_size;
i += 3) {
371 dst[
i + 1] =
src[
i + 1];
372 dst[
i + 2] =
src[
i + 0];
380 int lumStride,
int chromStride,
381 int dstStride,
int vertLumPerChroma)
384 const int chromWidth =
width >> 1;
386 for (y = 0; y <
height; y++) {
388 uint64_t *ldst = (uint64_t *)dst;
389 const uint8_t *yc = ysrc, *uc = usrc, *vc = vsrc;
390 for (
i = 0;
i < chromWidth;
i += 2) {
391 uint64_t k = yc[0] + (uc[0] << 8) +
392 (yc[1] << 16) + ((unsigned) vc[0] << 24);
393 uint64_t l = yc[2] + (uc[1] << 8) +
394 (yc[3] << 16) + ((unsigned) vc[1] << 24);
395 *ldst++ = k + (l << 32);
403 const uint8_t *yc = ysrc, *uc = usrc, *vc = vsrc;
405 for (
i = 0;
i < chromWidth;
i++) {
407 *idst++ = (yc[0] << 24) + (uc[0] << 16) +
408 (yc[1] << 8) + (vc[0] << 0);
410 *idst++ = yc[0] + (uc[0] << 8) +
411 (yc[1] << 16) + (vc[0] << 24);
418 if ((y & (vertLumPerChroma - 1)) == vertLumPerChroma - 1) {
434 int chromStride,
int dstStride)
438 chromStride, dstStride, 2);
444 int lumStride,
int chromStride,
445 int dstStride,
int vertLumPerChroma)
448 const int chromWidth =
width >> 1;
450 for (y = 0; y <
height; y++) {
452 uint64_t *ldst = (uint64_t *)dst;
453 const uint8_t *yc = ysrc, *uc = usrc, *vc = vsrc;
454 for (
i = 0;
i < chromWidth;
i += 2) {
455 uint64_t k = uc[0] + (yc[0] << 8) +
456 (vc[0] << 16) + ((unsigned) yc[1] << 24);
457 uint64_t l = uc[1] + (yc[2] << 8) +
458 (vc[1] << 16) + ((unsigned) yc[3] << 24);
459 *ldst++ = k + (l << 32);
467 const uint8_t *yc = ysrc, *uc = usrc, *vc = vsrc;
469 for (
i = 0;
i < chromWidth;
i++) {
471 *idst++ = (uc[0] << 24) + (yc[0] << 16) +
472 (vc[0] << 8) + (yc[1] << 0);
474 *idst++ = uc[0] + (yc[0] << 8) +
475 (vc[0] << 16) + (yc[1] << 24);
482 if ((y & (vertLumPerChroma - 1)) == vertLumPerChroma - 1) {
498 int chromStride,
int dstStride)
502 chromStride, dstStride, 2);
511 int chromStride,
int dstStride)
514 chromStride, dstStride, 1);
523 int chromStride,
int dstStride)
526 chromStride, dstStride, 1);
536 int chromStride,
int srcStride)
539 const int chromWidth =
width >> 1;
541 for (y = 0; y <
height; y += 2) {
543 for (
i = 0;
i < chromWidth;
i++) {
544 ydst[2 *
i + 0] =
src[4 *
i + 0];
545 udst[
i] =
src[4 *
i + 1];
546 ydst[2 *
i + 1] =
src[4 *
i + 2];
547 vdst[
i] =
src[4 *
i + 3];
552 for (
i = 0;
i < chromWidth;
i++) {
553 ydst[2 *
i + 0] =
src[4 *
i + 0];
554 ydst[2 *
i + 1] =
src[4 *
i + 2];
564 int srcHeight,
int srcStride,
int dstStride)
571 for (
x = 0;
x < srcWidth - 1;
x++) {
572 dst[2 *
x + 1] = (3 *
src[
x] +
src[
x + 1]) >> 2;
573 dst[2 *
x + 2] = (
src[
x] + 3 *
src[
x + 1]) >> 2;
575 dst[2 * srcWidth - 1] =
src[srcWidth - 1];
579 for (y = 1; y < srcHeight; y++) {
580 const int mmxSize = 1;
582 dst[0] = (
src[0] * 3 +
src[srcStride]) >> 2;
583 dst[dstStride] = (
src[0] + 3 *
src[srcStride]) >> 2;
585 for (
x = mmxSize - 1;
x < srcWidth - 1;
x++) {
586 dst[2 *
x + 1] = (
src[
x + 0] * 3 +
src[
x + srcStride + 1]) >> 2;
587 dst[2 *
x + dstStride + 2] = (
src[
x + 0] + 3 *
src[
x + srcStride + 1]) >> 2;
588 dst[2 *
x + dstStride + 1] = (
src[
x + 1] + 3 *
src[
x + srcStride]) >> 2;
589 dst[2 *
x + 2] = (
src[
x + 1] * 3 +
src[
x + srcStride]) >> 2;
591 dst[srcWidth * 2 - 1] = (
src[srcWidth - 1] * 3 +
src[srcWidth - 1 + srcStride]) >> 2;
592 dst[srcWidth * 2 - 1 + dstStride] = (
src[srcWidth - 1] + 3 *
src[srcWidth - 1 + srcStride]) >> 2;
594 dst += dstStride * 2;
601 for (
x = 0;
x < srcWidth - 1;
x++) {
602 dst[2 *
x + 1] = (
src[
x] * 3 +
src[
x + 1]) >> 2;
603 dst[2 *
x + 2] = (
src[
x] + 3 *
src[
x + 1]) >> 2;
605 dst[2 * srcWidth - 1] =
src[srcWidth - 1];
617 int chromStride,
int srcStride)
620 const int chromWidth =
width >> 1;
622 for (y = 0; y <
height; y += 2) {
624 for (
i = 0;
i < chromWidth;
i++) {
625 udst[
i] =
src[4 *
i + 0];
626 ydst[2 *
i + 0] =
src[4 *
i + 1];
627 vdst[
i] =
src[4 *
i + 2];
628 ydst[2 *
i + 1] =
src[4 *
i + 3];
633 for (
i = 0;
i < chromWidth;
i++) {
634 ydst[2 *
i + 0] =
src[4 *
i + 1];
635 ydst[2 *
i + 1] =
src[4 *
i + 3];
659 const int chromWidth =
width >> 1;
661 for (y = 0; y <
height; y += 2) {
663 for (
i = 0;
i < chromWidth;
i++) {
664 unsigned int b =
src[6 *
i + 0];
665 unsigned int g =
src[6 *
i + 1];
666 unsigned int r =
src[6 *
i + 2];
689 for (
i = 0;
i < chromWidth;
i++) {
690 unsigned int b =
src[6 *
i + 0];
691 unsigned int g =
src[6 *
i + 1];
692 unsigned int r =
src[6 *
i + 2];
714 int src1Stride,
int src2Stride,
int dstStride)
721 dest[2 *
w + 0] =
src1[
w];
722 dest[2 *
w + 1] = src2[
w];
732 int dst1Stride,
int dst2Stride)
739 dst1[
w] =
src[2 *
w + 0];
740 dst2[
w] =
src[2 *
w + 1];
751 int srcStride1,
int srcStride2,
752 int dstStride1,
int dstStride2)
758 for (y = 0; y <
h; y++) {
760 uint8_t *d = dst1 + dstStride1 * y;
761 for (
x = 0;
x <
w;
x++)
762 d[2 *
x] = d[2 *
x + 1] =
s1[
x];
764 for (y = 0; y <
h; y++) {
765 const uint8_t *
s2 = src2 + srcStride2 * (y >> 1);
766 uint8_t *d = dst2 + dstStride2 * y;
767 for (
x = 0;
x <
w;
x++)
768 d[2 *
x] = d[2 *
x + 1] =
s2[
x];
775 int srcStride1,
int srcStride2,
776 int srcStride3,
int dstStride)
782 for (y = 0; y <
h; y++) {
784 const uint8_t *up = src2 + srcStride2 * (y >> 2);
785 const uint8_t *vp = src3 + srcStride3 * (y >> 2);
786 uint8_t *d = dst + dstStride * y;
787 for (
x = 0;
x <
w;
x++) {
788 const int x2 =
x << 2;
789 d[8 *
x + 0] = yp[x2];
790 d[8 *
x + 1] = up[
x];
791 d[8 *
x + 2] = yp[x2 + 1];
792 d[8 *
x + 3] = vp[
x];
793 d[8 *
x + 4] = yp[x2 + 2];
794 d[8 *
x + 5] = up[
x];
795 d[8 *
x + 6] = yp[x2 + 3];
796 d[8 *
x + 7] = vp[
x];
807 dst[count] =
src[2 * count];
820 dst0[count] =
src[4 * count + 0];
821 dst1[count] =
src[4 * count + 2];
835 dst0[count] = (
src0[4 * count + 0] +
src1[4 * count + 0]) >> 1;
836 dst1[count] = (
src0[4 * count + 2] +
src1[4 * count + 2]) >> 1;
850 dst0[count] =
src[4 * count + 0];
851 dst1[count] =
src[4 * count + 2];
867 dst0[count] = (
src0[4 * count + 0] +
src1[4 * count + 0]) >> 1;
868 dst1[count] = (
src0[4 * count + 2] +
src1[4 * count + 2]) >> 1;
875 int lumStride,
int chromStride,
int srcStride)
880 for (y = 0; y <
height; y++) {
895 int lumStride,
int chromStride,
int srcStride)
900 for (y = 0; y <
height; y++) {
913 int lumStride,
int chromStride,
int srcStride)
918 for (y = 0; y <
height; y++) {
933 int lumStride,
int chromStride,
int srcStride)
938 for (y = 0; y <
height; y++) {
static void yuvPlanartouyvy_c(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, int width, int height, int lumStride, int chromStride, int dstStride, int vertLumPerChroma)
static void RENAME() yv12toyuy2(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, int width, int height, int lumStride, int chromStride, int dstStride)
Height should be a multiple of 2 and width should be a multiple of 16.
static void rgb32to15_c(const uint8_t *src, uint8_t *dst, int src_size)
void(* shuffle_bytes_3012)(const uint8_t *src, uint8_t *dst, int src_size)
static void RENAME() rgb16to32(const uint8_t *src, uint8_t *dst, int src_size)
static void yuv422ptoyuy2_c(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, int width, int height, int lumStride, int chromStride, int dstStride)
Width should be a multiple of 16.
static void RENAME() rgb24tobgr16(const uint8_t *src, uint8_t *dst, int src_size)
static void extract_even2_c(const uint8_t *src, uint8_t *dst0, uint8_t *dst1, int count)
static void RENAME() rgb24tobgr32(const uint8_t *src, uint8_t *dst, int src_size)
static void rgb16to15_c(const uint8_t *src, uint8_t *dst, int src_size)
static void yv12touyvy_c(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, int width, int height, int lumStride, int chromStride, int dstStride)
Height should be a multiple of 2 and width should be a multiple of 16 (If this is a problem for anyon...
static av_cold int end(AVCodecContext *avctx)
static void rgb24tobgr24_c(const uint8_t *src, uint8_t *dst, int src_size)
void(* shuffle_bytes_3210)(const uint8_t *src, uint8_t *dst, int src_size)
static const char rgb2yuv[]
static void yuyvtoyuv422_c(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
static void RENAME() yv12touyvy(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, int width, int height, int lumStride, int chromStride, int dstStride)
Height should be a multiple of 2 and width should be a multiple of 16 (If this is a problem for anyon...
static void RENAME() rgb24to16(const uint8_t *src, uint8_t *dst, int src_size)
static void rgb32tobgr15_c(const uint8_t *src, uint8_t *dst, int src_size)
static void RENAME() rgb32to15(const uint8_t *src, uint8_t *dst, int src_size)
static void deinterleaveBytes_c(const uint8_t *src, uint8_t *dst1, uint8_t *dst2, int width, int height, int srcStride, int dst1Stride, int dst2Stride)
static void rgb15to32_c(const uint8_t *src, uint8_t *dst, int src_size)
static void shuffle_bytes_0321_c(const uint8_t *src, uint8_t *dst, int src_size)
static void RENAME() rgb16to15(const uint8_t *src, uint8_t *dst, int src_size)
#define DEFINE_SHUFFLE_BYTES(name, a, b, c, d)
static void RENAME() rgb24to15(const uint8_t *src, uint8_t *dst, int src_size)
static void interleaveBytes_c(const uint8_t *src1, const uint8_t *src2, uint8_t *dest, int width, int height, int src1Stride, int src2Stride, int dstStride)
FFmpeg Automated Testing Environment ************************************Introduction Using FATE from your FFmpeg source directory Submitting the results to the FFmpeg result aggregation server Uploading new samples to the fate suite FATE makefile targets and variables Makefile targets Makefile variables Examples Introduction **************FATE is an extended regression suite on the client side and a means for results aggregation and presentation on the server side The first part of this document explains how you can use FATE from your FFmpeg source directory to test your ffmpeg binary The second part describes how you can run FATE to submit the results to FFmpeg’s FATE server In any way you can have a look at the publicly viewable FATE results by visiting this as it can be seen if some test on some platform broke with their recent contribution This usually happens on the platforms the developers could not test on The second part of this document describes how you can run FATE to submit your results to FFmpeg’s FATE server If you want to submit your results be sure to check that your combination of OS and compiler is not already listed on the above mentioned website In the third part you can find a comprehensive listing of FATE makefile targets and variables Using FATE from your FFmpeg source directory **********************************************If you want to run FATE on your machine you need to have the samples in place You can get the samples via the build target fate rsync Use this command from the top level source this will cause FATE to fail NOTE To use a custom wrapper to run the pass ‘ target exec’ to ‘configure’ or set the TARGET_EXEC Make variable Submitting the results to the FFmpeg result aggregation server ****************************************************************To submit your results to the server you should run fate through the shell script ‘tests fate sh’ from the FFmpeg sources This script needs to be invoked with a configuration file as its first argument tests fate sh path to fate_config A configuration file template with comments describing the individual configuration variables can be found at ‘doc fate_config sh template’ Create a configuration that suits your based on the configuration template The ‘slot’ configuration variable can be any string that is not yet but it is suggested that you name it adhering to the following pattern ‘ARCH OS COMPILER COMPILER VERSION’ The configuration file itself will be sourced in a shell therefore all shell features may be used This enables you to setup the environment as you need it for your build For your first test runs the ‘fate_recv’ variable should be empty or commented out This will run everything as normal except that it will omit the submission of the results to the server The following files should be present in $workdir as specified in the configuration it may help to try out the ‘ssh’ command with one or more ‘ v’ options You should get detailed output concerning your SSH configuration and the authentication process The only thing left is to automate the execution of the fate sh script and the synchronisation of the samples directory Uploading new samples to the fate suite *****************************************If you need a sample uploaded send a mail to samples request This is for developers who have an account on the fate suite server If you upload new please make sure they are as small as space on each network bandwidth and so on benefit from smaller test cases Also keep in mind older checkouts use existing sample that means in practice generally do not remove or overwrite files as it likely would break older checkouts or releases Also all needed samples for a commit should be ideally before the push If you need an account for frequently uploading samples or you wish to help others by doing that send a mail to ffmpeg devel rsync vauL Duo x
static void extract_odd2avg_c(const uint8_t *src0, const uint8_t *src1, uint8_t *dst0, uint8_t *dst1, int count)
static void RENAME() rgb32to16(const uint8_t *src, uint8_t *dst, int src_size)
void(* ff_rgb24toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, int width, int height, int lumStride, int chromStride, int srcStride, int32_t *rgb2yuv)
Height should be a multiple of 2 and width should be a multiple of 2.
static void rgb32to16_c(const uint8_t *src, uint8_t *dst, int src_size)
static void RENAME() vu9_to_vu12(const uint8_t *src1, const uint8_t *src2, uint8_t *dst1, uint8_t *dst2, int width, int height, int srcStride1, int srcStride2, int dstStride1, int dstStride2)
static void rgb24to15_c(const uint8_t *src, uint8_t *dst, int src_size)
static void rgb15to16_c(const uint8_t *src, uint8_t *dst, int src_size)
static void rgb24tobgr32_c(const uint8_t *src, uint8_t *dst, int src_size)
#define AV_CEIL_RSHIFT(a, b)
static void rgb16to32_c(const uint8_t *src, uint8_t *dst, int src_size)
static void RENAME() interleaveBytes(const uint8_t *src1, const uint8_t *src2, uint8_t *dest, int width, int height, int src1Stride, int src2Stride, int dstStride)
Height should be a multiple of 2 and width should be a multiple of 2.
static void RENAME() rgb15tobgr24(const uint8_t *src, uint8_t *dst, int src_size)
static void yuy2toyv12_c(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, int width, int height, int lumStride, int chromStride, int srcStride)
Height should be a multiple of 2 and width should be a multiple of 16.
void(* shuffle_bytes_1230)(const uint8_t *src, uint8_t *dst, int src_size)
static void extract_odd2_c(const uint8_t *src, uint8_t *dst0, uint8_t *dst1, int count)
void(* shuffle_bytes_2103)(const uint8_t *src, uint8_t *dst, int src_size)
static void RENAME() yuv422ptoyuy2(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, int width, int height, int lumStride, int chromStride, int dstStride)
Width should be a multiple of 16.
static void rgb24to16_c(const uint8_t *src, uint8_t *dst, int src_size)
static void uyvytoyuv422_c(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
static void yv12toyuy2_c(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, int width, int height, int lumStride, int chromStride, int dstStride)
Height should be a multiple of 2 and width should be a multiple of 16.
static void RENAME() rgb15to32(const uint8_t *src, uint8_t *dst, int src_size)
static void shuffle_bytes_2103_c(const uint8_t *src, uint8_t *dst, int src_size)
static void rgb32tobgr16_c(const uint8_t *src, uint8_t *dst, int src_size)
static void RENAME() yuy2toyv12(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, int width, int height, int lumStride, int chromStride, int srcStride)
Height should be a multiple of 2 and width should be a multiple of 16.
static void yvu9_to_yuy2_c(const uint8_t *src1, const uint8_t *src2, const uint8_t *src3, uint8_t *dst, int width, int height, int srcStride1, int srcStride2, int srcStride3, int dstStride)
void(* shuffle_bytes_0321)(const uint8_t *src, uint8_t *dst, int src_size)
static void RENAME() yuyvtoyuv422(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
static void uyvytoyuv420_c(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
void ff_rgb24toyv12_c(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, int width, int height, int lumStride, int chromStride, int srcStride, int32_t *rgb2yuv)
Height should be a multiple of 2 and width should be a multiple of 2.
static void rgb24tobgr16_c(const uint8_t *src, uint8_t *dst, int src_size)
static void RENAME() yvu9_to_yuy2(const uint8_t *src1, const uint8_t *src2, const uint8_t *src3, uint8_t *dst, int width, int height, int srcStride1, int srcStride2, int srcStride3, int dstStride)
#define i(width, name, range_min, range_max)
static void extract_even_c(const uint8_t *src, uint8_t *dst, int count)
static void RENAME() rgb24tobgr24(const uint8_t *src, uint8_t *dst, int src_size)
static void rgb32tobgr24_c(const uint8_t *src, uint8_t *dst, int src_size)
static void uyvytoyv12_c(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, int width, int height, int lumStride, int chromStride, int srcStride)
Height should be a multiple of 2 and width should be a multiple of 16.
static void RENAME() rgb16tobgr24(const uint8_t *src, uint8_t *dst, int src_size)
static void RENAME() uyvytoyuv422(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
void(* deinterleaveBytes)(const uint8_t *src, uint8_t *dst1, uint8_t *dst2, int width, int height, int srcStride, int dst1Stride, int dst2Stride)
FFmpeg Automated Testing Environment ************************************Introduction Using FATE from your FFmpeg source directory Submitting the results to the FFmpeg result aggregation server Uploading new samples to the fate suite FATE makefile targets and variables Makefile targets Makefile variables Examples Introduction **************FATE is an extended regression suite on the client side and a means for results aggregation and presentation on the server side The first part of this document explains how you can use FATE from your FFmpeg source directory to test your ffmpeg binary The second part describes how you can run FATE to submit the results to FFmpeg’s FATE server In any way you can have a look at the publicly viewable FATE results by visiting this as it can be seen if some test on some platform broke with their recent contribution This usually happens on the platforms the developers could not test on The second part of this document describes how you can run FATE to submit your results to FFmpeg’s FATE server If you want to submit your results be sure to check that your combination of OS and compiler is not already listed on the above mentioned website In the third part you can find a comprehensive listing of FATE makefile targets and variables Using FATE from your FFmpeg source directory **********************************************If you want to run FATE on your machine you need to have the samples in place You can get the samples via the build target fate rsync Use this command from the top level source this will cause FATE to fail NOTE To use a custom wrapper to run the pass ‘ target exec’ to ‘configure’ or set the TARGET_EXEC Make variable Submitting the results to the FFmpeg result aggregation server ****************************************************************To submit your results to the server you should run fate through the shell script ‘tests fate sh’ from the FFmpeg sources This script needs to be invoked with a configuration file as its first argument tests fate sh path to fate_config A configuration file template with comments describing the individual configuration variables can be found at ‘doc fate_config sh template’ Create a configuration that suits your based on the configuration template The ‘slot’ configuration variable can be any string that is not yet but it is suggested that you name it adhering to the following pattern ‘ARCH OS COMPILER COMPILER VERSION’ The configuration file itself will be sourced in a shell therefore all shell features may be used This enables you to setup the environment as you need it for your build For your first test runs the ‘fate_recv’ variable should be empty or commented out This will run everything as normal except that it will omit the submission of the results to the server The following files should be present in $workdir as specified in the configuration it may help to try out the ‘ssh’ command with one or more ‘ v’ options You should get detailed output concerning your SSH configuration and the authentication process The only thing left is to automate the execution of the fate sh script and the synchronisation of the samples directory Uploading new samples to the fate suite *****************************************If you need a sample uploaded send a mail to samples request This is for developers who have an account on the fate suite server If you upload new please make sure they are as small as space on each network bandwidth and so on benefit from smaller test cases Also keep in mind older checkouts use existing sample that means in practice generally do not remove or overwrite files as it likely would break older checkouts or releases Also all needed samples for a commit should be ideally before the push If you need an account for frequently uploading samples or you wish to help others by doing that send a mail to ffmpeg devel rsync vauL Duo ug o o w
static void RENAME() uyvytoyuv420(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
static void yuv422ptouyvy_c(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, int width, int height, int lumStride, int chromStride, int dstStride)
Width should be a multiple of 16.
static void RENAME() rgb15to16(const uint8_t *src, uint8_t *dst, int src_size)
static av_cold void rgb2rgb_init_c(void)
static void RENAME() rgb32tobgr16(const uint8_t *src, uint8_t *dst, int src_size)
static void vu9_to_vu12_c(const uint8_t *src1, const uint8_t *src2, uint8_t *dst1, uint8_t *dst2, int width, int height, int srcStride1, int srcStride2, int dstStride1, int dstStride2)
static void rgb24tobgr15_c(const uint8_t *src, uint8_t *dst, int src_size)
static void RENAME() rgb32tobgr15(const uint8_t *src, uint8_t *dst, int src_size)
static void RENAME() rgb32tobgr24(const uint8_t *src, uint8_t *dst, int src_size)
static void extract_even2avg_c(const uint8_t *src0, const uint8_t *src1, uint8_t *dst0, uint8_t *dst1, int count)
static void yuyvtoyuv420_c(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
static void rgb15tobgr24_c(const uint8_t *src, uint8_t *dst, int src_size)
void(* planar2x)(const uint8_t *src, uint8_t *dst, int width, int height, int srcStride, int dstStride)
static void planar2x_c(const uint8_t *src, uint8_t *dst, int srcWidth, int srcHeight, int srcStride, int dstStride)
static void RENAME() yuyvtoyuv420(uint8_t *ydst, uint8_t *udst, uint8_t *vdst, const uint8_t *src, int width, int height, int lumStride, int chromStride, int srcStride)
static void yuvPlanartoyuy2_c(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, int width, int height, int lumStride, int chromStride, int dstStride, int vertLumPerChroma)
static void RENAME() rgb24tobgr15(const uint8_t *src, uint8_t *dst, int src_size)
static void RENAME() yuv422ptouyvy(const uint8_t *ysrc, const uint8_t *usrc, const uint8_t *vsrc, uint8_t *dst, int width, int height, int lumStride, int chromStride, int dstStride)
Width should be a multiple of 16.
static void rgb16tobgr24_c(const uint8_t *src, uint8_t *dst, int src_size)