28 #define SGI_SINGLE_CHAN 2
29 #define SGI_MULTI_CHAN 3
46 const AVFrame *frame,
int *got_packet)
50 uint8_t *offsettab, *lengthtab, *in_buf, *encode_buf, *buf;
51 int x, y, z, length, tablesize, ret;
53 unsigned char *end_buf;
79 tablesize = depth * height * 4;
82 length += depth * height *
width;
84 length += tablesize * 2 + depth * height * (2 * width + 1);
96 bytestream_put_byte(&buf, 1);
97 bytestream_put_be16(&buf, dimension);
98 bytestream_put_be16(&buf, width);
99 bytestream_put_be16(&buf, height);
100 bytestream_put_be16(&buf, depth);
103 bytestream_put_be32(&buf, 0
L);
104 bytestream_put_be32(&buf, 255
L);
105 bytestream_put_be32(&buf, 0
L);
112 bytestream_put_be32(&buf, 0
L);
130 for (z = 0; z < depth; z++) {
131 in_buf = p->
data[0] + p->
linesize[0] * (height - 1) + z;
133 for (y = 0; y <
height; y++) {
134 bytestream_put_be32(&offsettab, buf - pkt->
data);
136 for (x = 0; x <
width; x++)
137 encode_buf[x] = in_buf[depth * x];
139 if ((length =
ff_rle_encode(buf, end_buf - buf - 1, encode_buf, 1, width, 0, 0, 0x80, 0)) < 1) {
145 bytestream_put_byte(&buf, 0);
146 bytestream_put_be32(&lengthtab, length + 1);
153 for (z = 0; z < depth; z++) {
154 in_buf = p->
data[0] + p->
linesize[0] * (height - 1) + z;
156 for (y = 0; y <
height; y++) {
157 for (x = 0; x < width * depth; x += depth)
158 bytestream_put_byte(&buf, in_buf[x]);