39#define EXTRADATA1_SIZE (6 + 256 * 3)
60 uint8_t *
out, ptrdiff_t
stride,
int video_base)
62 int base_x = video_base %
s->avctx->width;
63 int base_y = video_base /
s->avctx->width;
64 ptrdiff_t stride_adj =
stride -
s->avctx->width;
65 const uint8_t *back_frame =
s->back_frame;
66 const uint8_t *in_end = in +
size;
67 const uint8_t *out_end =
out +
stride *
s->avctx->height - stride_adj;
72 for (
int i = 0;
i <= base_y;
i++) {
73 memcpy(
out, back_frame,
s->avctx->width);
75 back_frame +=
s->avctx->width;
77 back_frame += base_x -
s->avctx->width;
81 line_end =
out - stride_adj;
105 if (
out == line_end) {
120 if (
out == line_end) {
132 memcpy(
out, back_frame, line_end -
out);
133 if (line_end == out_end)
135 back_frame += line_end -
out;
136 out = line_end + stride_adj;
191 back_frame, avctx->
width, 0);
192 s->back_frame = back_frame;
201 const uint8_t *buf = avpkt->
data;
202 int ret, buf_size = avpkt->
size;
static double val(void *priv, double ch)
const FFCodec ff_rl2_decoder
static av_cold void close(AVCodecParserContext *s)
Libavcodec external API header.
#define i(width, name, range_min, range_max)
#define FF_CODEC_DECODE_CB(func)
#define CODEC_LONG_NAME(str)
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
int ff_set_dimensions(AVCodecContext *s, int width, int height)
int(* init)(AVBSFContext *ctx)
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static void rl2_rle_decode(Rl2Context *s, const uint8_t *in, int size, uint8_t *out, ptrdiff_t stride, int video_base)
Run Length Decode a single 320x200 frame.
static av_cold int rl2_decode_init(AVCodecContext *avctx)
Initialize the decoder.
static int rl2_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *avpkt)
static av_cold int rl2_decode_end(AVCodecContext *avctx)
Uninit decoder.
#define EXTRADATA1_SIZE
video base, clr count, palette
common internal API header
Memory handling functions.
@ AV_PIX_FMT_PAL8
8 bits with AV_PIX_FMT_RGB32 palette
main external API structure.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
int width
picture width / height.
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
This structure describes decoded (raw) audio or video data.
This structure stores compressed data.
uint16_t video_base
initial drawing offset
uint8_t * back_frame
background frame
uint32_t clr_count
number of used colors (currently unused)
uint32_t palette[AVPALETTE_COUNT]
static void copy(const float *p1, float *p2, const int length)