| OLD | NEW |
| 1 /** | 1 /** |
| 2 * @file libavcodec/vp6.c | 2 * @file libavcodec/vp6.c |
| 3 * VP6 compatible video decoder | 3 * VP6 compatible video decoder |
| 4 * | 4 * |
| 5 * Copyright (C) 2006 Aurelien Jacobs <aurel@gnuage.org> | 5 * Copyright (C) 2006 Aurelien Jacobs <aurel@gnuage.org> |
| 6 * | 6 * |
| 7 * The VP6F decoder accepts an optional 1 byte extradata. It is composed of: | 7 * The VP6F decoder accepts an optional 1 byte extradata. It is composed of: |
| 8 * - upper 4bits: difference between encoded width and visible width | 8 * - upper 4bits: difference between encoded width and visible width |
| 9 * - lower 4bits: difference between encoded height and visible height | 9 * - lower 4bits: difference between encoded height and visible height |
| 10 * | 10 * |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 | 220 |
| 221 /* first compute probabilities from model */ | 221 /* first compute probabilities from model */ |
| 222 tmp[0].count = 256; | 222 tmp[0].count = 256; |
| 223 for (i=0; i<size-1; i++) { | 223 for (i=0; i<size-1; i++) { |
| 224 a = tmp[i].count * coeff_model[i] >> 8; | 224 a = tmp[i].count * coeff_model[i] >> 8; |
| 225 b = tmp[i].count * (255 - coeff_model[i]) >> 8; | 225 b = tmp[i].count * (255 - coeff_model[i]) >> 8; |
| 226 nodes[map[2*i ]].count = a + !a; | 226 nodes[map[2*i ]].count = a + !a; |
| 227 nodes[map[2*i+1]].count = b + !b; | 227 nodes[map[2*i+1]].count = b + !b; |
| 228 } | 228 } |
| 229 | 229 |
| 230 free_vlc(vlc); |
| 230 /* then build the huffman tree accodring to probabilities */ | 231 /* then build the huffman tree accodring to probabilities */ |
| 231 ff_huff_build_tree(s->avctx, vlc, size, nodes, vp6_huff_cmp, | 232 ff_huff_build_tree(s->avctx, vlc, size, nodes, vp6_huff_cmp, |
| 232 FF_HUFFMAN_FLAG_HNODE_FIRST); | 233 FF_HUFFMAN_FLAG_HNODE_FIRST); |
| 233 } | 234 } |
| 234 | 235 |
| 235 static void vp6_parse_coeff_models(VP56Context *s) | 236 static void vp6_parse_coeff_models(VP56Context *s) |
| 236 { | 237 { |
| 237 VP56RangeCoder *c = &s->c; | 238 VP56RangeCoder *c = &s->c; |
| 238 VP56Model *model = s->modelp; | 239 VP56Model *model = s->modelp; |
| 239 int def_prob[11]; | 240 int def_prob[11]; |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 594 s->adjust = vp6_adjust; | 595 s->adjust = vp6_adjust; |
| 595 s->filter = vp6_filter; | 596 s->filter = vp6_filter; |
| 596 s->default_models_init = vp6_default_models_init; | 597 s->default_models_init = vp6_default_models_init; |
| 597 s->parse_vector_models = vp6_parse_vector_models; | 598 s->parse_vector_models = vp6_parse_vector_models; |
| 598 s->parse_coeff_models = vp6_parse_coeff_models; | 599 s->parse_coeff_models = vp6_parse_coeff_models; |
| 599 s->parse_header = vp6_parse_header; | 600 s->parse_header = vp6_parse_header; |
| 600 | 601 |
| 601 return 0; | 602 return 0; |
| 602 } | 603 } |
| 603 | 604 |
| 605 static av_cold int vp6_decode_free(AVCodecContext *avctx) |
| 606 { |
| 607 VP56Context *s = avctx->priv_data; |
| 608 int pt, ct, cg; |
| 609 |
| 610 vp56_free(avctx); |
| 611 |
| 612 for (pt=0; pt<2; pt++) { |
| 613 free_vlc(&s->dccv_vlc[pt]); |
| 614 free_vlc(&s->runv_vlc[pt]); |
| 615 for (ct=0; ct<3; ct++) |
| 616 for (cg=0; cg<6; cg++) |
| 617 free_vlc(&s->ract_vlc[pt][ct][cg]); |
| 618 } |
| 619 return 0; |
| 620 } |
| 621 |
| 604 AVCodec vp6_decoder = { | 622 AVCodec vp6_decoder = { |
| 605 "vp6", | 623 "vp6", |
| 606 CODEC_TYPE_VIDEO, | 624 CODEC_TYPE_VIDEO, |
| 607 CODEC_ID_VP6, | 625 CODEC_ID_VP6, |
| 608 sizeof(VP56Context), | 626 sizeof(VP56Context), |
| 609 vp6_decode_init, | 627 vp6_decode_init, |
| 610 NULL, | 628 NULL, |
| 611 vp56_free, | 629 vp6_decode_free, |
| 612 vp56_decode_frame, | 630 vp56_decode_frame, |
| 613 CODEC_CAP_DR1, | 631 CODEC_CAP_DR1, |
| 614 .long_name = NULL_IF_CONFIG_SMALL("On2 VP6"), | 632 .long_name = NULL_IF_CONFIG_SMALL("On2 VP6"), |
| 615 }; | 633 }; |
| 616 | 634 |
| 617 /* flash version, not flipped upside-down */ | 635 /* flash version, not flipped upside-down */ |
| 618 AVCodec vp6f_decoder = { | 636 AVCodec vp6f_decoder = { |
| 619 "vp6f", | 637 "vp6f", |
| 620 CODEC_TYPE_VIDEO, | 638 CODEC_TYPE_VIDEO, |
| 621 CODEC_ID_VP6F, | 639 CODEC_ID_VP6F, |
| 622 sizeof(VP56Context), | 640 sizeof(VP56Context), |
| 623 vp6_decode_init, | 641 vp6_decode_init, |
| 624 NULL, | 642 NULL, |
| 625 vp56_free, | 643 vp6_decode_free, |
| 626 vp56_decode_frame, | 644 vp56_decode_frame, |
| 627 CODEC_CAP_DR1, | 645 CODEC_CAP_DR1, |
| 628 .long_name = NULL_IF_CONFIG_SMALL("On2 VP6 (Flash version)"), | 646 .long_name = NULL_IF_CONFIG_SMALL("On2 VP6 (Flash version)"), |
| 629 }; | 647 }; |
| 630 | 648 |
| 631 /* flash version, not flipped upside-down, with alpha channel */ | 649 /* flash version, not flipped upside-down, with alpha channel */ |
| 632 AVCodec vp6a_decoder = { | 650 AVCodec vp6a_decoder = { |
| 633 "vp6a", | 651 "vp6a", |
| 634 CODEC_TYPE_VIDEO, | 652 CODEC_TYPE_VIDEO, |
| 635 CODEC_ID_VP6A, | 653 CODEC_ID_VP6A, |
| 636 sizeof(VP56Context), | 654 sizeof(VP56Context), |
| 637 vp6_decode_init, | 655 vp6_decode_init, |
| 638 NULL, | 656 NULL, |
| 639 vp56_free, | 657 vp6_decode_free, |
| 640 vp56_decode_frame, | 658 vp56_decode_frame, |
| 641 CODEC_CAP_DR1, | 659 CODEC_CAP_DR1, |
| 642 .long_name = NULL_IF_CONFIG_SMALL("On2 VP6 (Flash version, with alpha channe
l)"), | 660 .long_name = NULL_IF_CONFIG_SMALL("On2 VP6 (Flash version, with alpha channe
l)"), |
| 643 }; | 661 }; |
| OLD | NEW |