Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Michael Niedermayer authored on 2014/01/23 09:41:39... | ... |
@@ -39,8 +39,9 @@ |
39 | 39 |
|
40 | 40 |
#define VLC_BITS 11 |
41 | 41 |
|
42 |
-#define MAX_BITS 14 |
|
42 |
+#define MAX_BITS 16 |
|
43 | 43 |
#define MAX_N (1<<MAX_BITS) |
44 |
+#define MAX_VLC_N 16384 |
|
44 | 45 |
|
45 | 46 |
#if HAVE_BIGENDIAN |
46 | 47 |
#define B 3 |
... | ... |
@@ -73,6 +74,7 @@ typedef struct HYuvContext { |
73 | 73 |
int bgr32; //use bgr32 instead of bgr24 |
74 | 74 |
int bps; |
75 | 75 |
int n; // 1<<bps |
76 |
+ int vlc_n; // number of vlc codes (FFMIN(1<<bps, MAX_VLC_N)) |
|
76 | 77 |
int alpha; |
77 | 78 |
int chroma; |
78 | 79 |
int yuv; |
... | ... |
@@ -85,9 +87,9 @@ typedef struct HYuvContext { |
85 | 85 |
int last_slice_end; |
86 | 86 |
uint8_t *temp[3]; |
87 | 87 |
uint16_t *temp16[3]; ///< identical to temp but 16bit type |
88 |
- uint64_t stats[4][MAX_N]; |
|
89 |
- uint8_t len[4][MAX_N]; |
|
90 |
- uint32_t bits[4][MAX_N]; |
|
88 |
+ uint64_t stats[4][MAX_VLC_N]; |
|
89 |
+ uint8_t len[4][MAX_VLC_N]; |
|
90 |
+ uint32_t bits[4][MAX_VLC_N]; |
|
91 | 91 |
uint32_t pix_bgr_map[1<<VLC_BITS]; |
92 | 92 |
VLC vlc[8]; //Y,U,V,A,YY,YU,YV,AA |
93 | 93 |
uint8_t *bitstream_buffer; |
... | ... |
@@ -120,12 +120,12 @@ static int generate_joint_tables(HYuvContext *s) |
120 | 120 |
int p, i, y, u; |
121 | 121 |
for (p = 0; p < 4; p++) { |
122 | 122 |
int p0 = s->version > 2 ? p : 0; |
123 |
- for (i = y = 0; y < s->n; y++) { |
|
123 |
+ for (i = y = 0; y < s->vlc_n; y++) { |
|
124 | 124 |
int len0 = s->len[p0][y]; |
125 | 125 |
int limit = VLC_BITS - len0; |
126 | 126 |
if(limit <= 0 || !len0) |
127 | 127 |
continue; |
128 |
- for (u = 0; u < s->n; u++) { |
|
128 |
+ for (u = 0; u < s->vlc_n; u++) { |
|
129 | 129 |
int len1 = s->len[p][u]; |
130 | 130 |
if (len1 > limit || !len1) |
131 | 131 |
continue; |
... | ... |
@@ -201,13 +201,13 @@ static int read_huffman_tables(HYuvContext *s, const uint8_t *src, int length) |
201 | 201 |
count = 1 + s->alpha + 2*s->chroma; |
202 | 202 |
|
203 | 203 |
for (i = 0; i < count; i++) { |
204 |
- if (read_len_table(s->len[i], &gb, s->n) < 0) |
|
204 |
+ if (read_len_table(s->len[i], &gb, s->vlc_n) < 0) |
|
205 | 205 |
return -1; |
206 |
- if (ff_huffyuv_generate_bits_table(s->bits[i], s->len[i], s->n) < 0) { |
|
206 |
+ if (ff_huffyuv_generate_bits_table(s->bits[i], s->len[i], s->vlc_n) < 0) { |
|
207 | 207 |
return -1; |
208 | 208 |
} |
209 | 209 |
ff_free_vlc(&s->vlc[i]); |
210 |
- if ((ret = init_vlc(&s->vlc[i], VLC_BITS, s->n, s->len[i], 1, 1, |
|
210 |
+ if ((ret = init_vlc(&s->vlc[i], VLC_BITS, s->vlc_n, s->len[i], 1, 1, |
|
211 | 211 |
s->bits[i], 4, 4, 0)) < 0) |
212 | 212 |
return ret; |
213 | 213 |
} |
... | ... |
@@ -280,6 +280,7 @@ static av_cold int decode_init(AVCodecContext *avctx) |
280 | 280 |
|
281 | 281 |
s->bps = 8; |
282 | 282 |
s->n = 1<<s->bps; |
283 |
+ s->vlc_n = FFMIN(s->n, MAX_VLC_N); |
|
283 | 284 |
s->chroma = 1; |
284 | 285 |
if (s->version >= 2) { |
285 | 286 |
int method, interlace; |
... | ... |
@@ -297,6 +298,7 @@ static av_cold int decode_init(AVCodecContext *avctx) |
297 | 297 |
} else { |
298 | 298 |
s->bps = (avctx->extradata[1] >> 4) + 1; |
299 | 299 |
s->n = 1<<s->bps; |
300 |
+ s->vlc_n = FFMIN(s->n, MAX_VLC_N); |
|
300 | 301 |
s->chroma_h_shift = avctx->extradata[1] & 3; |
301 | 302 |
s->chroma_v_shift = (avctx->extradata[1] >> 2) & 3; |
302 | 303 |
s->yuv = !!(((uint8_t*)avctx->extradata)[2] & 1); |
... | ... |
@@ -374,6 +376,9 @@ static av_cold int decode_init(AVCodecContext *avctx) |
374 | 374 |
case 0x070: |
375 | 375 |
avctx->pix_fmt = AV_PIX_FMT_GRAY8; |
376 | 376 |
break; |
377 |
+ case 0x0F0: |
|
378 |
+ avctx->pix_fmt = AV_PIX_FMT_GRAY16; |
|
379 |
+ break; |
|
377 | 380 |
case 0x170: |
378 | 381 |
avctx->pix_fmt = AV_PIX_FMT_GRAY8A; |
379 | 382 |
break; |
... | ... |
@@ -398,6 +403,9 @@ static av_cold int decode_init(AVCodecContext *avctx) |
398 | 398 |
case 0x6D0: |
399 | 399 |
avctx->pix_fmt = AV_PIX_FMT_YUV444P14; |
400 | 400 |
break; |
401 |
+ case 0x6F0: |
|
402 |
+ avctx->pix_fmt = AV_PIX_FMT_YUV444P16; |
|
403 |
+ break; |
|
401 | 404 |
case 0x671: |
402 | 405 |
avctx->pix_fmt = AV_PIX_FMT_YUV422P; |
403 | 406 |
break; |
... | ... |
@@ -413,6 +421,9 @@ static av_cold int decode_init(AVCodecContext *avctx) |
413 | 413 |
case 0x6D1: |
414 | 414 |
avctx->pix_fmt = AV_PIX_FMT_YUV422P14; |
415 | 415 |
break; |
416 |
+ case 0x6F1: |
|
417 |
+ avctx->pix_fmt = AV_PIX_FMT_YUV422P16; |
|
418 |
+ break; |
|
416 | 419 |
case 0x672: |
417 | 420 |
avctx->pix_fmt = AV_PIX_FMT_YUV411P; |
418 | 421 |
break; |
... | ... |
@@ -434,6 +445,9 @@ static av_cold int decode_init(AVCodecContext *avctx) |
434 | 434 |
case 0x6D5: |
435 | 435 |
avctx->pix_fmt = AV_PIX_FMT_YUV420P14; |
436 | 436 |
break; |
437 |
+ case 0x6F5: |
|
438 |
+ avctx->pix_fmt = AV_PIX_FMT_YUV420P16; |
|
439 |
+ break; |
|
437 | 440 |
case 0x67A: |
438 | 441 |
avctx->pix_fmt = AV_PIX_FMT_YUV410P; |
439 | 442 |
break; |
... | ... |
@@ -446,6 +460,9 @@ static av_cold int decode_init(AVCodecContext *avctx) |
446 | 446 |
case 0x790: |
447 | 447 |
avctx->pix_fmt = AV_PIX_FMT_YUVA444P10; |
448 | 448 |
break; |
449 |
+ case 0x7F0: |
|
450 |
+ avctx->pix_fmt = AV_PIX_FMT_YUVA444P16; |
|
451 |
+ break; |
|
449 | 452 |
case 0x771: |
450 | 453 |
avctx->pix_fmt = AV_PIX_FMT_YUVA422P; |
451 | 454 |
break; |
... | ... |
@@ -455,6 +472,9 @@ static av_cold int decode_init(AVCodecContext *avctx) |
455 | 455 |
case 0x791: |
456 | 456 |
avctx->pix_fmt = AV_PIX_FMT_YUVA422P10; |
457 | 457 |
break; |
458 |
+ case 0x7F1: |
|
459 |
+ avctx->pix_fmt = AV_PIX_FMT_YUVA422P16; |
|
460 |
+ break; |
|
458 | 461 |
case 0x775: |
459 | 462 |
avctx->pix_fmt = AV_PIX_FMT_YUVA420P; |
460 | 463 |
break; |
... | ... |
@@ -464,6 +484,9 @@ static av_cold int decode_init(AVCodecContext *avctx) |
464 | 464 |
case 0x795: |
465 | 465 |
avctx->pix_fmt = AV_PIX_FMT_YUVA420P10; |
466 | 466 |
break; |
467 |
+ case 0x7F5: |
|
468 |
+ avctx->pix_fmt = AV_PIX_FMT_YUVA420P16; |
|
469 |
+ break; |
|
467 | 470 |
default: |
468 | 471 |
return AVERROR_INVALIDDATA; |
469 | 472 |
} |
... | ... |
@@ -557,10 +580,17 @@ static void decode_422_bitstream(HYuvContext *s, int count) |
557 | 557 |
dst1 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3);\ |
558 | 558 |
}\ |
559 | 559 |
} |
560 |
-#define READ_2PIX_PLANE16(dst0, dst1, plane){\ |
|
560 |
+#define READ_2PIX_PLANE14(dst0, dst1, plane){\ |
|
561 | 561 |
dst0 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3);\ |
562 | 562 |
dst1 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3);\ |
563 | 563 |
} |
564 |
+ |
|
565 |
+#define READ_2PIX_PLANE16(dst0, dst1, plane){\ |
|
566 |
+ dst0 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)<<2;\ |
|
567 |
+ dst0 += get_bits(&s->gb, 2);\ |
|
568 |
+ dst1 = get_vlc2(&s->gb, s->vlc[plane].table, VLC_BITS, 3)<<2;\ |
|
569 |
+ dst1 += get_bits(&s->gb, 2);\ |
|
570 |
+} |
|
564 | 571 |
static void decode_plane_bitstream(HYuvContext *s, int count, int plane) |
565 | 572 |
{ |
566 | 573 |
int i; |
... | ... |
@@ -577,6 +607,16 @@ static void decode_plane_bitstream(HYuvContext *s, int count, int plane) |
577 | 577 |
READ_2PIX_PLANE(s->temp[0][2 * i], s->temp[0][2 * i + 1], plane); |
578 | 578 |
} |
579 | 579 |
} |
580 |
+ } else if (s->bps <= 14) { |
|
581 |
+ if (count >= (get_bits_left(&s->gb)) / (31 * 2)) { |
|
582 |
+ for (i = 0; i < count && get_bits_left(&s->gb) > 0; i++) { |
|
583 |
+ READ_2PIX_PLANE14(s->temp16[0][2 * i], s->temp16[0][2 * i + 1], plane); |
|
584 |
+ } |
|
585 |
+ } else { |
|
586 |
+ for(i=0; i<count; i++){ |
|
587 |
+ READ_2PIX_PLANE14(s->temp16[0][2 * i], s->temp16[0][2 * i + 1], plane); |
|
588 |
+ } |
|
589 |
+ } |
|
580 | 590 |
} else { |
581 | 591 |
if (count >= (get_bits_left(&s->gb)) / (31 * 2)) { |
582 | 592 |
for (i = 0; i < count && get_bits_left(&s->gb) > 0; i++) { |
... | ... |
@@ -164,7 +164,7 @@ static int store_table(HYuvContext *s, const uint8_t *len, uint8_t *buf) |
164 | 164 |
{ |
165 | 165 |
int i; |
166 | 166 |
int index = 0; |
167 |
- int n = s->n; |
|
167 |
+ int n = s->vlc_n; |
|
168 | 168 |
|
169 | 169 |
for (i = 0; i < n;) { |
170 | 170 |
int val = len[i]; |
... | ... |
@@ -195,10 +195,10 @@ static int store_huffman_tables(HYuvContext *s, uint8_t *buf) |
195 | 195 |
count = 1 + s->alpha + 2*s->chroma; |
196 | 196 |
|
197 | 197 |
for (i = 0; i < count; i++) { |
198 |
- if ((ret = ff_huff_gen_len_table(s->len[i], s->stats[i], s->n)) < 0) |
|
198 |
+ if ((ret = ff_huff_gen_len_table(s->len[i], s->stats[i], s->vlc_n)) < 0) |
|
199 | 199 |
return ret; |
200 | 200 |
|
201 |
- if (ff_huffyuv_generate_bits_table(s->bits[i], s->len[i], s->n) < 0) { |
|
201 |
+ if (ff_huffyuv_generate_bits_table(s->bits[i], s->len[i], s->vlc_n) < 0) { |
|
202 | 202 |
return -1; |
203 | 203 |
} |
204 | 204 |
|
... | ... |
@@ -254,6 +254,7 @@ static av_cold int encode_init(AVCodecContext *avctx) |
254 | 254 |
case AV_PIX_FMT_YUV440P: |
255 | 255 |
case AV_PIX_FMT_GBRP: |
256 | 256 |
case AV_PIX_FMT_GRAY8: |
257 |
+ case AV_PIX_FMT_GRAY16: |
|
257 | 258 |
case AV_PIX_FMT_YUVA444P: |
258 | 259 |
case AV_PIX_FMT_YUVA420P: |
259 | 260 |
case AV_PIX_FMT_YUVA422P: |
... | ... |
@@ -263,20 +264,26 @@ static av_cold int encode_init(AVCodecContext *avctx) |
263 | 263 |
case AV_PIX_FMT_YUV420P10: |
264 | 264 |
case AV_PIX_FMT_YUV420P12: |
265 | 265 |
case AV_PIX_FMT_YUV420P14: |
266 |
+ case AV_PIX_FMT_YUV420P16: |
|
266 | 267 |
case AV_PIX_FMT_YUV422P9: |
267 | 268 |
case AV_PIX_FMT_YUV422P10: |
268 | 269 |
case AV_PIX_FMT_YUV422P12: |
269 | 270 |
case AV_PIX_FMT_YUV422P14: |
271 |
+ case AV_PIX_FMT_YUV422P16: |
|
270 | 272 |
case AV_PIX_FMT_YUV444P9: |
271 | 273 |
case AV_PIX_FMT_YUV444P10: |
272 | 274 |
case AV_PIX_FMT_YUV444P12: |
273 | 275 |
case AV_PIX_FMT_YUV444P14: |
276 |
+ case AV_PIX_FMT_YUV444P16: |
|
274 | 277 |
case AV_PIX_FMT_YUVA420P9: |
275 | 278 |
case AV_PIX_FMT_YUVA420P10: |
279 |
+ case AV_PIX_FMT_YUVA420P16: |
|
276 | 280 |
case AV_PIX_FMT_YUVA422P9: |
277 | 281 |
case AV_PIX_FMT_YUVA422P10: |
282 |
+ case AV_PIX_FMT_YUVA422P16: |
|
278 | 283 |
case AV_PIX_FMT_YUVA444P9: |
279 | 284 |
case AV_PIX_FMT_YUVA444P10: |
285 |
+ case AV_PIX_FMT_YUVA444P16: |
|
280 | 286 |
s->version = 3; |
281 | 287 |
break; |
282 | 288 |
case AV_PIX_FMT_RGB32: |
... | ... |
@@ -290,6 +297,7 @@ static av_cold int encode_init(AVCodecContext *avctx) |
290 | 290 |
return AVERROR(EINVAL); |
291 | 291 |
} |
292 | 292 |
s->n = 1<<s->bps; |
293 |
+ s->vlc_n = FFMIN(s->n, MAX_VLC_N); |
|
293 | 294 |
|
294 | 295 |
avctx->bits_per_coded_sample = s->bitstream_bpp; |
295 | 296 |
s->decorrelate = s->bitstream_bpp >= 24 && !s->yuv && avctx->pix_fmt != AV_PIX_FMT_GBRP; |
... | ... |
@@ -362,14 +370,14 @@ static av_cold int encode_init(AVCodecContext *avctx) |
362 | 362 |
char *p = avctx->stats_in; |
363 | 363 |
|
364 | 364 |
for (i = 0; i < 4; i++) |
365 |
- for (j = 0; j < s->n; j++) |
|
365 |
+ for (j = 0; j < s->vlc_n; j++) |
|
366 | 366 |
s->stats[i][j] = 1; |
367 | 367 |
|
368 | 368 |
for (;;) { |
369 | 369 |
for (i = 0; i < 4; i++) { |
370 | 370 |
char *next; |
371 | 371 |
|
372 |
- for (j = 0; j < s->n; j++) { |
|
372 |
+ for (j = 0; j < s->vlc_n; j++) { |
|
373 | 373 |
s->stats[i][j] += strtol(p, &next, 0); |
374 | 374 |
if (next == p) return -1; |
375 | 375 |
p = next; |
... | ... |
@@ -379,8 +387,8 @@ static av_cold int encode_init(AVCodecContext *avctx) |
379 | 379 |
} |
380 | 380 |
} else { |
381 | 381 |
for (i = 0; i < 4; i++) |
382 |
- for (j = 0; j < s->n; j++) { |
|
383 |
- int d = FFMIN(j, s->n - j); |
|
382 |
+ for (j = 0; j < s->vlc_n; j++) { |
|
383 |
+ int d = FFMIN(j, s->vlc_n - j); |
|
384 | 384 |
|
385 | 385 |
s->stats[i][j] = 100000000 / (d + 1); |
386 | 386 |
} |
... | ... |
@@ -394,14 +402,14 @@ static av_cold int encode_init(AVCodecContext *avctx) |
394 | 394 |
if (s->context) { |
395 | 395 |
for (i = 0; i < 4; i++) { |
396 | 396 |
int pels = s->width * s->height / (i ? 40 : 10); |
397 |
- for (j = 0; j < s->n; j++) { |
|
398 |
- int d = FFMIN(j, s->n - j); |
|
397 |
+ for (j = 0; j < s->vlc_n; j++) { |
|
398 |
+ int d = FFMIN(j, s->vlc_n - j); |
|
399 | 399 |
s->stats[i][j] = pels/(d + 1); |
400 | 400 |
} |
401 | 401 |
} |
402 | 402 |
} else { |
403 | 403 |
for (i = 0; i < 4; i++) |
404 |
- for (j = 0; j < s->n; j++) |
|
404 |
+ for (j = 0; j < s->vlc_n; j++) |
|
405 | 405 |
s->stats[i][j]= 0; |
406 | 406 |
} |
407 | 407 |
|
... | ... |
@@ -481,15 +489,26 @@ static int encode_plane_bitstream(HYuvContext *s, int count, int plane) |
481 | 481 |
#define LOAD2\ |
482 | 482 |
int y0 = s->temp[0][2 * i];\ |
483 | 483 |
int y1 = s->temp[0][2 * i + 1]; |
484 |
-#define LOAD2_16\ |
|
484 |
+#define LOAD2_14\ |
|
485 | 485 |
int y0 = s->temp16[0][2 * i] & mask;\ |
486 | 486 |
int y1 = s->temp16[0][2 * i + 1] & mask; |
487 |
+#define LOAD2_16\ |
|
488 |
+ int y0 = s->temp16[0][2 * i];\ |
|
489 |
+ int y1 = s->temp16[0][2 * i + 1]; |
|
487 | 490 |
#define STAT2\ |
488 | 491 |
s->stats[plane][y0]++;\ |
489 | 492 |
s->stats[plane][y1]++; |
493 |
+#define STAT2_16\ |
|
494 |
+ s->stats[plane][y0>>2]++;\ |
|
495 |
+ s->stats[plane][y1>>2]++; |
|
490 | 496 |
#define WRITE2\ |
491 | 497 |
put_bits(&s->pb, s->len[plane][y0], s->bits[plane][y0]);\ |
492 | 498 |
put_bits(&s->pb, s->len[plane][y1], s->bits[plane][y1]); |
499 |
+#define WRITE2_16\ |
|
500 |
+ put_bits(&s->pb, s->len[plane][y0>>2], s->bits[plane][y0>>2]);\ |
|
501 |
+ put_bits(&s->pb, 2, y0&3);\ |
|
502 |
+ put_bits(&s->pb, s->len[plane][y1>>2], s->bits[plane][y1>>2]);\ |
|
503 |
+ put_bits(&s->pb, 2, y1&3); |
|
493 | 504 |
|
494 | 505 |
count /= 2; |
495 | 506 |
|
... | ... |
@@ -515,11 +534,11 @@ static int encode_plane_bitstream(HYuvContext *s, int count, int plane) |
515 | 515 |
WRITE2; |
516 | 516 |
} |
517 | 517 |
} |
518 |
- } else { |
|
518 |
+ } else if (s->bps <= 14) { |
|
519 | 519 |
int mask = s->n - 1; |
520 | 520 |
if (s->flags & CODEC_FLAG_PASS1) { |
521 | 521 |
for (i = 0; i < count; i++) { |
522 |
- LOAD2_16; |
|
522 |
+ LOAD2_14; |
|
523 | 523 |
STAT2; |
524 | 524 |
} |
525 | 525 |
} |
... | ... |
@@ -528,16 +547,38 @@ static int encode_plane_bitstream(HYuvContext *s, int count, int plane) |
528 | 528 |
|
529 | 529 |
if (s->context) { |
530 | 530 |
for (i = 0; i < count; i++) { |
531 |
- LOAD2_16; |
|
531 |
+ LOAD2_14; |
|
532 | 532 |
STAT2; |
533 | 533 |
WRITE2; |
534 | 534 |
} |
535 | 535 |
} else { |
536 | 536 |
for (i = 0; i < count; i++) { |
537 |
- LOAD2_16; |
|
537 |
+ LOAD2_14; |
|
538 | 538 |
WRITE2; |
539 | 539 |
} |
540 | 540 |
} |
541 |
+ } else { |
|
542 |
+ if (s->flags & CODEC_FLAG_PASS1) { |
|
543 |
+ for (i = 0; i < count; i++) { |
|
544 |
+ LOAD2_16; |
|
545 |
+ STAT2_16; |
|
546 |
+ } |
|
547 |
+ } |
|
548 |
+ if (s->avctx->flags2 & CODEC_FLAG2_NO_OUTPUT) |
|
549 |
+ return 0; |
|
550 |
+ |
|
551 |
+ if (s->context) { |
|
552 |
+ for (i = 0; i < count; i++) { |
|
553 |
+ LOAD2_16; |
|
554 |
+ STAT2_16; |
|
555 |
+ WRITE2_16; |
|
556 |
+ } |
|
557 |
+ } else { |
|
558 |
+ for (i = 0; i < count; i++) { |
|
559 |
+ LOAD2_16; |
|
560 |
+ WRITE2_16; |
|
561 |
+ } |
|
562 |
+ } |
|
541 | 563 |
} |
542 | 564 |
#undef LOAD2 |
543 | 565 |
#undef STAT2 |
... | ... |
@@ -663,7 +704,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, |
663 | 663 |
return size; |
664 | 664 |
|
665 | 665 |
for (i = 0; i < 4; i++) |
666 |
- for (j = 0; j < s->n; j++) |
|
666 |
+ for (j = 0; j < s->vlc_n; j++) |
|
667 | 667 |
s->stats[i][j] >>= 1; |
668 | 668 |
} |
669 | 669 |
|
... | ... |
@@ -899,7 +940,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, |
899 | 899 |
char *p = avctx->stats_out; |
900 | 900 |
char *end = p + 1024*30; |
901 | 901 |
for (i = 0; i < 4; i++) { |
902 |
- for (j = 0; j < s->n; j++) { |
|
902 |
+ for (j = 0; j < s->vlc_n; j++) { |
|
903 | 903 |
snprintf(p, end-p, "%"PRIu64" ", s->stats[i][j]); |
904 | 904 |
p += strlen(p); |
905 | 905 |
s->stats[i][j]= 0; |
... | ... |
@@ -968,16 +1009,16 @@ AVCodec ff_ffvhuff_encoder = { |
968 | 968 |
AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV411P, |
969 | 969 |
AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV440P, |
970 | 970 |
AV_PIX_FMT_GBRP, |
971 |
- AV_PIX_FMT_GRAY8, |
|
971 |
+ AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY16, |
|
972 | 972 |
AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P, |
973 | 973 |
AV_PIX_FMT_GBRAP, |
974 | 974 |
AV_PIX_FMT_GRAY8A, |
975 |
- AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV420P14, |
|
976 |
- AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV422P14, |
|
977 |
- AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV444P14, |
|
978 |
- AV_PIX_FMT_YUVA420P9, AV_PIX_FMT_YUVA420P10, |
|
979 |
- AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA422P10, |
|
980 |
- AV_PIX_FMT_YUVA444P9, AV_PIX_FMT_YUVA444P10, |
|
975 |
+ AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV420P14, AV_PIX_FMT_YUV420P16, |
|
976 |
+ AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV422P14, AV_PIX_FMT_YUV422P16, |
|
977 |
+ AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV444P14, AV_PIX_FMT_YUV444P16, |
|
978 |
+ AV_PIX_FMT_YUVA420P9, AV_PIX_FMT_YUVA420P10, AV_PIX_FMT_YUVA420P16, |
|
979 |
+ AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA422P10, AV_PIX_FMT_YUVA422P16, |
|
980 |
+ AV_PIX_FMT_YUVA444P9, AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_YUVA444P16, |
|
981 | 981 |
AV_PIX_FMT_RGB24, |
982 | 982 |
AV_PIX_FMT_RGB32, AV_PIX_FMT_NONE |
983 | 983 |
}, |