25 #define BITSTREAM_READER_LE
102 static const int8_t
luma_adjust[] = { -4, -3, -2, -1, 1, 2, 3, 4 };
105 { 1, 1, 0, -1, -1, -1, 0, 1 },
106 { 0, 1, 1, 1, 0, -1, -1, -1 }
110 20, 28, 36, 44, 52, 60, 68, 76,
111 84, 92, 100, 106, 112, 116, 120, 124,
112 128, 132, 136, 140, 144, 150, 156, 164,
113 172, 180, 188, 196, 204, 212, 220, 228
123 "Dimensions should be a multiple of two.\n");
195 int buf_size = avpkt->
size;
201 uint8_t *old_y, *old_cb, *old_cr,
202 *new_y, *new_cb, *new_cr;
204 unsigned old_y_stride, old_cb_stride, old_cr_stride,
205 new_y_stride, new_cb_stride, new_cr_stride;
206 unsigned total_blocks = avctx->
width * avctx->
height / 4,
207 block_index, block_x = 0;
208 unsigned y[4] = { 0 },
cb = 0x10,
cr = 0x10;
209 int skip = -1, y_avg = 0, i, j;
213 if (buf_size <= 16) {
238 for (block_index = 0; block_index < total_blocks; block_index++) {
251 y[2] = old_y[old_y_stride];
252 y[3] = old_y[old_y_stride + 1];
258 unsigned sign_selector =
get_bits(&gb, 6);
259 unsigned difference_selector =
get_bits(&gb, 2);
261 for (i = 0; i < 4; i++) {
262 y[i] = av_clip(y_avg +
offset_table[difference_selector] *
269 unsigned adjust_index =
get_bits(&gb, 3);
272 for (i = 0; i < 4; i++)
281 unsigned adjust_index =
get_bits(&gb, 3);
291 new_y[new_y_stride] = y[2];
292 new_y[new_y_stride + 1] = y[3];
303 if (block_x * 2 == avctx->
width) {
305 old_y += old_y_stride * 2 - avctx->
width;
306 old_cb += old_cb_stride - avctx->
width / 2;
307 old_cr += old_cr_stride - avctx->
width / 2;
308 new_y += new_y_stride * 2 - avctx->
width;
309 new_cb += new_cb_stride - avctx->
width / 2;
310 new_cr += new_cr_stride - avctx->
width / 2;
322 for (j = 0; j < avctx->
height; j++) {
323 for (i = 0; i < avctx->
width; i++)
324 dstY[i] = new_y[i] << 2;
326 new_y += new_y_stride;
328 for (j = 0; j < avctx->
height / 2; j++) {
329 for (i = 0; i < avctx->
width / 2; i++) {
335 new_cb += new_cb_stride;
336 new_cr += new_cr_stride;
339 ff_dlog(avctx,
"Frame data: provided %d bytes, used %d bytes\n",
static const uint8_t chroma_vals[]
#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.
Memory handling functions.
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
static av_cold int init(AVCodecContext *avctx)
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Macro definitions for various function/variable attributes.
static double cb(void *priv, double x, double y)
static av_cold int escape130_decode_close(AVCodecContext *avctx)
static int get_bits_count(const GetBitContext *s)
bitstream reader API header.
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. ...
const char * name
Name of the codec implementation.
int width
picture width / height.
GLsizei GLboolean const GLfloat * value
static int decode_skip_count(GetBitContext *gb)
Libavcodec external API header.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
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.
AVCodec ff_escape130_decoder
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
static unsigned int get_bits1(GetBitContext *s)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
common internal api header.
static const uint8_t offset_table[]
static av_cold int escape130_decode_init(AVCodecContext *avctx)
#define FFSWAP(type, a, b)
static double cr(void *priv, double x, double y)
This structure stores compressed data.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.