40 #include "libavutil/intreadwrite.h"
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;
124 zret = inflateInit(&s->
zstream);
153 inflate(&s->
zstream, Z_SYNC_FLUSH);
160 deflate(&zs, Z_SYNC_FLUSH);
163 if ((zret = inflateReset(&s->
zstream)) != Z_OK) {
172 inflate(&s->
zstream, Z_SYNC_FLUSH);
185 int ret = inflateReset(&s->
zstream);
201 ret = inflate(&s->
zstream, Z_FINISH);
202 if (ret == Z_DATA_ERROR) {
205 ret = inflate(&s->
zstream, Z_FINISH);
208 if (ret != Z_OK && ret != Z_STREAM_END) {
245 zstream.zalloc = Z_NULL;
246 zstream.zfree = Z_NULL;
247 zstream.opaque = Z_NULL;
248 if (deflateInit(&zstream, 0) != Z_OK)
250 size = deflateBound(&zstream, tmpblock_size);
251 deflateEnd(&zstream);
259 int buf_size = avpkt->
size;
261 int h_blocks, v_blocks, h_part, v_part, i, j, ret;
304 "Cannot allocate decompression buffer.\n");
311 "Cannot determine deflate buffer size.\n");
332 "Frame width or height differs from first frame!\n");
346 (h_blocks + !!h_part) *
sizeof(s->
blocks[0]))) < 0)
350 av_dlog(avctx,
"image: %dx%d block: %dx%d num: %dx%d part: %dx%d\n",
352 h_blocks, v_blocks, h_part, v_part);
360 for (j = 0; j < v_blocks + (v_part ? 1 : 0); j++) {
363 int cur_blk_height = (j < v_blocks) ? s->
block_height : v_part;
366 for (i = 0; i < h_blocks + (h_part ? 1 : 0); i++) {
368 int cur_blk_width = (i < h_blocks) ? s->
block_width : h_part;
394 "%dx%d invalid color depth %d\n",
402 "Inter frame without keyframe\n");
409 "Block parameters invalid: %d + %d > %d\n",
414 "%dx%d diff start %d height %d\n",
433 "no data available for zlib priming\n");
443 for (k = 0; k < cur_blk_height; k++) {
453 cur_blk_width, cur_blk_height,
455 i + j * (h_blocks + !!h_part)))
457 "error in decompression of block %dx%d\n", i, j);
486 #if CONFIG_FLASHSV_DECODER
501 #if CONFIG_FLASHSV2_DECODER
502 static const uint32_t ff_flashsv2_default_palette[128] = {
503 0x000000, 0x333333, 0x666666, 0x999999, 0xCCCCCC, 0xFFFFFF,
504 0x330000, 0x660000, 0x990000, 0xCC0000, 0xFF0000, 0x003300,
505 0x006600, 0x009900, 0x00CC00, 0x00FF00, 0x000033, 0x000066,
506 0x000099, 0x0000CC, 0x0000FF, 0x333300, 0x666600, 0x999900,
507 0xCCCC00, 0xFFFF00, 0x003333, 0x006666, 0x009999, 0x00CCCC,
508 0x00FFFF, 0x330033, 0x660066, 0x990099, 0xCC00CC, 0xFF00FF,
509 0xFFFF33, 0xFFFF66, 0xFFFF99, 0xFFFFCC, 0xFF33FF, 0xFF66FF,
510 0xFF99FF, 0xFFCCFF, 0x33FFFF, 0x66FFFF, 0x99FFFF, 0xCCFFFF,
511 0xCCCC33, 0xCCCC66, 0xCCCC99, 0xCCCCFF, 0xCC33CC, 0xCC66CC,
512 0xCC99CC, 0xCCFFCC, 0x33CCCC, 0x66CCCC, 0x99CCCC, 0xFFCCCC,
513 0x999933, 0x999966, 0x9999CC, 0x9999FF, 0x993399, 0x996699,
514 0x99CC99, 0x99FF99, 0x339999, 0x669999, 0xCC9999, 0xFF9999,
515 0x666633, 0x666699, 0x6666CC, 0x6666FF, 0x663366, 0x669966,
516 0x66CC66, 0x66FF66, 0x336666, 0x996666, 0xCC6666, 0xFF6666,
517 0x333366, 0x333399, 0x3333CC, 0x3333FF, 0x336633, 0x339933,
518 0x33CC33, 0x33FF33, 0x663333, 0x993333, 0xCC3333, 0xFF3333,
519 0x003366, 0x336600, 0x660033, 0x006633, 0x330066, 0x663300,
520 0x336699, 0x669933, 0x993366, 0x339966, 0x663399, 0x996633,
521 0x6699CC, 0x99CC66, 0xCC6699, 0x66CC99, 0x9966CC, 0xCC9966,
522 0x99CCFF, 0xCCFF99, 0xFF99CC, 0x99FFCC, 0xCC99FF, 0xFFCC99,
523 0x111111, 0x222222, 0x444444, 0x555555, 0xAAAAAA, 0xBBBBBB,
531 s->
pal = ff_flashsv2_default_palette;
550 AVCodec ff_flashsv2_decoder = {
556 .
init = flashsv2_decode_init,
557 .
close = flashsv2_decode_end,
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
This structure describes decoded (raw) audio or video data.
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static void skip_bits_long(GetBitContext *s, int n)
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.
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)
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
void av_freep(void *ptr)
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)
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
const char * name
Name of the codec implementation.
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
int av_reallocp(void *ptr, size_t size)
Allocate or reallocate a block of memory.
static int get_bits_count(const GetBitContext *s)
bitstream reader API header.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
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)
#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 av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Libavcodec external API header.
AVPixelFormat
Pixel format.
int flags
A combination of AV_PKT_FLAG values.
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.
static int flashsv2_prime(FlashSVContext *s, uint8_t *src, int size)
void * av_malloc(size_t size) av_malloc_attrib 1(1)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
static int flashsv_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
#define AVERROR_PATCHWELCOME
Not yet implemented in Libav, patches welcome.
main external API structure.
static void close(AVCodecParserContext *s)
packed RGB 8:8:8, 24bpp, BGRBGR...
static unsigned int get_bits1(GetBitContext *s)
static int calc_deflate_block_size(int tmpblock_size)
static void skip_bits(GetBitContext *s, int n)
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
common internal api header.
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
static av_cold int init(AVCodecParserContext *s)
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)
This structure stores compressed data.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.