34 #define MIMIC_HEADER_SIZE 20
65 0x0000000a, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
66 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
67 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000000b,
68 0x0000001b, 0x00000038, 0x00000078, 0x00000079, 0x0000007a, 0x000000f9,
69 0x000000fa, 0x000003fb, 0x000007f8, 0x000007f9, 0x000007fa, 0x000007fb,
70 0x00000ff8, 0x00000ff9, 0x00000001, 0x00000039, 0x0000007b, 0x000000fb,
71 0x000001f8, 0x000001f9, 0x00000ffa, 0x00000ffb, 0x00001ff8, 0x00001ff9,
72 0x00001ffa, 0x00001ffb, 0x00003ff8, 0x00003ff9, 0x00003ffa, 0x00000000,
73 0x00000004, 0x0000003a, 0x000001fa, 0x00003ffb, 0x00007ff8, 0x00007ff9,
74 0x00007ffa, 0x00007ffb, 0x0000fff8, 0x0000fff9, 0x0000fffa, 0x0000fffb,
75 0x0001fff8, 0x0001fff9, 0x0001fffa, 0x00000000, 0x0000000c, 0x000000f8,
76 0x000001fb, 0x0001fffb, 0x0003fff8, 0x0003fff9, 0x0003fffa, 0x0003fffb,
77 0x0007fff8, 0x0007fff9, 0x0007fffa, 0x0007fffb, 0x000ffff8, 0x000ffff9,
78 0x000ffffa, 0x00000000, 0x0000001a, 0x000003f8, 0x000ffffb, 0x001ffff8,
79 0x001ffff9, 0x001ffffa, 0x001ffffb, 0x003ffff8, 0x003ffff9, 0x003ffffa,
80 0x003ffffb, 0x007ffff8, 0x007ffff9, 0x007ffffa, 0x007ffffb, 0x00000000,
81 0x0000003b, 0x000003f9, 0x00fffff8, 0x00fffff9, 0x00fffffa, 0x00fffffb,
82 0x01fffff8, 0x01fffff9, 0x01fffffa, 0x01fffffb, 0x03fffff8, 0x03fffff9,
83 0x03fffffa, 0x03fffffb, 0x07fffff8, 0x00000000, 0x000003fa, 0x07fffff9,
84 0x07fffffa, 0x07fffffb, 0x0ffffff8, 0x0ffffff9, 0x0ffffffa, 0x0ffffffb,
85 0x1ffffff8, 0x1ffffff9, 0x1ffffffa, 0x1ffffffb, 0x3ffffff8, 0x3ffffff9,
90 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
91 0, 0, 0, 0, 2, 4, 5, 6, 7, 7, 7, 8,
92 8, 10, 11, 11, 11, 11, 12, 12, 2, 6, 7, 8,
93 9, 9, 12, 12, 13, 13, 13, 13, 14, 14, 14, 0,
94 3, 6, 9, 14, 15, 15, 15, 15, 16, 16, 16, 16,
95 17, 17, 17, 0, 4, 8, 9, 17, 18, 18, 18, 18,
96 19, 19, 19, 19, 20, 20, 20, 0, 5, 10, 20, 21,
97 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 0,
98 6, 10, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26,
99 26, 26, 27, 0, 10, 27, 27, 27, 28, 28, 28, 28,
100 29, 29, 29, 29, 30, 30, 30,
104 0, 8, 1, 2, 9, 16, 24, 17,
105 10, 3, 4, 11, 18, 25, 32, 40,
106 33, 26, 19, 12, 5, 6, 13, 20,
107 27, 34, 41, 48, 56, 49, 42, 35,
108 28, 21, 14, 7, 15, 22, 29, 36,
109 43, 50, 57, 58, 51, 44, 37, 30,
110 23, 31, 38, 45, 52, 59, 39, 46,
111 53, 60, 61, 54, 47, 55, 62, 63,
168 if (avctx == avctx_from)
178 if (i !=
src->next_cur_index &&
src->frames[i].f->data[0]) {
192 { -7, 7, -6, 6, -5, 5, -4, 4, },
193 { -15, 15, -14, 14, -13, 13, -12, 12,
194 -11, 11, -10, 10, -9, 9, -8, 8, },
195 { -31, 31, -30, 30, -29, 29, -28, 28,
196 -27, 27, -26, 26, -25, 25, -24, 24,
197 -23, 23, -22, 22, -21, 21, -20, 20,
198 -19, 19, -18, 18, -17, 17, -16, 16, },
199 { -63, 63, -62, 62, -61, 61, -60, 60,
200 -59, 59, -58, 58, -57, 57, -56, 56,
201 -55, 55, -54, 54, -53, 53, -52, 52,
202 -51, 51, -50, 50, -49, 49, -48, 48,
203 -47, 47, -46, 46, -45, 45, -44, 44,
204 -43, 43, -42, 42, -41, 41, -40, 40,
205 -39, 39, -38, 38, -37, 37, -36, 36,
206 -35, 35, -34, 34, -33, 33, -32, 32, },
207 { -127, 127, -126, 126, -125, 125, -124, 124,
208 -123, 123, -122, 122, -121, 121, -120, 120,
209 -119, 119, -118, 118, -117, 117, -116, 116,
210 -115, 115, -114, 114, -113, 113, -112, 112,
211 -111, 111, -110, 110, -109, 109, -108, 108,
212 -107, 107, -106, 106, -105, 105, -104, 104,
213 -103, 103, -102, 102, -101, 101, -100, 100,
214 -99, 99, -98, 98, -97, 97, -96, 96, },
215 { -95, 95, -94, 94, -93, 93, -92, 92,
216 -91, 91, -90, 90, -89, 89, -88, 88,
217 -87, 87, -86, 86, -85, 85, -84, 84,
218 -83, 83, -82, 82, -81, 81, -80, 80,
219 -79, 79, -78, 78, -77, 77, -76, 76,
220 -75, 75, -74, 74, -73, 73, -72, 72,
221 -71, 71, -70, 70, -69, 69, -68, 68,
222 -67, 67, -66, 66, -65, 65, -64, 64, },
234 for (pos = 1; pos < num_coeffs; pos++) {
235 uint32_t vlc, num_bits;
261 coeff = (coeff * qscale) / 1001;
272 int ret,
y, x, plane, cur_row = 0;
274 for (plane = 0; plane < 3; plane++) {
275 const int is_chroma = !!plane;
276 const int qscale = av_clip(10000 - quality, is_chroma ? 1000 : 2000,
288 if (is_iframe ||
get_bits1(&ctx->
gb) == is_chroma) {
292 if (is_chroma || is_iframe || !
get_bits1(&ctx->
gb)) {
313 "No such backreference! Buggy sample.\n");
345 for (i = 0; i < 3; i++)
353 int buf_size = avpkt->
size;
359 int quality, num_coeffs;
362 if (buf_size <= MIMIC_HEADER_SIZE) {
369 quality = bytestream2_get_le16u(&gb);
370 width = bytestream2_get_le16u(&gb);
371 height = bytestream2_get_le16u(&gb);
373 is_pframe = bytestream2_get_le32u(&gb);
374 num_coeffs = bytestream2_get_byteu(&gb);
380 if (!(width == 160 && height == 120) &&
381 !(width == 320 && height == 240)) {
390 for (i = 0; i < 3; i++) {
424 (
const uint32_t*) (buf + MIMIC_HEADER_SIZE),
428 res =
decode(ctx, quality, num_coeffs, !is_pframe);
av_cold void ff_dsputil_init(DSPContext *c, AVCodecContext *avctx)
static const uint8_t col_zag[64]
#define AVERROR_PATCHWELCOME
This structure describes decoded (raw) audio or video data.
int linesize[AV_NUM_DATA_POINTERS]
number of bytes per line
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static av_cold int init(AVCodecContext *avctx)
#define DECLARE_ALIGNED(n, t, v)
void av_log(void *avcl, int level, const char *fmt,...) av_printf_format(3
Send the specified message to the log if the level is less than or equal to the current av_log_level...
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)
Same behaviour av_fast_malloc but the buffer has additional FF_INPUT_BUFFER_PADDING_SIZE at the end w...
AVPicture flipped_ptrs[16]
static int decode(MimicContext *ctx, int quality, int num_coeffs, int is_iframe)
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
void(* idct_put)(uint8_t *dest, int line_size, int16_t *block)
block -> idct -> clip to unsigned 8 bit -> dest.
Multithreading support functions.
const char * name
Name of the codec implementation.
int av_frame_ref(AVFrame *dst, AVFrame *src)
Setup a new reference to the data described by a given frame.
#define FF_CEIL_RSHIFT(a, b)
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
struct AVCodecInternal * internal
Private context used for internal data.
int ff_thread_ref_frame(ThreadFrame *dst, ThreadFrame *src)
bitstream reader API header.
uint8_t idct_permutation[64]
idct input permutation.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointers to the image data planes
void ff_thread_await_progress(ThreadFrame *f, int n, int field)
Wait for earlier decoding threads to finish reference pictures.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
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)
#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.
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
static av_cold int mimic_init_thread_copy(AVCodecContext *avctx)
void ff_thread_release_buffer(AVCodecContext *avctx, ThreadFrame *f)
Wrapper around release_buffer() frame-for multithreaded codecs.
Libavcodec external API header.
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.
av_cold void ff_hpeldsp_init(HpelDSPContext *c, int flags)
static int update_thread_context(AVCodecContext *dst, const AVCodecContext *src)
#define FF_ARRAY_ELEMS(a)
enum AVPictureType pict_type
Picture type of the frame.
int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags)
Wrapper around get_buffer() for frame-multithreaded codecs.
static av_cold int mimic_decode_end(AVCodecContext *avctx)
int width
picture width / height.
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)
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
main external API structure.
static void close(AVCodecParserContext *s)
#define FF_THREAD_FRAME
Decode more than one frame at once.
av_cold void ff_init_scantable(uint8_t *permutation, ScanTable *st, const uint8_t *src_scantable)
#define init_vlc(vlc, nb_bits, nb_codes,bits, bits_wrap, bits_size,codes, codes_wrap, codes_size,flags)
op_pixels_func put_pixels_tab[4][4]
Halfpel motion compensation with rounding (a+b+1)>>1.
static unsigned int get_bits1(GetBitContext *s)
BYTE int const BYTE int int int height
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
static float * dct_block(DCTdnoizContext *ctx, const float *src, int src_linesize)
static const uint32_t huffcodes[]
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
int allocate_progress
Whether to allocate progress for frame threading.
void ff_thread_report_progress(ThreadFrame *f, int n, int field)
Notify later decoding threads when part of their reference picture is ready.
static void prepare_avpic(MimicContext *ctx, AVPicture *dst, AVFrame *src)
Flip the buffer upside-down and put it in the YVU order to match the way Mimic encodes frames...
common internal api header.
#define CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
void(* clear_block)(int16_t *block)
static int mimic_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
#define MIMIC_HEADER_SIZE
#define AVERROR_INVALIDDATA
VLC_TYPE(* table)[2]
code, bits
static const double coeff[2][5]
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...
This structure stores compressed data.
void ff_free_vlc(VLC *vlc)
#define AV_GET_BUFFER_FLAG_REF
The decoder will keep a reference to the frame and may reuse it later.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.