1 /*
2 * Cirrus Logic AccuPak (CLJR) encoder
3 * Copyright (c) 2003 Alex Beregszaszi
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22 /**
23 * @file
24 * Cirrus Logic AccuPak encoder.
25 */
26
28
33
38
40 const AVFrame *p,
int *got_packet)
41 {
46 static const uint32_t ordered_dither[2][2] =
47 {
48 { 0x10400000, 0x104F0000 },
49 { 0xCB2A0000, 0xCB250000 },
50 };
51
54 "Widths which are not a multiple of 4 might fail with some decoders, "
55 "use vstrict=-1 / -strict -1 to use %d anyway.\n", avctx->
width);
57 }
58
62
64
65 for (y = 0; y < avctx->
height; y++) {
69 uint8_t luma_tmp[4];
70 for (x = 0; x < avctx->
width; x += 4) {
71 switch (
a->dither_type) {
72 case 0:
dither = 0x492A0000;
break;
74 case 2:
dither = ordered_dither[ y&1 ][ (x>>2)&1 ];
break;
75 }
76 if (x+3 >= avctx->
width) {
77 memset(luma_tmp, 0, sizeof(luma_tmp));
78 memcpy(luma_tmp, luma, avctx->
width - x);
79 luma = luma_tmp;
80 }
85 luma += 4;
88 }
89 }
90
92
93 *got_packet = 1;
94 return 0;
95 }
96
97 #define OFFSET(x) offsetof(CLJRContext, x)
98 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
102 };
103
109 };
110
122 };