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++) {
85 unsigned c =
AV_RB16(sptr) & ~0x8000;
86 unsigned b = c & 0x1F;
87 unsigned g = (c >> 5) & 0x1F;
90 *dst++ = (b << 3) | (b >> 2);
91 *dst++ = (g << 3) | (g >> 2);
92 *dst++ = (r << 3) | (r >> 2);
96 uint32_t
c = pal[*sptr++];
97 bytestream_put_le24(&dst, c);
101 return sptr - orig_src;
126 zret = inflateInit(&s->
zstream);
160 if (deflateInit(&zs, 0) != Z_OK)
169 if ((zret = inflateReset(&s->
zstream)) != Z_OK) {
191 int ret = inflateReset(&s->
zstream);
208 if (ret == Z_DATA_ERROR) {
214 if (ret != Z_OK && ret != Z_STREAM_END) {
256 zstream.zalloc = Z_NULL;
257 zstream.zfree = Z_NULL;
258 zstream.opaque = Z_NULL;
259 if (deflateInit(&zstream, 0) != Z_OK)
261 size = deflateBound(&zstream, tmpblock_size);
262 deflateEnd(&zstream);
270 int buf_size = avpkt->
size;
272 int h_blocks, v_blocks, h_part, v_part, i, j, ret;
322 "Cannot allocate decompression buffer.\n");
329 "Cannot determine deflate buffer size.\n");
350 "Frame width or height differs from first frame!\n");
368 ff_dlog(avctx,
"image: %dx%d block: %dx%d num: %dx%d part: %dx%d\n",
370 h_blocks, v_blocks, h_part, v_part);
376 for (j = 0; j < v_blocks + (v_part ? 1 : 0); j++) {
379 int cur_blk_height = (j < v_blocks) ? s->
block_height : v_part;
382 for (i = 0; i < h_blocks + (h_part ? 1 : 0); i++) {
384 int cur_blk_width = (i < h_blocks) ? s->
block_width : h_part;
410 "%dx%d invalid color depth %d\n",
422 "Inter frame without keyframe\n");
429 "Block parameters invalid: %d + %d > %d\n",
434 "%dx%d diff start %d height %d\n",
457 "no data available for zlib priming\n");
467 for (k = 0; k < cur_blk_height; k++) {
477 cur_blk_width, cur_blk_height,
479 i + j * (h_blocks + !!h_part)))
481 "error in decompression of block %dx%d\n", i, j);
510 #if CONFIG_FLASHSV_DECODER
525 #if CONFIG_FLASHSV2_DECODER
526 static const uint32_t ff_flashsv2_default_palette[128] = {
527 0x000000, 0x333333, 0x666666, 0x999999, 0xCCCCCC, 0xFFFFFF,
528 0x330000, 0x660000, 0x990000, 0xCC0000, 0xFF0000, 0x003300,
529 0x006600, 0x009900, 0x00CC00, 0x00FF00, 0x000033, 0x000066,
530 0x000099, 0x0000CC, 0x0000FF, 0x333300, 0x666600, 0x999900,
531 0xCCCC00, 0xFFFF00, 0x003333, 0x006666, 0x009999, 0x00CCCC,
532 0x00FFFF, 0x330033, 0x660066, 0x990099, 0xCC00CC, 0xFF00FF,
533 0xFFFF33, 0xFFFF66, 0xFFFF99, 0xFFFFCC, 0xFF33FF, 0xFF66FF,
534 0xFF99FF, 0xFFCCFF, 0x33FFFF, 0x66FFFF, 0x99FFFF, 0xCCFFFF,
535 0xCCCC33, 0xCCCC66, 0xCCCC99, 0xCCCCFF, 0xCC33CC, 0xCC66CC,
536 0xCC99CC, 0xCCFFCC, 0x33CCCC, 0x66CCCC, 0x99CCCC, 0xFFCCCC,
537 0x999933, 0x999966, 0x9999CC, 0x9999FF, 0x993399, 0x996699,
538 0x99CC99, 0x99FF99, 0x339999, 0x669999, 0xCC9999, 0xFF9999,
539 0x666633, 0x666699, 0x6666CC, 0x6666FF, 0x663366, 0x669966,
540 0x66CC66, 0x66FF66, 0x336666, 0x996666, 0xCC6666, 0xFF6666,
541 0x333366, 0x333399, 0x3333CC, 0x3333FF, 0x336633, 0x339933,
542 0x33CC33, 0x33FF33, 0x663333, 0x993333, 0xCC3333, 0xFF3333,
543 0x003366, 0x336600, 0x660033, 0x006633, 0x330066, 0x663300,
544 0x336699, 0x669933, 0x993366, 0x339966, 0x663399, 0x996633,
545 0x6699CC, 0x99CC66, 0xCC6699, 0x66CC99, 0x9966CC, 0xCC9966,
546 0x99CCFF, 0xCCFF99, 0xFF99CC, 0x99FFCC, 0xCC99FF, 0xFFCC99,
547 0x111111, 0x222222, 0x444444, 0x555555, 0xAAAAAA, 0xBBBBBB,
555 s->
pal = ff_flashsv2_default_palette;
574 AVCodec ff_flashsv2_decoder = {
580 .
init = flashsv2_decode_init,
581 .close = flashsv2_decode_end,
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
This structure describes decoded (raw) audio or video data.
ptrdiff_t const GLvoid * data
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Check that the provided frame dimensions are valid and set them on the codec context.
static void skip_bits_long(GetBitContext *s, int n)
static av_cold int init(AVCodecContext *avctx)
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_RB16
static int decode_hybrid(const uint8_t *sptr, const uint8_t *sptr_end, uint8_t *dptr, int dx, int dy, int h, int w, int stride, const uint32_t *pal)
static av_cold int flashsv_decode_end(AVCodecContext *avctx)
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
static void deflate(uint8_t *dst, const uint8_t *p1, int width, int threshold, const uint8_t *coordinates[], int coord)
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
static void inflate(uint8_t *dst, const uint8_t *p1, int width, int threshold, const uint8_t *coordinates[], int coord)
static int get_bits_count(const GetBitContext *s)
bitstream reader API header.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
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_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.
const char * name
Name of the codec implementation.
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)
packed RGB 8:8:8, 24bpp, BGRBGR...
static int flashsv_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
int av_reallocp(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory through a pointer to a pointer.
Libavcodec external API header.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
main external API structure.
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 enum AVPixelFormat pix_fmts[]
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
GLint GLenum GLboolean GLsizei stride
common internal api header.
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
static int decode(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *pkt)
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)
AVPixelFormat
Pixel format.
This structure stores compressed data.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.