33 #define MIMIC_HEADER_SIZE 20
63 0x0000000a, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
64 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
65 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000b,
66 0x0000001b, 0x00000038, 0x00000078, 0x00000079, 0x0000007a, 0x000000f9,
67 0x000000fa, 0x000003fb, 0x000007f8, 0x000007f9, 0x000007fa, 0x000007fb,
68 0x00000ff8, 0x00000ff9, 0x00000001, 0x00000039, 0x0000007b, 0x000000fb,
69 0x000001f8, 0x000001f9, 0x00000ffa, 0x00000ffb, 0x00001ff8, 0x00001ff9,
70 0x00001ffa, 0x00001ffb, 0x00003ff8, 0x00003ff9, 0x00003ffa, 0x00000000,
71 0x00000004, 0x0000003a, 0x000001fa, 0x00003ffb, 0x00007ff8, 0x00007ff9,
72 0x00007ffa, 0x00007ffb, 0x0000fff8, 0x0000fff9, 0x0000fffa, 0x0000fffb,
73 0x0001fff8, 0x0001fff9, 0x0001fffa, 0x00000000, 0x0000000c, 0x000000f8,
74 0x000001fb, 0x0001fffb, 0x0003fff8, 0x0003fff9, 0x0003fffa, 0x0003fffb,
75 0x0007fff8, 0x0007fff9, 0x0007fffa, 0x0007fffb, 0x000ffff8, 0x000ffff9,
76 0x000ffffa, 0x00000000, 0x0000001a, 0x000003f8, 0x000ffffb, 0x001ffff8,
77 0x001ffff9, 0x001ffffa, 0x001ffffb, 0x003ffff8, 0x003ffff9, 0x003ffffa,
78 0x003ffffb, 0x007ffff8, 0x007ffff9, 0x007ffffa, 0x007ffffb, 0x00000000,
79 0x0000003b, 0x000003f9, 0x00fffff8, 0x00fffff9, 0x00fffffa, 0x00fffffb,
80 0x01fffff8, 0x01fffff9, 0x01fffffa, 0x01fffffb, 0x03fffff8, 0x03fffff9,
81 0x03fffffa, 0x03fffffb, 0x07fffff8, 0x00000000, 0x000003fa, 0x07fffff9,
82 0x07fffffa, 0x07fffffb, 0x0ffffff8, 0x0ffffff9, 0x0ffffffa, 0x0ffffffb,
83 0x1ffffff8, 0x1ffffff9, 0x1ffffffa, 0x1ffffffb, 0x3ffffff8, 0x3ffffff9,
88 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
89 0, 0, 0, 0, 2, 4, 5, 6, 7, 7, 7, 8,
90 8, 10, 11, 11, 11, 11, 12, 12, 2, 6, 7, 8,
91 9, 9, 12, 12, 13, 13, 13, 13, 14, 14, 14, 0,
92 3, 6, 9, 14, 15, 15, 15, 15, 16, 16, 16, 16,
93 17, 17, 17, 0, 4, 8, 9, 17, 18, 18, 18, 18,
94 19, 19, 19, 19, 20, 20, 20, 0, 5, 10, 20, 21,
95 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 0,
96 6, 10, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26,
97 26, 26, 27, 0, 10, 27, 27, 27, 28, 28, 28, 28,
98 29, 29, 29, 29, 30, 30, 30,
102 0, 8, 1, 2, 9, 16, 24, 17,
103 10, 3, 4, 11, 18, 25, 32, 40,
104 33, 26, 19, 12, 5, 6, 13, 20,
105 27, 34, 41, 48, 56, 49, 42, 35,
106 28, 21, 14, 7, 15, 22, 29, 36,
107 43, 50, 57, 58, 51, 44, 37, 30,
108 23, 31, 38, 45, 52, 59, 39, 46,
109 53, 60, 61, 54, 47, 55, 62, 63,
134 if (avctx == avctx_from)
return 0;
139 memcpy(dst->
buf_ptrs, src->buf_ptrs,
sizeof(src->buf_ptrs));
140 memcpy(dst->
flipped_ptrs, src->flipped_ptrs,
sizeof(src->flipped_ptrs));
151 { -7, 7, -6, 6, -5, 5, -4, 4, },
152 { -15, 15, -14, 14, -13, 13, -12, 12,
153 -11, 11, -10, 10, -9, 9, -8, 8, },
154 { -31, 31, -30, 30, -29, 29, -28, 28,
155 -27, 27, -26, 26, -25, 25, -24, 24,
156 -23, 23, -22, 22, -21, 21, -20, 20,
157 -19, 19, -18, 18, -17, 17, -16, 16, },
158 { -63, 63, -62, 62, -61, 61, -60, 60,
159 -59, 59, -58, 58, -57, 57, -56, 56,
160 -55, 55, -54, 54, -53, 53, -52, 52,
161 -51, 51, -50, 50, -49, 49, -48, 48,
162 -47, 47, -46, 46, -45, 45, -44, 44,
163 -43, 43, -42, 42, -41, 41, -40, 40,
164 -39, 39, -38, 38, -37, 37, -36, 36,
165 -35, 35, -34, 34, -33, 33, -32, 32, },
166 { -127, 127, -126, 126, -125, 125, -124, 124,
167 -123, 123, -122, 122, -121, 121, -120, 120,
168 -119, 119, -118, 118, -117, 117, -116, 116,
169 -115, 115, -114, 114, -113, 113, -112, 112,
170 -111, 111, -110, 110, -109, 109, -108, 108,
171 -107, 107, -106, 106, -105, 105, -104, 104,
172 -103, 103, -102, 102, -101, 101, -100, 100,
173 -99, 99, -98, 98, -97, 97, -96, 96, },
174 { -95, 95, -94, 94, -93, 93, -92, 92,
175 -91, 91, -90, 90, -89, 89, -88, 88,
176 -87, 87, -86, 86, -85, 85, -84, 84,
177 -83, 83, -82, 82, -81, 81, -80, 80,
178 -79, 79, -78, 78, -77, 77, -76, 76,
179 -75, 75, -74, 74, -73, 73, -72, 72,
180 -71, 71, -70, 70, -69, 69, -68, 68,
181 -67, 67, -66, 66, -65, 65, -64, 64, },
193 for(pos = 1; pos < num_coeffs; pos++) {
194 uint32_t vlc, num_bits;
220 coeff = (coeff * qscale) / 1001;
231 int y, x, plane, cur_row = 0;
233 for(plane = 0; plane < 3; plane++) {
234 const int is_chroma = !!plane;
235 const int qscale = av_clip(10000-quality,is_chroma?1000:2000,10000)<<2;
247 if(is_iframe ||
get_bits1(&ctx->
gb) == is_chroma) {
252 if(is_chroma || is_iframe || !
get_bits1(&ctx->
gb)) {
269 "No such backreference! Buggy sample.\n");
299 for(i = 0; i < 3; i++)
307 int buf_size = avpkt->
size;
312 int quality, num_coeffs;
316 if (buf_size <= MIMIC_HEADER_SIZE) {
323 quality = bytestream2_get_le16u(&gb);
324 width = bytestream2_get_le16u(&gb);
325 height = bytestream2_get_le16u(&gb);
327 is_pframe = bytestream2_get_le32u(&gb);
328 num_coeffs = bytestream2_get_byteu(&gb);
334 if(!(width == 160 && height == 120) &&
335 !(width == 320 && height == 240)) {
344 for(i = 0; i < 3; i++) {
378 (
const uint32_t*) (buf + MIMIC_HEADER_SIZE),
382 res =
decode(ctx, quality, num_coeffs, !is_pframe);
414 for(i = 0; i < 16; i++)
op_pixels_func put_pixels_tab[4][4]
Halfpel motion compensation with rounding (a+b+1)>>1.
av_cold void ff_dsputil_init(DSPContext *c, AVCodecContext *avctx)
static const uint8_t col_zag[64]
int linesize[AV_NUM_DATA_POINTERS]
number of bytes per line
This structure describes decoded (raw) audio or video data.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
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)
void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer with padding, reusing the given one if large enough.
four components are given, that's all.
AVPicture flipped_ptrs[16]
static int decode(MimicContext *ctx, int quality, int num_coeffs, int is_iframe)
uint8_t * data[AV_NUM_DATA_POINTERS]
bitstream reader API header.
uint8_t idct_permutation[64]
idct input permutation.
static int init(AVCodecParserContext *s)
void ff_thread_finish_setup(AVCodecContext *avctx)
If the codec defines update_thread_context(), call this when they are ready for the next thread to st...
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
Multithreading support functions.
int reference
is this picture used as reference The values for this are the same as the MpegEncContext.picture_structure variable, that is 1->top field, 2->bottom field, 3->frame/both fields.
void(* bswap_buf)(uint32_t *dst, const uint32_t *src, int w)
int is_copy
Whether the parent AVCodecContext is a copy of the context which had init() called on it...
static av_always_inline void bytestream2_skip(GetByteContext *g, unsigned int size)
void(* idct_put)(uint8_t *dest, int line_size, DCTELEM *block)
block -> idct -> clip to unsigned 8 bit -> dest.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
int active_thread_type
Which multithreading methods are in use by the codec.
static void prepare_avpic(MimicContext *ctx, AVPicture *dst, AVPicture *src)
Flip the buffer upside-down and put it in the YVU order to match the way Mimic encodes frames...
void av_log(void *avcl, int level, const char *fmt,...)
const char * name
Name of the codec implementation.
void(* clear_block)(DCTELEM *block)
static const int8_t vlcdec_lookup[9][64]
static int vlc_decode_block(MimicContext *ctx, int num_coeffs, int qscale)
#define ONLY_IF_THREADS_ENABLED(x)
Define a function with only the non-default version specified.
enum AVPictureType pict_type
Picture type of the frame, see ?_TYPE below.
static av_cold int mimic_decode_end(AVCodecContext *avctx)
int width
picture width / height.
#define CODEC_CAP_FRAME_THREADS
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
static const uint8_t huffbits[]
static av_cold int mimic_decode_init(AVCodecContext *avctx)
static int mimic_decode_update_thread_context(AVCodecContext *avctx, const AVCodecContext *avctx_from)
void ff_thread_await_progress(AVFrame *f, int n, int field)
Wait for earlier decoding threads to finish reference pictures.
main external API structure.
static void close(AVCodecParserContext *s)
#define init_vlc(vlc, nb_bits, nb_codes,bits, bits_wrap, bits_size,codes, codes_wrap, codes_size,flags)
static unsigned int get_bits1(GetBitContext *s)
#define FF_ARRAY_ELEMS(a)
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
static const uint32_t huffcodes[]
#define DECLARE_ALIGNED(n, t, v)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
common internal api header.
static int mimic_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
#define MIMIC_HEADER_SIZE
void ff_init_scantable(uint8_t *permutation, ScanTable *st, const uint8_t *src_scantable)
struct AVCodecInternal * internal
Private context used for internal data.
VLC_TYPE(* table)[2]
code, bits
void ff_thread_report_progress(AVFrame *f, int n, int field)
Notify later decoding threads when part of their reference picture is ready.
int ff_thread_get_buffer(AVCodecContext *avctx, AVFrame *f)
Wrapper around get_buffer() for frame-multithreaded codecs.
This structure stores compressed data.
void ff_free_vlc(VLC *vlc)
void ff_thread_release_buffer(AVCodecContext *avctx, AVFrame *f)
Wrapper around release_buffer() frame-for multithreaded codecs.