39 for (i = 0; i < w; i++) {
40 const int temp = src[i];
46 for (i = 0; i < 16; i++) {
47 const int temp = src[i];
58 int *red,
int *green,
int *blue,
68 for (i = 0; i <
FFMIN(w, 4); i++) {
69 const int rt = src[i * 4 +
R];
70 const int gt = src[i * 4 +
G];
71 const int bt = src[i * 4 +
B];
72 const int at = src[i * 4 +
A];
73 dst[i * 4 +
R] = rt -
r;
74 dst[i * 4 +
G] = gt -
g;
75 dst[i * 4 +
B] = bt -
b;
76 dst[i * 4 +
A] = at - a;
85 *red = src[(w - 1) * 4 +
R];
86 *green = src[(w - 1) * 4 +
G];
87 *blue = src[(w - 1) * 4 +
B];
88 *alpha = src[(w - 1) * 4 +
A];
93 int *red,
int *green,
int *blue)
100 for (i = 0; i <
FFMIN(w, 16); i++) {
101 const int rt = src[i * 3 + 0];
102 const int gt = src[i * 3 + 1];
103 const int bt = src[i * 3 + 2];
104 dst[i * 3 + 0] = rt -
r;
105 dst[i * 3 + 1] = gt -
g;
106 dst[i * 3 + 2] = bt -
b;
112 s->
dsp.
diff_bytes(dst + 48, src + 48, src + 48 - 3, w * 3 - 48);
114 *red = src[(w - 1) * 3 + 0];
115 *green = src[(w - 1) * 3 + 1];
116 *blue = src[(w - 1) * 3 + 2];
124 for (i = 0; i < 256;) {
128 for (; i < 256 && len[i] == val && repeat < 255; i++)
131 assert(val < 32 && val >0 && repeat<256 && repeat>0);
134 buf[index++] = repeat;
136 buf[index++] = val | (repeat << 5);
188 "context=1 is not compatible with "
189 "2 pass huffyuv encoding\n");
197 "Error: YV12 is not supported by huffyuv; use "
198 "vcodec=ffvhuff or format=422p\n");
203 "Error: per-frame huffman tables are not supported "
204 "by huffyuv; use vcodec=ffvhuff\n");
209 "using huffyuv 2.2.0 or newer interlacing flag\n");
214 "Error: RGB is incompatible with median predictor\n");
229 for (i = 0; i < 3; i++)
230 for (j = 0; j < 256; j++)
234 for (i = 0; i < 3; i++) {
237 for (j = 0; j < 256; j++) {
238 s->
stats[i][j] += strtol(p, &next, 0);
239 if (next == p)
return -1;
243 if (p[0] == 0 || p[1] == 0 || p[2] == 0)
break;
246 for (i = 0; i < 3; i++)
247 for (j = 0; j < 256; j++) {
248 int d =
FFMIN(j, 256 - j);
250 s->
stats[i][j] = 100000000 / (d + 1);
254 for (i = 0; i < 3; i++) {
266 for (i = 0; i < 3; i++) {
268 for (j = 0; j < 256; j++) {
269 int d =
FFMIN(j, 256 - j);
270 s->
stats[i][j] = pels/(d + 1);
274 for (i = 0; i < 3; i++)
275 for (j = 0; j < 256; j++)
299 int y1 = y[2 * i + 1];\
306 for(i = 0; i < count; i++) {
317 for (i = 0; i < count; i++) {
329 for(i = 0; i < count; i++) {
350 int y0 = s->temp[0][2 * i];\
351 int y1 = s->temp[0][2 * i + 1];
356 put_bits(&s->pb, s->len[0][y0], s->bits[0][y0]);\
357 put_bits(&s->pb, s->len[0][y1], s->bits[0][y1]);
362 for (i = 0; i < count; i++) {
371 for (i = 0; i < count; i++) {
377 for (i = 0; i < count; i++) {
390 4 * planes * count) {
396 int g = s->temp[0][planes == 3 ? 3 * i + 1 : 4 * i + G]; \
397 int b = s->temp[0][planes == 3 ? 3 * i + 2 : 4 * i + B] - g & 0xFF; \
398 int r = s->temp[0][planes == 3 ? 3 * i + 0 : 4 * i + R] - g & 0xFF; \
399 int a = s->temp[0][planes * i + A];
409 put_bits(&s->pb, s->len[1][g], s->bits[1][g]); \
410 put_bits(&s->pb, s->len[0][b], s->bits[0][b]); \
411 put_bits(&s->pb, s->len[2][r], s->bits[2][r]); \
413 put_bits(&s->pb, s->len[2][a], s->bits[2][a]);
417 for (i = 0; i < count; i++) {
422 for (i = 0; i < count; i++) {
428 for (i = 0; i < count; i++) {
437 const AVFrame *pict,
int *got_packet)
441 const int width2 = s->
width>>1;
446 const AVFrame *
const p = pict;
447 int i, j,
size = 0, ret;
456 for (i = 0; i < 3; i++) {
463 for (i = 0; i < 3; i++)
464 for (j = 0; j < 256; j++)
465 s->
stats[i][j] >>= 1;
472 int lefty, leftu, leftv, y, cy;
486 int lefttopy, lefttopu, lefttopv;
503 lefttopy = p->
data[0][3];
504 lefttopu = p->
data[1][1];
505 lefttopv = p->
data[2][1];
512 for (; y <
height; y++,cy++) {
522 if (y >= height)
break;
535 for (cy = y = 1; y <
height; y++, cy++) {
551 if (y >= height)
break;
578 const int fake_stride = -fake_ystride;
580 int leftr, leftg, leftb, lefta;
588 &leftr, &leftg, &leftb, &lefta);
591 for (y = 1; y < s->
height; y++) {
596 &leftr, &leftg, &leftb, &lefta);
599 &leftr, &leftg, &leftb, &lefta);
606 const int fake_stride = -fake_ystride;
608 int leftr, leftg, leftb;
616 &leftr, &leftg, &leftb);
619 for (y = 1; y < s->
height; y++) {
625 &leftr, &leftg, &leftb);
628 &leftr, &leftg, &leftb);
645 char *end = p + 1024*30;
646 for (i = 0; i < 3; i++) {
647 for (j = 0; j < 256; j++) {
648 snprintf(p, end-p,
"%"PRIu64
" ", s->
stats[i][j]);
652 snprintf(p, end-p,
"\n");
664 pkt->
size = size * 4;
685 #if CONFIG_HUFFYUV_ENCODER
702 #if CONFIG_FFVHUFF_ENCODER