OSDN Git Service

test for replaceBitmapData Lossless with alpha0
[swfed/swfed.git] / src / swf_cxformwithalpha.c
1 #include <stdio.h>
2 #include "bitstream.h"
3 #include "swf_cxformwithalpha.h"
4
5 int
6 swf_cxformwithalpha_parse(bitstream_t *bs, swf_cxformwithalpha_t *cx) {
7     int ret, nbits;
8     bitstream_align(bs);
9     cx->has_add_terms  = bitstream_getbit(bs);
10     cx->has_mult_terms = bitstream_getbit(bs);
11     nbits = bitstream_getbits(bs, 4);
12     cx->nbits = nbits;
13     if (cx->has_mult_terms) {
14         cx->red_mult_term   = bitstream_getbits(bs, nbits);
15         cx->green_mult_term = bitstream_getbits(bs, nbits);
16         cx->blue_mult_term  = bitstream_getbits(bs, nbits);
17         ret                 = bitstream_getbits(bs, nbits);
18         if (ret == -1) {
19             return 1;
20         }
21         cx->alpha_mult_term  = ret;
22     }
23     if (cx->has_add_terms) {
24         cx->red_add_term   = bitstream_getbits(bs, nbits);
25         cx->green_add_term = bitstream_getbits(bs, nbits);
26         cx->blue_add_term  = bitstream_getbits(bs, nbits);
27         ret                = bitstream_getbits(bs, nbits);
28         if (ret == -1) {
29             return 1;
30         }
31         cx->alpha_add_term  = ret;
32     }
33     return 0;
34 }
35
36 int
37 swf_cxformwithalpha_build(bitstream_t *bs, swf_cxformwithalpha_t *cx) {
38     int nbits;
39     bitstream_align(bs);
40     bitstream_putbit(bs, cx->has_add_terms);
41     bitstream_putbit(bs, cx->has_mult_terms);
42     nbits = cx->nbits;
43     bitstream_putbits(bs, nbits, 4);
44     if (cx->has_mult_terms) {
45         bitstream_putbits(bs, cx->red_mult_term,   nbits);
46         bitstream_putbits(bs, cx->green_mult_term, nbits);
47         bitstream_putbits(bs, cx->blue_mult_term,  nbits);
48         bitstream_putbits(bs, cx->alpha_mult_term, nbits);
49     }
50     if (cx->has_add_terms) {
51         bitstream_putbits(bs, cx->red_add_term,   nbits);
52         bitstream_putbits(bs, cx->green_add_term, nbits);
53         bitstream_putbits(bs, cx->blue_add_term,  nbits);
54         bitstream_putbits(bs, cx->alpha_add_term, nbits);
55     }
56     return 0;
57 }
58
59 int
60 swf_cxformwithalpha_print(swf_cxformwithalpha_t *cx, int indent_depth) {
61     print_indent(indent_depth);
62     printf("CXFORMWITHALPHA:");
63     if (cx->has_mult_terms) {
64         printf("  MultTerm:%02x%02x%02x(%02x)",
65                cx->red_mult_term, cx->green_mult_term, cx->blue_mult_term,
66                cx->alpha_mult_term);
67     }
68     if (cx->has_add_terms) {
69         printf("  AddTerm:%02x%02x%02x(%02x)",
70                cx->red_add_term, cx->green_add_term, cx->blue_add_term,
71                cx->alpha_add_term);
72     }
73     if ((cx->has_add_terms == 0) && (cx->has_mult_terms == 0)) {
74         printf("  (no add_terms or mult_terms)");
75     }
76     printf("\n");
77     return 0;
78 }