72 { 0, 0, 0, 4, 4, 4, 4, 0};
78 { 0x10, 0x13, 0x17, 0x1A, 0x1E, 0x21, 0x25, 0x28,
79 0x2C, 0x2F, 0x33, 0x36, 0x3A, 0x3D, 0x41, 0x44,
80 0x48, 0x4B, 0x4F, 0x52, 0x56, 0x59, 0x5C, 0x60,
81 0x63, 0x67, 0x6A, 0x6E, 0x71, 0x75, 0x78, 0x7C,
82 0x7F, 0x83, 0x86, 0x8A, 0x8D, 0x91, 0x94, 0x98,
83 0x9B, 0x9F, 0xA2, 0xA5, 0xA9, 0xAC, 0xB0, 0xB3,
84 0xB7, 0xBA, 0xBE, 0xC1, 0xC5, 0xC8, 0xCC, 0xCF,
85 0xD3, 0xD6, 0xDA, 0xDD, 0xE1, 0xE4, 0xE8, 0xEB};
88 { 0x60, 0x67, 0x6D, 0x73, 0x7A, 0x80, 0x86, 0x8D,
89 0x93, 0x99, 0xA0, 0xA6, 0xAC, 0xB3, 0xB9, 0xC0};
96 uint8_t *y_plane, *cr_plane, *cb_plane;
100 cr_plane = frame->
data[1] + (x / 4) + (y / 4) * frame->
linesize[1];
101 cb_plane = frame->
data[2] + (x / 4) + (y / 4) * frame->
linesize[2];
108 for(i = 0; i < 16; i++){
118 int f0,
int f1,
int Y0,
int Y1,
int chroma)
122 for(mask = 0x80, i = 0;
mask; mask >>= 1, i++) {
129 for(mask = 0x80, i = 8;
mask; mask >>= 1, i++) {
155 Luma[0] = Y[0]; Luma[1] = Y[1]; Luma[2] = Y[2]; Luma[3] = Y[3];
156 Luma[4] = Y[0]; Luma[5] = Y[1]; Luma[6] = Y[2]; Luma[7] = Y[3];
157 Luma[8] = Y[0]; Luma[9] = Y[1]; Luma[10] = Y[2]; Luma[11] = Y[3];
158 Luma[12] = Y[0]; Luma[13] = Y[1]; Luma[14] = Y[2]; Luma[15] = Y[3];
161 Luma[0] = Y[1]; Luma[1] = Y[2]; Luma[2] = Y[3]; Luma[3] = Y[3];
162 Luma[4] = Y[0]; Luma[5] = Y[1]; Luma[6] = Y[2]; Luma[7] = Y[3];
163 Luma[8] = Y[0]; Luma[9] = Y[1]; Luma[10] = Y[2]; Luma[11] = Y[3];
164 Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[1]; Luma[15] = Y[2];
167 Luma[0] = Y[1]; Luma[1] = Y[2]; Luma[2] = Y[3]; Luma[3] = Y[3];
168 Luma[4] = Y[1]; Luma[5] = Y[2]; Luma[6] = Y[2]; Luma[7] = Y[3];
169 Luma[8] = Y[0]; Luma[9] = Y[1]; Luma[10] = Y[1]; Luma[11] = Y[2];
170 Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[1]; Luma[15] = Y[2];
173 Luma[0] = Y[2]; Luma[1] = Y[3]; Luma[2] = Y[3]; Luma[3] = Y[3];
174 Luma[4] = Y[1]; Luma[5] = Y[2]; Luma[6] = Y[2]; Luma[7] = Y[3];
175 Luma[8] = Y[0]; Luma[9] = Y[1]; Luma[10] = Y[1]; Luma[11] = Y[2];
176 Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[0]; Luma[15] = Y[1];
179 Luma[0] = Y[3]; Luma[1] = Y[3]; Luma[2] = Y[3]; Luma[3] = Y[3];
180 Luma[4] = Y[2]; Luma[5] = Y[2]; Luma[6] = Y[2]; Luma[7] = Y[2];
181 Luma[8] = Y[1]; Luma[9] = Y[1]; Luma[10] = Y[1]; Luma[11] = Y[1];
182 Luma[12] = Y[0]; Luma[13] = Y[0]; Luma[14] = Y[0]; Luma[15] = Y[0];
185 Luma[0] = Y[3]; Luma[1] = Y[3]; Luma[2] = Y[3]; Luma[3] = Y[2];
186 Luma[4] = Y[3]; Luma[5] = Y[2]; Luma[6] = Y[2]; Luma[7] = Y[1];
187 Luma[8] = Y[2]; Luma[9] = Y[1]; Luma[10] = Y[1]; Luma[11] = Y[0];
188 Luma[12] = Y[1]; Luma[13] = Y[0]; Luma[14] = Y[0]; Luma[15] = Y[0];
191 Luma[0] = Y[3]; Luma[1] = Y[3]; Luma[2] = Y[2]; Luma[3] = Y[2];
192 Luma[4] = Y[3]; Luma[5] = Y[2]; Luma[6] = Y[1]; Luma[7] = Y[1];
193 Luma[8] = Y[2]; Luma[9] = Y[2]; Luma[10] = Y[1]; Luma[11] = Y[0];
194 Luma[12] = Y[1]; Luma[13] = Y[1]; Luma[14] = Y[0]; Luma[15] = Y[0];
197 Luma[0] = Y[3]; Luma[1] = Y[3]; Luma[2] = Y[2]; Luma[3] = Y[1];
198 Luma[4] = Y[3]; Luma[5] = Y[2]; Luma[6] = Y[1]; Luma[7] = Y[0];
199 Luma[8] = Y[3]; Luma[9] = Y[2]; Luma[10] = Y[1]; Luma[11] = Y[0];
200 Luma[12] = Y[2]; Luma[13] = Y[1]; Luma[14] = Y[0]; Luma[15] = Y[0];
203 Luma[0] = Y[0]; Luma[1] = Y[0]; Luma[2] = Y[1]; Luma[3] = Y[1];
204 Luma[4] = Y[0]; Luma[5] = Y[0]; Luma[6] = Y[1]; Luma[7] = Y[1];
205 Luma[8] = Y[2]; Luma[9] = Y[2]; Luma[10] = Y[3]; Luma[11] = Y[3];
206 Luma[12] = Y[2]; Luma[13] = Y[2]; Luma[14] = Y[3]; Luma[15] = Y[3];
214 void *
data,
int *got_frame,
218 int buf_size = avpkt->
size;
242 idx = bytestream2_get_byteu(&s->
gb);
243 if((idx & 0xF8) == 0x70) {
246 modifier = bytestream2_get_byte(&s->
gb);
248 av_log(avctx,
AV_LOG_INFO,
"warning: modifier must be 0 or 1, got %i\n", modifier);
260 skip = bytestream2_get_byte(&s->
gb);
261 if ((blocks + skip) >= s->
blocks)
265 while(x >= s->
width) {
287 chroma = bytestream2_get_byte(&s->
gb);
290 for (i = 0; i < 4; i++) {
291 code = (idx >> (6 - i*2)) & 3;
295 chroma = bytestream2_get_byte(&s->
gb);
298 ty =
y + block_coords[(i * 2) + 1];
301 tmp = bytestream2_get_byte(&s->
gb);
321 tmp = bytestream2_get_be24(&s->
gb);
323 Y[0] = (tmp >> 18) & 0x3F;
324 Y[1] = (tmp >> 12) & 0x3F;
325 Y[2] = (tmp >> 6) & 0x3F;
329 tmp = bytestream2_get_be16(&s->
gb);
331 angle = (tmp >> 12) & 0xF;
347 tmp = bytestream2_get_be24u(&s->
gb);
348 Luma[0] = (tmp >> 18) & 0x3F;
349 Luma[1] = (tmp >> 12) & 0x3F;
350 Luma[2] = (tmp >> 6) & 0x3F;
351 Luma[3] = tmp & 0x3F;
353 tmp = bytestream2_get_be24u(&s->
gb);
354 Luma[4] = (tmp >> 18) & 0x3F;
355 Luma[5] = (tmp >> 12) & 0x3F;
356 Luma[6] = (tmp >> 6) & 0x3F;
357 Luma[7] = tmp & 0x3F;
359 tmp = bytestream2_get_be24u(&s->
gb);
360 Luma[8] = (tmp >> 18) & 0x3F;
361 Luma[9] = (tmp >> 12) & 0x3F;
362 Luma[10] = (tmp >> 6) & 0x3F;
363 Luma[11] = tmp & 0x3F;
365 tmp = bytestream2_get_be24u(&s->
gb);
366 Luma[12] = (tmp >> 18) & 0x3F;
367 Luma[13] = (tmp >> 12) & 0x3F;
368 Luma[14] = (tmp >> 6) & 0x3F;
369 Luma[15] = tmp & 0x3F;
375 tmp = bytestream2_get_byteu(&s->
gb);
377 angle = (tmp >> 4) & 0x7;
378 tmp = (tmp << 8) + bytestream2_get_byteu(&s->
gb);
379 Y[0] = (tmp >> 6) & 0x3F;
381 Y[2] = bytestream2_get_byteu(&s->
gb) & 0x3F;
382 Y[3] = bytestream2_get_byteu(&s->
gb) & 0x3F;
386 f0 = bytestream2_get_byteu(&s->
gb);
388 Y[0] = bytestream2_get_byteu(&s->
gb) & 0x3F;
389 Y[1] = bytestream2_get_byteu(&s->
gb) & 0x3F;
415 "Insufficient data\n");
420 .
name =
"ultimotion",
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
This structure describes decoded (raw) audio or video data.
static av_cold int ulti_decode_end(AVCodecContext *avctx)
AVFrame * coded_frame
the picture in the bitstream
static av_cold int init(AVCodecContext *avctx)
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
static const uint16_t mask[17]
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static av_always_inline unsigned int bytestream2_get_bytes_left(GetByteContext *g)
void av_log(void *avcl, int level, const char *fmt,...)
const char * name
Name of the codec implementation.
static const int angle_by_index[4]
int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame)
Identical in function to av_frame_make_writable(), except it uses ff_get_buffer() to allocate the buf...
int width
picture width / height.
struct UltimotionDecodeContext UltimotionDecodeContext
or the Software in violation of any applicable export control laws in any jurisdiction Except as provided by mandatorily applicable UPF has no obligation to provide you with source code to the Software In the event Software contains any source code
static int ulti_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
main external API structure.
static void close(AVCodecParserContext *s)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static av_cold int ulti_decode_init(AVCodecContext *avctx)
planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
void avcodec_get_frame_defaults(AVFrame *frame)
Set the fields of the given AVFrame to default values.
const uint8_t * ulti_codebook
synthesis window for stochastic i
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
static void ulti_convert_yuv(AVFrame *frame, int x, int y, uint8_t *luma, int chroma)
int av_frame_ref(AVFrame *dst, AVFrame *src)
Setup a new reference to the data described by an given frame.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
common internal api header.
static void ulti_grad(AVFrame *frame, int x, int y, uint8_t *Y, int chroma, int angle)
static void ulti_pattern(AVFrame *frame, int x, int y, int f0, int f1, int Y0, int Y1, int chroma)
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
static const uint8_t ulti_chromas[16]
static const int block_coords[8]
This structure stores compressed data.
static const uint8_t ulti_lumas[64]