22 #include "libavutil/attributes.h"
23 #include "libavutil/mem.h"
25 #define BITSTREAM_READER_LE
101 static const int8_t
luma_adjust[] = { -4, -3, -2, -1, 1, 2, 3, 4 };
104 { 1, 1, 0, -1, -1, -1, 0, 1 },
105 { 0, 1, 1, 1, 0, -1, -1, -1 }
109 20, 28, 36, 44, 52, 60, 68, 76,
110 84, 92, 100, 106, 112, 116, 120, 124,
111 128, 132, 136, 140, 144, 150, 156, 164,
112 172, 180, 188, 196, 204, 212, 220, 228
122 "Dimensions should be a multiple of two.\n");
194 int buf_size = avpkt->
size;
200 uint8_t *old_y, *old_cb, *old_cr,
201 *new_y, *new_cb, *new_cr;
203 unsigned old_y_stride, old_cb_stride, old_cr_stride,
204 new_y_stride, new_cb_stride, new_cr_stride;
205 unsigned total_blocks = avctx->
width * avctx->
height / 4,
206 block_index, block_x = 0;
207 unsigned y[4] = { 0 },
cb = 0x10,
cr = 0x10;
208 int skip = -1, y_avg = 0, i, j;
212 if (buf_size <= 16) {
237 for (block_index = 0; block_index < total_blocks; block_index++) {
250 y[2] = old_y[old_y_stride];
251 y[3] = old_y[old_y_stride + 1];
257 unsigned sign_selector =
get_bits(&gb, 6);
258 unsigned difference_selector =
get_bits(&gb, 2);
260 for (i = 0; i < 4; i++) {
261 y[i] = av_clip(y_avg +
offset_table[difference_selector] *
268 unsigned adjust_index =
get_bits(&gb, 3);
271 for (i = 0; i < 4; i++)
280 unsigned adjust_index =
get_bits(&gb, 3);
290 new_y[new_y_stride] = y[2];
291 new_y[new_y_stride + 1] = y[3];
302 if (block_x * 2 == avctx->
width) {
304 old_y += old_y_stride * 2 - avctx->
width;
305 old_cb += old_cb_stride - avctx->
width / 2;
306 old_cr += old_cr_stride - avctx->
width / 2;
307 new_y += new_y_stride * 2 - avctx->
width;
308 new_cb += new_cb_stride - avctx->
width / 2;
309 new_cr += new_cr_stride - avctx->
width / 2;
321 for (j = 0; j < avctx->
height; j++) {
322 for (i = 0; i < avctx->
width; i++)
323 dstY[i] = new_y[i] << 2;
325 new_y += new_y_stride;
327 for (j = 0; j < avctx->
height / 2; j++) {
328 for (i = 0; i < avctx->
width / 2; i++) {
334 new_cb += new_cb_stride;
335 new_cr += new_cr_stride;
338 av_dlog(avctx,
"Frame data: provided %d bytes, used %d bytes\n",
static const uint8_t chroma_vals[]
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)
static av_cold int init(AVCodecContext *avctx)
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)
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 double cb(void *priv, double x, double y)
static av_cold int escape130_decode_close(AVCodecContext *avctx)
const char * name
Name of the codec implementation.
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
static int get_bits_count(const GetBitContext *s)
bitstream reader API header.
#define FFSWAP(type, a, b)
static const int8_t chroma_adjust[2][8]
static const int8_t sign_table[64][4]
static int escape130_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
static int get_bits_left(GetBitContext *gb)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Libavcodec external API header.
int width
picture width / height.
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 ...
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
static int decode_skip_count(GetBitContext *gb)
static const int8_t luma_adjust[]
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
main external API structure.
static void close(AVCodecParserContext *s)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
AVCodec ff_escape130_decoder
static unsigned int get_bits1(GetBitContext *s)
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
common internal api header.
static const uint8_t offset_table[]
#define AVERROR_INVALIDDATA
static av_cold int escape130_decode_init(AVCodecContext *avctx)
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
static double cr(void *priv, double x, double y)
This structure stores compressed data.
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.