Mercurial > libavcodec.hg
annotate a64multienc.c @ 12410:7cf900245fce libavcodec
added interlacing option and compression option for colorram (lut)
author | bindhammer |
---|---|
date | Tue, 24 Aug 2010 15:21:27 +0000 |
parents | 91db982aaaad |
children | 04b85031bf00 |
rev | line source |
---|---|
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
1 /* |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
2 * a64 video encoder - multicolor modes |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
3 * Copyright (c) 2009 Tobias Bindhammer |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
4 * |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
5 * This file is part of FFmpeg. |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
6 * |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
7 * FFmpeg is free software; you can redistribute it and/or |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
8 * modify it under the terms of the GNU Lesser General Public |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
9 * License as published by the Free Software Foundation; either |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
10 * version 2.1 of the License, or (at your option) any later version. |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
11 * |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
12 * FFmpeg is distributed in the hope that it will be useful, |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
15 * Lesser General Public License for more details. |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
16 * |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
17 * You should have received a copy of the GNU Lesser General Public |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
18 * License along with FFmpeg; if not, write to the Free Software |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
20 */ |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
21 |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
22 /** |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
23 * @file |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
24 * a64 video encoder - multicolor modes |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
25 */ |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
26 |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
27 #include "a64enc.h" |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
28 #include "a64colors.h" |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
29 #include "a64tables.h" |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
30 #include "elbg.h" |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
31 #include "libavutil/intreadwrite.h" |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
32 |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
33 #define DITHERSTEPS 8 |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
34 #define CHARSET_CHARS 256 |
12410
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
35 #define INTERLACED 1 |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
36 #define LIFETIME 4 |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
37 |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
38 /* gray gradient */ |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
39 static const int mc_colors[5]={0x0,0xb,0xc,0xf,0x1}; |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
40 |
12410
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
41 /* other possible gradients - to be tested */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
42 //static const int mc_colors[5]={0x0,0x8,0xa,0xf,0x7}; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
43 //static const int mc_colors[5]={0x0,0x9,0x8,0xa,0x3}; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
44 |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
45 static void to_meta_with_crop(AVCodecContext *avctx, AVFrame *p, int *dest) |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
46 { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
47 int blockx, blocky, x, y; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
48 int luma = 0; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
49 int height = FFMIN(avctx->height,C64YRES); |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
50 int width = FFMIN(avctx->width ,C64XRES); |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
51 uint8_t *src = p->data[0]; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
52 |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
53 for (blocky = 0; blocky < height; blocky += 8) { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
54 for (blockx = 0; blockx < C64XRES; blockx += 8) { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
55 for (y = blocky; y < blocky+8 && y < height; y++) { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
56 for (x = blockx; x < blockx+8 && x < C64XRES; x += 2) { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
57 if(x < width) { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
58 /* build average over 2 pixels */ |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
59 luma = (src[(x + 0 + y * p->linesize[0])] + |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
60 src[(x + 1 + y * p->linesize[0])]) / 2; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
61 /* write blocks as linear data now so they are suitable for elbg */ |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
62 dest[0] = luma; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
63 } |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
64 dest++; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
65 } |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
66 } |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
67 } |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
68 } |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
69 } |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
70 |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
71 static void render_charset(AVCodecContext *avctx, uint8_t *charset, |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
72 uint8_t *colrammap) |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
73 { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
74 A64Context *c = avctx->priv_data; |
12410
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
75 uint8_t row1, row2; |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
76 int charpos, x, y; |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
77 int a, b; |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
78 uint8_t pix; |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
79 int lowdiff, highdiff; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
80 int *best_cb = c->mc_best_cb; |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
81 static uint8_t index1[256]; |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
82 static uint8_t index2[256]; |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
83 static uint8_t dither[256]; |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
84 int i; |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
85 int distance; |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
86 |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
87 /* generate lookup-tables for dither and index before looping */ |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
88 i = 0; |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
89 for (a=0; a < 256; a++) { |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
90 if(i < 4 && a == c->mc_luma_vals[i+1]) { |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
91 distance = c->mc_luma_vals[i+1] - c->mc_luma_vals[i]; |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
92 for(b = 0; b <= distance; b++) { |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
93 dither[c->mc_luma_vals[i]+b] = b * (DITHERSTEPS - 1) / distance; |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
94 } |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
95 i++; |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
96 } |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
97 if(i >=4 ) dither[a] = 0; |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
98 index1[a] = i; |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
99 index2[a] = FFMIN(i+1, 4); |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
100 } |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
101 /* and render charset */ |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
102 for (charpos = 0; charpos < CHARSET_CHARS; charpos++) { |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
103 lowdiff = 0; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
104 highdiff = 0; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
105 for (y = 0; y < 8; y++) { |
12410
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
106 row1 = 0; row2 = 0; |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
107 for (x = 0; x < 4; x++) { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
108 pix = best_cb[y * 4 + x]; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
109 |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
110 /* accumulate error for brightest/darkest color */ |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
111 if (index1[pix] >= 3) |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
112 highdiff += pix - c->mc_luma_vals[3]; |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
113 if (index1[pix] < 1) |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
114 lowdiff += c->mc_luma_vals[1] - pix; |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
115 |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
116 row1 <<= 2; |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
117 |
12410
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
118 if(INTERLACED) { |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
119 row2 <<= 2; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
120 if (interlaced_dither_patterns[dither[pix]][(y & 3) * 2 + 0][x & 3]) |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
121 row1 |= 3-(index2[pix] & 3); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
122 else |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
123 row1 |= 3-(index1[pix] & 3); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
124 |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
125 if (interlaced_dither_patterns[dither[pix]][(y & 3) * 2 + 1][x & 3]) |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
126 row2 |= 3-(index2[pix] & 3); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
127 else |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
128 row2 |= 3-(index1[pix] & 3); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
129 } |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
130 else { |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
131 if (multi_dither_patterns[dither[pix]][(y & 3)][x & 3]) |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
132 row1 |= 3-(index2[pix] & 3); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
133 else |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
134 row1 |= 3-(index1[pix] & 3); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
135 } |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
136 } |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
137 charset[y+0x000] = row1; |
12410
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
138 if(INTERLACED) charset[y+0x800] = row2; |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
139 } |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
140 /* do we need to adjust pixels? */ |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
141 if (highdiff > 0 && lowdiff > 0) { |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
142 if (lowdiff > highdiff) { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
143 for (x = 0; x < 32; x++) |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
144 best_cb[x] = FFMIN(c->mc_luma_vals[3], best_cb[x]); |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
145 } else { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
146 for (x = 0; x < 32; x++) |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
147 best_cb[x] = FFMAX(c->mc_luma_vals[1], best_cb[x]); |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
148 } |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
149 charpos--; /* redo now adjusted char */ |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
150 /* no adjustment needed, all fine */ |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
151 } else { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
152 /* advance pointers */ |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
153 best_cb += 32; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
154 charset += 8; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
155 |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
156 /* remember colorram value */ |
12410
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
157 colrammap[charpos] = (highdiff > 0); |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
158 } |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
159 } |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
160 } |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
161 |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
162 static av_cold int a64multi_close_encoder(AVCodecContext *avctx) |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
163 { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
164 A64Context *c = avctx->priv_data; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
165 av_free(c->mc_meta_charset); |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
166 av_free(c->mc_best_cb); |
12410
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
167 av_free(c->mc_charset); |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
168 av_free(c->mc_charmap); |
12410
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
169 av_free(c->mc_colram); |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
170 return 0; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
171 } |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
172 |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
173 static av_cold int a64multi_init_encoder(AVCodecContext *avctx) |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
174 { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
175 A64Context *c = avctx->priv_data; |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
176 int a; |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
177 av_lfg_init(&c->randctx, 1); |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
178 |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
179 if (avctx->global_quality < 1) { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
180 c->mc_lifetime = 4; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
181 } else { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
182 c->mc_lifetime = avctx->global_quality /= FF_QP2LAMBDA; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
183 } |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
184 |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
185 av_log(avctx, AV_LOG_INFO, "charset lifetime set to %d frame(s)\n", c->mc_lifetime); |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
186 |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
187 /* precalc luma values for later use */ |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
188 for (a = 0; a < 5; a++) { |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
189 c->mc_luma_vals[a]=a64_palette[mc_colors[a]][0] * 0.30 + |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
190 a64_palette[mc_colors[a]][1] * 0.59 + |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
191 a64_palette[mc_colors[a]][2] * 0.11; |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
192 } |
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
193 |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
194 c->mc_frame_counter = 0; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
195 c->mc_use_5col = avctx->codec->id == CODEC_ID_A64_MULTI5; |
12410
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
196 c->mc_meta_charset = av_malloc (32000 * c->mc_lifetime * sizeof(int)); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
197 c->mc_best_cb = av_malloc (CHARSET_CHARS * 32 * sizeof(int)); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
198 c->mc_charmap = av_mallocz(1000 * c->mc_lifetime * sizeof(int)); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
199 c->mc_colram = av_mallocz(CHARSET_CHARS * sizeof(uint8_t)); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
200 c->mc_charset = av_malloc (0x800 * (INTERLACED+1) * sizeof(uint8_t)); |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
201 |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
202 avcodec_get_frame_defaults(&c->picture); |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
203 avctx->coded_frame = &c->picture; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
204 avctx->coded_frame->pict_type = FF_I_TYPE; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
205 avctx->coded_frame->key_frame = 1; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
206 if (!avctx->codec_tag) |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
207 avctx->codec_tag = AV_RL32("a64m"); |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
208 |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
209 return 0; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
210 } |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
211 |
12410
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
212 static void a64_compress_colram(unsigned char *buf, int *charmap, uint8_t *colram) |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
213 { |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
214 int a; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
215 uint8_t temp; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
216 /* only needs to be done in 5col mode */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
217 /* XXX could be squeezed to 0x80 bytes */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
218 for (a = 0; a < 256; a++) { |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
219 temp = colram[charmap[a + 0x000]] << 0; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
220 temp |= colram[charmap[a + 0x100]] << 1; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
221 temp |= colram[charmap[a + 0x200]] << 2; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
222 if(a < 0xe8) temp |= colram[charmap[a + 0x300]] << 3; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
223 buf[a] = temp << 2; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
224 } |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
225 } |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
226 |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
227 static int a64multi_encode_frame(AVCodecContext *avctx, unsigned char *buf, |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
228 int buf_size, void *data) |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
229 { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
230 A64Context *c = avctx->priv_data; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
231 AVFrame *pict = data; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
232 AVFrame *const p = (AVFrame *) & c->picture; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
233 |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
234 int frame; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
235 int a; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
236 |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
237 int req_size; |
12410
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
238 int num_frames = LIFETIME; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
239 |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
240 int *charmap = c->mc_charmap; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
241 uint8_t *colram = c->mc_colram; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
242 uint8_t *charset = c->mc_charset; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
243 int *meta = c->mc_meta_charset; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
244 int *best_cb = c->mc_best_cb; |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
245 |
12410
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
246 /* no data, means end encoding asap */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
247 if (!data) { |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
248 /* all done, end encoding */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
249 if(!c->mc_lifetime) return 0; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
250 /* no more frames in queue, prepare to flush remaining frames */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
251 if(!c->mc_frame_counter) { |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
252 num_frames=c->mc_lifetime; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
253 c->mc_lifetime=0; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
254 } |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
255 /* still frames in queue so limit lifetime to remaining frames */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
256 else c->mc_lifetime=c->mc_frame_counter; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
257 } |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
258 /* still new data available */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
259 else { |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
260 /* fill up mc_meta_charset with data until lifetime exceeds */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
261 if (c->mc_frame_counter < c->mc_lifetime) { |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
262 *p = *pict; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
263 p->pict_type = FF_I_TYPE; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
264 p->key_frame = 1; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
265 to_meta_with_crop(avctx, p, meta + 32000 * c->mc_frame_counter); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
266 c->mc_frame_counter++; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
267 /* lifetime is not reached so wait for next frame first */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
268 return 0; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
269 } |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
270 } |
12410
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
271 |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
272 /* lifetime reached so now convert X frames at once */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
273 if (c->mc_frame_counter == c->mc_lifetime) { |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
274 /* any frames to encode? */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
275 if(c->mc_lifetime) { |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
276 /* calc optimal new charset + charmaps */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
277 ff_init_elbg(meta, 32, 1000 * c->mc_lifetime, best_cb, CHARSET_CHARS, 50, charmap, &c->randctx); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
278 ff_do_elbg (meta, 32, 1000 * c->mc_lifetime, best_cb, CHARSET_CHARS, 50, charmap, &c->randctx); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
279 |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
280 /* create colorram map and a c64 readable charset */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
281 render_charset(avctx, charset, colram); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
282 } |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
283 |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
284 req_size = 0; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
285 |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
286 //XXX this all should maybe move to the muxer? as well as teh chunked/not chunked thing? |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
287 /* either write charset as a whole (more comfy when playing from mem) */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
288 /* copy charset chunk if exists */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
289 if(c->mc_lifetime) { |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
290 memcpy(buf,charset,0x800*(INTERLACED+1)); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
291 buf += 0x800*(INTERLACED+1); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
292 charset += 0x800*(INTERLACED+1); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
293 req_size += 0x800*(INTERLACED+1); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
294 } |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
295 else memset(buf,0,0x800*(INTERLACED+1)); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
296 |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
297 /* write x frames to buf */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
298 for (frame = 0; frame < c->mc_lifetime; frame++) { |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
299 /* buf is uchar*, charmap is int*, so no memcpy here, sorry */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
300 for (a = 0; a < 1000; a++) { |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
301 buf[a] = charmap[a]; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
302 } |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
303 buf += 0x400; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
304 req_size += 0x400; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
305 |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
306 if(c->mc_use_5col) { |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
307 a64_compress_colram(buf,charmap,colram); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
308 buf += 0x100; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
309 req_size += 0x100; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
310 } |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
311 |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
312 /* advance to next charmap */ |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
313 charmap += 1000; |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
314 } |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
315 |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
316 /* reset counter */ |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
317 c->mc_frame_counter = 0; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
318 |
12410
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
319 if (req_size > buf_size) { |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
320 av_log(avctx, AV_LOG_ERROR, "buf size too small (need %d, got %d)\n", req_size, buf_size); |
7cf900245fce
added interlacing option and compression option for colorram (lut)
bindhammer
parents:
12409
diff
changeset
|
321 return -1; |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
322 } |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
323 return req_size; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
324 } |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
325 return 0; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
326 } |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
327 |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
328 AVCodec a64multi_encoder = { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
329 .name = "a64multi", |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
330 .type = AVMEDIA_TYPE_VIDEO, |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
331 .id = CODEC_ID_A64_MULTI, |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
332 .priv_data_size = sizeof(A64Context), |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
333 .init = a64multi_init_encoder, |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
334 .encode = a64multi_encode_frame, |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
335 .close = a64multi_close_encoder, |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
336 .pix_fmts = (enum PixelFormat[]) {PIX_FMT_GRAY8, PIX_FMT_NONE}, |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
337 .long_name = NULL_IF_CONFIG_SMALL("Multicolor charset for Commodore 64"), |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
338 .capabilities = CODEC_CAP_DELAY, |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
339 }; |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
340 |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
341 AVCodec a64multi5_encoder = { |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
342 .name = "a64multi5", |
12409
91db982aaaad
fixed some return values and deprecated CODEC_TYPE_VIDEO.
bindhammer
parents:
12401
diff
changeset
|
343 .type = AVMEDIA_TYPE_VIDEO, |
12401
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
344 .id = CODEC_ID_A64_MULTI5, |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
345 .priv_data_size = sizeof(A64Context), |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
346 .init = a64multi_init_encoder, |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
347 .encode = a64multi_encode_frame, |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
348 .close = a64multi_close_encoder, |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
349 .pix_fmts = (enum PixelFormat[]) {PIX_FMT_GRAY8, PIX_FMT_NONE}, |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
350 .long_name = NULL_IF_CONFIG_SMALL("Multicolor charset for Commodore 64, extended with 5th color (colram)"), |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
351 .capabilities = CODEC_CAP_DELAY, |
f25a00f68cfa
Initial version of the a64 (multicolor charset) codec
bindhammer
parents:
diff
changeset
|
352 }; |