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");
192 int buf_size = avpkt->
size;
199 *
new_y, *new_cb, *new_cr;
201 unsigned old_y_stride, old_cb_stride, old_cr_stride,
202 new_y_stride, new_cb_stride, new_cr_stride;
203 unsigned total_blocks = avctx->
width * avctx->
height / 4,
204 block_index, block_x = 0;
205 unsigned y[4] = { 0 },
cb = 0x10,
cr = 0x10;
206 int skip = -1, y_avg = 0,
i, j;
210 if (buf_size <= 16) {
235 for (block_index = 0; block_index < total_blocks; block_index++) {
248 y[2] = old_y[old_y_stride];
249 y[3] = old_y[old_y_stride + 1];
255 unsigned sign_selector =
get_bits(&gb, 6);
256 unsigned difference_selector =
get_bits(&gb, 2);
258 for (
i = 0;
i < 4;
i++) {
266 unsigned adjust_index =
get_bits(&gb, 3);
269 for (
i = 0;
i < 4;
i++)
278 unsigned adjust_index =
get_bits(&gb, 3);
288 new_y[new_y_stride] = y[2];
289 new_y[new_y_stride + 1] = y[3];
300 if (block_x * 2 == avctx->
width) {
302 old_y += old_y_stride * 2 - avctx->
width;
303 old_cb += old_cb_stride - avctx->
width / 2;
304 old_cr += old_cr_stride - avctx->
width / 2;
305 new_y += new_y_stride * 2 - avctx->
width;
306 new_cb += new_cb_stride - avctx->
width / 2;
307 new_cr += new_cr_stride - avctx->
width / 2;
319 for (j = 0; j < avctx->
height; j++) {
321 dstY[
i] = new_y[
i] << 2;
323 new_y += new_y_stride;
325 for (j = 0; j < avctx->
height / 2; j++) {
326 for (
i = 0;
i < avctx->
width / 2;
i++) {
332 new_cb += new_cb_stride;
333 new_cr += new_cr_stride;
336 ff_dlog(avctx,
"Frame data: provided %d bytes, used %d bytes\n",
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
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)
GLsizei GLboolean const GLfloat * value
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.
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)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Frame references ownership and permissions
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.