73 int h,
int w,
int stride,
const uint32_t *pal)
78 for (y = dx+h; y > dx; y--) {
80 for (x = 0; x < w; x++) {
83 unsigned c =
AV_RB16(sptr) & ~0x8000;
84 unsigned b = c & 0x1F;
85 unsigned g = (c >> 5) & 0x1F;
88 *dst++ = (b << 3) | (b >> 2);
89 *dst++ = (g << 3) | (g >> 2);
90 *dst++ = (r << 3) | (r >> 2);
94 uint32_t c = pal[*sptr++];
95 bytestream_put_le24(&dst, c);
99 return sptr - orig_src;
111 zret = inflateInit(&s->
zstream);
136 inflate(&s->
zstream, Z_SYNC_FLUSH);
143 deflate(&zs, Z_SYNC_FLUSH);
146 if ((zret = inflateReset(&s->
zstream)) != Z_OK) {
155 inflate(&s->
zstream, Z_SYNC_FLUSH);
168 int ret = inflateReset(&s->
zstream);
184 ret = inflate(&s->
zstream, Z_FINISH);
185 if (ret == Z_DATA_ERROR) {
188 ret = inflate(&s->
zstream, Z_FINISH);
191 if (ret != Z_OK && ret != Z_STREAM_END) {
225 zstream.zalloc = Z_NULL;
226 zstream.zfree = Z_NULL;
227 zstream.opaque = Z_NULL;
228 if (deflateInit(&zstream, 0) != Z_OK)
230 size = deflateBound(&zstream, tmpblock_size);
231 deflateEnd(&zstream);
239 int buf_size = avpkt->
size;
241 int h_blocks, v_blocks, h_part, v_part, i, j;
310 "Frame width or height differs from first frame!\n");
322 (v_blocks + !!v_part) * (h_blocks + !!h_part)
326 av_dlog(avctx,
"image: %dx%d block: %dx%d num: %dx%d part: %dx%d\n",
328 h_blocks, v_blocks, h_part, v_part);
340 for (j = 0; j < v_blocks + (v_part ? 1 : 0); j++) {
343 int cur_blk_height = (j < v_blocks) ? s->
block_height : v_part;
346 for (i = 0; i < h_blocks + (h_part ? 1 : 0); i++) {
348 int cur_blk_width = (i < h_blocks) ? s->
block_width : h_part;
375 "%dx%d invalid color depth %d\n", i, j, s->
color_depth);
382 "inter frame without keyframe\n");
389 "Block parameters invalid: %d + %d > %d\n",
394 "%dx%d diff start %d height %d\n",
422 for (k = 0; k < cur_blk_height; k++)
431 cur_blk_width, cur_blk_height,
433 i + j * (h_blocks + !!h_part)))
435 "error in decompression of block %dx%d\n", i, j);
477 #if CONFIG_FLASHSV_DECODER
492 #if CONFIG_FLASHSV2_DECODER
493 static const uint32_t ff_flashsv2_default_palette[128] = {
494 0x000000, 0x333333, 0x666666, 0x999999, 0xCCCCCC, 0xFFFFFF,
495 0x330000, 0x660000, 0x990000, 0xCC0000, 0xFF0000, 0x003300,
496 0x006600, 0x009900, 0x00CC00, 0x00FF00, 0x000033, 0x000066,
497 0x000099, 0x0000CC, 0x0000FF, 0x333300, 0x666600, 0x999900,
498 0xCCCC00, 0xFFFF00, 0x003333, 0x006666, 0x009999, 0x00CCCC,
499 0x00FFFF, 0x330033, 0x660066, 0x990099, 0xCC00CC, 0xFF00FF,
500 0xFFFF33, 0xFFFF66, 0xFFFF99, 0xFFFFCC, 0xFF33FF, 0xFF66FF,
501 0xFF99FF, 0xFFCCFF, 0x33FFFF, 0x66FFFF, 0x99FFFF, 0xCCFFFF,
502 0xCCCC33, 0xCCCC66, 0xCCCC99, 0xCCCCFF, 0xCC33CC, 0xCC66CC,
503 0xCC99CC, 0xCCFFCC, 0x33CCCC, 0x66CCCC, 0x99CCCC, 0xFFCCCC,
504 0x999933, 0x999966, 0x9999CC, 0x9999FF, 0x993399, 0x996699,
505 0x99CC99, 0x99FF99, 0x339999, 0x669999, 0xCC9999, 0xFF9999,
506 0x666633, 0x666699, 0x6666CC, 0x6666FF, 0x663366, 0x669966,
507 0x66CC66, 0x66FF66, 0x336666, 0x996666, 0xCC6666, 0xFF6666,
508 0x333366, 0x333399, 0x3333CC, 0x3333FF, 0x336633, 0x339933,
509 0x33CC33, 0x33FF33, 0x663333, 0x993333, 0xCC3333, 0xFF3333,
510 0x003366, 0x336600, 0x660033, 0x006633, 0x330066, 0x663300,
511 0x336699, 0x669933, 0x993366, 0x339966, 0x663399, 0x996633,
512 0x6699CC, 0x99CC66, 0xCC6699, 0x66CC99, 0x9966CC, 0xCC9966,
513 0x99CCFF, 0xCCFF99, 0xFF99CC, 0x99FFCC, 0xCC99FF, 0xFFCC99,
514 0x111111, 0x222222, 0x444444, 0x555555, 0xAAAAAA, 0xBBBBBB,
522 s->
pal = ff_flashsv2_default_palette;
541 AVCodec ff_flashsv2_decoder = {
546 .
init = flashsv2_decode_init,
547 .
close = flashsv2_decode_end,
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
This structure describes decoded (raw) audio or video data.
int buffer_hints
codec suggestion on buffer type if != 0
void(* release_buffer)(struct AVCodecContext *c, AVFrame *pic)
Called to release buffers which were allocated with get_buffer.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static void skip_bits_long(GetBitContext *s, int n)
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
av_dlog(ac->avr,"%d samples - audio_convert: %s to %s (%s)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt), use_generic?ac->func_descr_generic:ac->func_descr)
int(* reget_buffer)(struct AVCodecContext *c, AVFrame *pic)
Called at the beginning of a frame to get cr buffer for it.
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
static av_cold int flashsv_decode_end(AVCodecContext *avctx)
static int decode(MimicContext *ctx, int quality, int num_coeffs, int is_iframe)
static int get_bits_count(const GetBitContext *s)
bitstream reader API header.
static int init(AVCodecParserContext *s)
static int decode_hybrid(const uint8_t *sptr, uint8_t *dptr, int dx, int dy, int h, int w, int stride, const uint32_t *pal)
static int get_bits_left(GetBitContext *gb)
static av_cold int flashsv_decode_init(AVCodecContext *avctx)
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
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.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
void av_log(void *avcl, int level, const char *fmt,...)
const char * name
Name of the codec implementation.
int flags
A combination of AV_PKT_FLAG values.
int width
picture width / height.
static int flashsv2_prime(FlashSVContext *s, uint8_t *src, int size)
struct FlashSVContext FlashSVContext
packed RGB 8:8:8, 24bpp, BGRBGR...
static int flashsv_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
int linesize[AV_NUM_DATA_POINTERS]
Size, in bytes, of the data for each picture/channel plane.
main external API structure.
static void close(AVCodecParserContext *s)
static unsigned int get_bits1(GetBitContext *s)
static int calc_deflate_block_size(int tmpblock_size)
static void skip_bits(GetBitContext *s, int n)
void av_log_missing_feature(void *avc, const char *feature, int want_sample)
Log a generic warning message about a missing feature.
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
#define FF_BUFFER_HINTS_REUSABLE
#define FF_BUFFER_HINTS_PRESERVE
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
void * av_realloc(void *ptr, size_t size)
Allocate or reallocate a block of memory.
#define AVERROR_INVALIDDATA
#define AVERROR_PATCHWELCOME
#define FF_BUFFER_HINTS_VALID
static int flashsv_decode_block(AVCodecContext *avctx, AVPacket *avpkt, GetBitContext *gb, int block_size, int width, int height, int x_pos, int y_pos, int blk_idx)
struct BlockInfo BlockInfo
AVPixelFormat
Pixel format.
This structure stores compressed data.
if(!(ptr_align%ac->ptr_align)&&samples_align >=aligned_len)