35 #define ATTR_BOLD 0x01 36 #define ATTR_FAINT 0x02 37 #define ATTR_UNDERLINE 0x08 38 #define ATTR_BLINK 0x10 39 #define ATTR_REVERSE 0x40 40 #define ATTR_CONCEALED 0x80 42 #define DEFAULT_FG_COLOR 7 43 #define DEFAULT_BG_COLOR 0 44 #define DEFAULT_SCREEN_MODE 3 50 0, 4, 2, 6, 1, 5, 3, 7, 8, 12, 10, 14, 9, 13, 11, 15
110 #define COLOR(x) ((x) * 40 + 55) 111 for (r = 0; r < 6; r++)
112 for (g = 0; g < 6; g++)
113 for (b = 0; b < 6; b++)
115 #define GRAY(x) ((x) * 10 + 8) 116 for (g = 0; g < 24; g++)
117 *pal++ = 0xFF000000 | (
GRAY(g) << 16) | (
GRAY(g) << 8) |
GRAY(g);
135 for (; i < avctx->
height; i++)
153 for (i = 0; i < avctx->
height; i++)
211 s->
x = s->
nb_args > 1 ? av_clip((s->
args[1] - 1)*FONT_WIDTH, 0, avctx->
width - FONT_WIDTH) : 0;
218 case 0:
case 1:
case 4:
case 5:
case 13:
case 19:
253 s->
x = av_clip(s->
x, 0, width - FONT_WIDTH);
255 if (width != avctx->
width || height != avctx->
height) {
267 }
else if (c ==
'l') {
272 switch (s->
args[0]) {
311 }
else if (m == 1 || m == 2 || m == 4 || m == 5 || m == 7 || m == 8) {
313 }
else if (m >= 30 && m <= 37) {
319 }
else if (m == 39) {
321 }
else if (m >= 40 && m <= 47) {
327 }
else if (m == 49) {
343 s->
x = av_clip(s->
sx, 0, avctx->
width - FONT_WIDTH);
356 void *
data,
int *got_frame,
361 int buf_size = avpkt->
size;
362 const uint8_t *buf_end = buf+buf_size;
368 for (i=0; i<avctx->
height; i++)
381 while(buf < buf_end) {
395 count = ((i + 8) & ~7) -
i;
396 for (i = 0; i <
count; i++)
427 case '0':
case '1':
case '2':
case '3':
case '4':
428 case '5':
case '6':
case '7':
case '8':
case '9':
454 if (buf[0] == 0x0E || buf[0] == 0x1B)
static void draw_char(AVCodecContext *avctx, int c)
Draw character to screen.
#define FONT_WIDTH
Font width.
int x
x cursor position (pixels)
#define ATTR_REVERSE
Reverse (mode 7)
This structure describes decoded (raw) audio or video data.
ptrdiff_t const GLvoid * data
#define ATTR_CONCEALED
Concealed (mode 8)
#define AV_LOG_WARNING
Something somehow does not look correct.
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 av_cold int init(AVCodecContext *avctx)
#define avpriv_request_sample(...)
int nb_args
number of arguments (may exceed MAX_NB_ARGS)
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
const uint8_t avpriv_vga16_font[4096]
#define DEFAULT_SCREEN_MODE
80x25
static void erase_screen(AVCodecContext *avctx)
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
static int execute_code(AVCodecContext *avctx, int c)
Execute ANSI escape code.
static void hscroll(AVCodecContext *avctx)
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
8 bits with AV_PIX_FMT_RGB32 palette
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
static av_cold int decode_close(AVCodecContext *avctx)
#define i(width, name, range_min, range_max)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
int sy
saved y cursor position (pixels)
const uint8_t avpriv_cga_font[2048]
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. ...
int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Identical in function to ff_get_buffer(), except it reuses the existing buffer if available...
static void erase_line(AVCodecContext *avctx, int xoffset, int xlength)
const char * name
Name of the codec implementation.
reference-counted frame API
#define ATTR_BLINK
Blink/Bright-background (mode 5)
enum AVPictureType pict_type
Picture type of the frame.
int width
picture width / height.
static av_cold int decode_init(AVCodecContext *avctx)
#define ATTR_BOLD
Bold/Bright-foreground (mode 1)
void ff_draw_pc_font(uint8_t *dst, int linesize, const uint8_t *font, int font_height, int ch, int fg, int bg)
Draw CGA/EGA/VGA font to 8-bit pixel buffer.
Libavcodec external API header.
int font_height
font height
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
main external API structure.
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
int palette_has_changed
Tell user application that palette has changed from previous frame.
static const uint8_t ansi_to_cga[16]
map ansi color index to cga palette index
static void set_palette(uint32_t *pal)
const uint32_t ff_cga_palette[16]
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.
int sx
saved x cursor position (pixels)
common internal api header.
common internal and external API header
int y
y cursor position (pixels)
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
enum AnsiContext::@35 state
int frame_number
Frame counter, set by libavcodec.
#define DEFAULT_FG_COLOR
CGA color index.
#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
int attributes
attribute flags
This structure stores compressed data.
#define AV_GET_BUFFER_FLAG_REF
The decoder will keep a reference to the frame and may reuse it later.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
CGA/EGA/VGA ROM font data.