FFmpeg  4.3
Data Structures | Macros | Functions | Variables
rasc.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "libavutil/avassert.h"
#include "libavutil/imgutils.h"
#include "libavutil/opt.h"
#include "avcodec.h"
#include "bytestream.h"
#include "internal.h"
#include <zlib.h>

Go to the source code of this file.

Data Structures

struct  RASCContext
 

Macros

#define KBND   MKTAG('K', 'B', 'N', 'D')
 
#define FINT   MKTAG('F', 'I', 'N', 'T')
 
#define INIT   MKTAG('I', 'N', 'I', 'T')
 
#define BNDL   MKTAG('B', 'N', 'D', 'L')
 
#define KFRM   MKTAG('K', 'F', 'R', 'M')
 
#define DLTA   MKTAG('D', 'L', 'T', 'A')
 
#define MOUS   MKTAG('M', 'O', 'U', 'S')
 
#define MPOS   MKTAG('M', 'P', 'O', 'S')
 
#define MOVE   MKTAG('M', 'O', 'V', 'E')
 
#define EMPT   MKTAG('E', 'M', 'P', 'T')
 
#define NEXT_LINE
 

Functions

static void clear_plane (AVCodecContext *avctx, AVFrame *frame)
 
static void copy_plane (AVCodecContext *avctx, AVFrame *src, AVFrame *dst)
 
static int init_frames (AVCodecContext *avctx)
 
static int decode_fint (AVCodecContext *avctx, AVPacket *avpkt, unsigned size)
 
static int decode_zlib (AVCodecContext *avctx, AVPacket *avpkt, unsigned size, unsigned uncompressed_size)
 
static int decode_move (AVCodecContext *avctx, AVPacket *avpkt, unsigned size)
 
static int decode_dlta (AVCodecContext *avctx, AVPacket *avpkt, unsigned size)
 
static int decode_kfrm (AVCodecContext *avctx, AVPacket *avpkt, unsigned size)
 
static int decode_mous (AVCodecContext *avctx, AVPacket *avpkt, unsigned size)
 
static int decode_mpos (AVCodecContext *avctx, AVPacket *avpkt, unsigned size)
 
static void draw_cursor (AVCodecContext *avctx)
 
static int decode_frame (AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
 
static av_cold int decode_init (AVCodecContext *avctx)
 
static av_cold int decode_close (AVCodecContext *avctx)
 
static void decode_flush (AVCodecContext *avctx)
 

Variables

static const AVOption options []
 
static const AVClass rasc_decoder_class
 
AVCodec ff_rasc_decoder
 

Macro Definition Documentation

◆ KBND

#define KBND   MKTAG('K', 'B', 'N', 'D')

Definition at line 37 of file rasc.c.

◆ FINT

#define FINT   MKTAG('F', 'I', 'N', 'T')

Definition at line 38 of file rasc.c.

◆ INIT

#define INIT   MKTAG('I', 'N', 'I', 'T')

Definition at line 39 of file rasc.c.

◆ BNDL

#define BNDL   MKTAG('B', 'N', 'D', 'L')

Definition at line 40 of file rasc.c.

◆ KFRM

#define KFRM   MKTAG('K', 'F', 'R', 'M')

Definition at line 41 of file rasc.c.

◆ DLTA

#define DLTA   MKTAG('D', 'L', 'T', 'A')

Definition at line 42 of file rasc.c.

◆ MOUS

#define MOUS   MKTAG('M', 'O', 'U', 'S')

Definition at line 43 of file rasc.c.

◆ MPOS

#define MPOS   MKTAG('M', 'P', 'O', 'S')

Definition at line 44 of file rasc.c.

◆ MOVE

#define MOVE   MKTAG('M', 'O', 'V', 'E')

Definition at line 45 of file rasc.c.

◆ EMPT

#define EMPT   MKTAG('E', 'M', 'P', 'T')

Definition at line 46 of file rasc.c.

◆ NEXT_LINE

#define NEXT_LINE
Value:
if (cx >= w * s->bpp) { \
cx = 0; \
cy--; \
b1 -= s->frame1->linesize[0]; \
b2 -= s->frame2->linesize[0]; \
} \
len--;

Definition at line 319 of file rasc.c.

Function Documentation

◆ clear_plane()

static void clear_plane ( AVCodecContext avctx,
AVFrame frame 
)
static

Definition at line 68 of file rasc.c.

Referenced by decode_fint(), decode_flush(), and init_frames().

◆ copy_plane()

static void copy_plane ( AVCodecContext avctx,
AVFrame src,
AVFrame dst 
)
static

Definition at line 79 of file rasc.c.

Referenced by decode_frame(), and image_copy().

◆ init_frames()

static int init_frames ( AVCodecContext avctx)
static

Definition at line 92 of file rasc.c.

Referenced by decode_fint().

◆ decode_fint()

static int decode_fint ( AVCodecContext avctx,
AVPacket avpkt,
unsigned  size 
)
static

Definition at line 111 of file rasc.c.

Referenced by decode_frame(), and decode_kfrm().

◆ decode_zlib()

static int decode_zlib ( AVCodecContext avctx,
AVPacket avpkt,
unsigned  size,
unsigned  uncompressed_size 
)
static

Definition at line 171 of file rasc.c.

Referenced by decode_dlta(), decode_mous(), and decode_move().

◆ decode_move()

static int decode_move ( AVCodecContext avctx,
AVPacket avpkt,
unsigned  size 
)
static

Definition at line 204 of file rasc.c.

Referenced by decode_frame().

◆ decode_dlta()

static int decode_dlta ( AVCodecContext avctx,
AVPacket avpkt,
unsigned  size 
)
static

Definition at line 328 of file rasc.c.

Referenced by decode_frame().

◆ decode_kfrm()

static int decode_kfrm ( AVCodecContext avctx,
AVPacket avpkt,
unsigned  size 
)
static

Definition at line 470 of file rasc.c.

Referenced by decode_frame().

◆ decode_mous()

static int decode_mous ( AVCodecContext avctx,
AVPacket avpkt,
unsigned  size 
)
static

Definition at line 533 of file rasc.c.

Referenced by decode_frame().

◆ decode_mpos()

static int decode_mpos ( AVCodecContext avctx,
AVPacket avpkt,
unsigned  size 
)
static

Definition at line 573 of file rasc.c.

Referenced by decode_frame().

◆ draw_cursor()

static void draw_cursor ( AVCodecContext avctx)
static

Definition at line 590 of file rasc.c.

Referenced by decode_frame().

◆ decode_frame()

static int decode_frame ( AVCodecContext avctx,
void data,
int got_frame,
AVPacket avpkt 
)
static

Definition at line 668 of file rasc.c.

◆ decode_init()

static av_cold int decode_init ( AVCodecContext avctx)
static

Definition at line 748 of file rasc.c.

◆ decode_close()

static av_cold int decode_close ( AVCodecContext avctx)
static

Definition at line 770 of file rasc.c.

◆ decode_flush()

static void decode_flush ( AVCodecContext avctx)
static

Definition at line 785 of file rasc.c.

Variable Documentation

◆ options

const AVOption options[]
static
Initial value:
= {
{ "skip_cursor", "skip the cursor", offsetof(RASCContext, skip_cursor), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_VIDEO_PARAM },
{ NULL },
}

Definition at line 793 of file rasc.c.

◆ rasc_decoder_class

const AVClass rasc_decoder_class
static
Initial value:
= {
.class_name = "rasc decoder",
.item_name = av_default_item_name,
.option = options,
}

Definition at line 798 of file rasc.c.

◆ ff_rasc_decoder

AVCodec ff_rasc_decoder
Initial value:
= {
.name = "rasc",
.long_name = NULL_IF_CONFIG_SMALL("RemotelyAnywhere Screen Capture"),
.priv_data_size = sizeof(RASCContext),
.close = decode_close,
.capabilities = AV_CODEC_CAP_DR1,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE |
.priv_class = &rasc_decoder_class,
}

Definition at line 805 of file rasc.c.

RASCContext
Definition: rasc.c:48
FF_CODEC_CAP_INIT_THREADSAFE
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
Definition: internal.h:40
init
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
AV_OPT_FLAG_VIDEO_PARAM
#define AV_OPT_FLAG_VIDEO_PARAM
Definition: opt.h:279
options
static const AVOption options[]
Definition: rasc.c:793
decode
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
Definition: decode_audio.c:71
rasc_decoder_class
static const AVClass rasc_decoder_class
Definition: rasc.c:798
s
#define s(width, name)
Definition: cbs_vp9.c:257
decode_flush
static void decode_flush(AVCodecContext *avctx)
Definition: rasc.c:785
decode_frame
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: rasc.c:668
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
flush
static void flush(AVCodecContext *avctx)
Definition: aacdec_template.c:500
NULL
#define NULL
Definition: coverity.c:32
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:235
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:50
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:186
AV_CODEC_ID_RASC
@ AV_CODEC_ID_RASC
Definition: codec_id.h:285
FF_CODEC_CAP_INIT_CLEANUP
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
Definition: internal.h:48
decode_init
static av_cold int decode_init(AVCodecContext *avctx)
Definition: rasc.c:748
AV_OPT_FLAG_DECODING_PARAM
#define AV_OPT_FLAG_DECODING_PARAM
a generic parameter which can be set by the user for demuxing or decoding
Definition: opt.h:277
decode_close
static av_cold int decode_close(AVCodecContext *avctx)
Definition: rasc.c:770
w
FFmpeg Automated Testing Environment ************************************Introduction Using FATE from your FFmpeg source directory Submitting the results to the FFmpeg result aggregation server Uploading new samples to the fate suite FATE makefile targets and variables Makefile targets Makefile variables Examples Introduction **************FATE is an extended regression suite on the client side and a means for results aggregation and presentation on the server side The first part of this document explains how you can use FATE from your FFmpeg source directory to test your ffmpeg binary The second part describes how you can run FATE to submit the results to FFmpeg’s FATE server In any way you can have a look at the publicly viewable FATE results by visiting this as it can be seen if some test on some platform broke with their recent contribution This usually happens on the platforms the developers could not test on The second part of this document describes how you can run FATE to submit your results to FFmpeg’s FATE server If you want to submit your results be sure to check that your combination of OS and compiler is not already listed on the above mentioned website In the third part you can find a comprehensive listing of FATE makefile targets and variables Using FATE from your FFmpeg source directory **********************************************If you want to run FATE on your machine you need to have the samples in place You can get the samples via the build target fate rsync Use this command from the top level source this will cause FATE to fail NOTE To use a custom wrapper to run the pass ‘ target exec’ to ‘configure’ or set the TARGET_EXEC Make variable Submitting the results to the FFmpeg result aggregation server ****************************************************************To submit your results to the server you should run fate through the shell script ‘tests fate sh’ from the FFmpeg sources This script needs to be invoked with a configuration file as its first argument tests fate sh path to fate_config A configuration file template with comments describing the individual configuration variables can be found at ‘doc fate_config sh template’ Create a configuration that suits your based on the configuration template The ‘slot’ configuration variable can be any string that is not yet but it is suggested that you name it adhering to the following pattern ‘ARCH OS COMPILER COMPILER VERSION’ The configuration file itself will be sourced in a shell therefore all shell features may be used This enables you to setup the environment as you need it for your build For your first test runs the ‘fate_recv’ variable should be empty or commented out This will run everything as normal except that it will omit the submission of the results to the server The following files should be present in $workdir as specified in the configuration it may help to try out the ‘ssh’ command with one or more ‘ v’ options You should get detailed output concerning your SSH configuration and the authentication process The only thing left is to automate the execution of the fate sh script and the synchronisation of the samples directory Uploading new samples to the fate suite *****************************************If you need a sample uploaded send a mail to samples request This is for developers who have an account on the fate suite server If you upload new please make sure they are as small as space on each network bandwidth and so on benefit from smaller test cases Also keep in mind older checkouts use existing sample that means in practice generally do not remove or overwrite files as it likely would break older checkouts or releases Also all needed samples for a commit should be ideally before the push If you need an account for frequently uploading samples or you wish to help others by doing that send a mail to ffmpeg devel rsync vauL Duo ug o o w
Definition: fate.txt:150
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
AV_OPT_TYPE_BOOL
@ AV_OPT_TYPE_BOOL
Definition: opt.h:240