FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Functions | Variables
roqvideoenc.c File Reference

id RoQ encoder by Vitor. More...

#include <string.h>
#include "libavutil/attributes.h"
#include "roqvideo.h"
#include "bytestream.h"
#include "elbg.h"
#include "internal.h"
#include "mathops.h"

Go to the source code of this file.

Data Structures

struct  SubcelEvaluation
 
struct  CelEvaluation
 
struct  RoqCodebooks
 
struct  RoqTempdata
 Temporary vars. More...
 
struct  CodingSpool
 

Macros

#define CHROMA_BIAS   1
 
#define MAX_CBS_4x4   255
 Maximum number of generated 4x4 codebooks.
 
#define MAX_CBS_2x2   256
 Maximum number of 2x2 codebooks.
 
#define ROQ_LAMBDA_SCALE   ((uint64_t) FF_LAMBDA_SCALE)
 
#define EVAL_MOTION(MOTION)
 

Functions

static void unpack_roq_cell (roq_cell *cell, uint8_t u[4 *3])
 
static void unpack_roq_qcell (uint8_t cb2[], roq_qcell *qcell, uint8_t u[4 *4 *3])
 
static void enlarge_roq_mb4 (uint8_t base[3 *16], uint8_t u[3 *64])
 
static int square (int x)
 
static int eval_sse (const uint8_t *a, const uint8_t *b, int count)
 
static int block_sse (uint8_t *const *buf1, uint8_t *const *buf2, int x1, int y1, int x2, int y2, const int *stride1, const int *stride2, int size)
 
static int eval_motion_dist (RoqContext *enc, int x, int y, motion_vect vect, int size)
 
static int squared_diff_macroblock (uint8_t a[], uint8_t b[], int size)
 
static void create_cel_evals (RoqContext *enc, RoqTempdata *tempData)
 Initialize cel evaluators and set their source coordinates.
 
static void get_frame_mb (const AVFrame *frame, int x, int y, uint8_t mb[], int dim)
 Get macroblocks from parts of the image.
 
static int index_mb (uint8_t cluster[], uint8_t cb[], int numCB, int *outIndex, int dim)
 Find the codebook with the lowest distortion from an image.
 
static void motion_search (RoqContext *enc, int blocksize)
 
static void gather_data_for_subcel (SubcelEvaluation *subcel, int x, int y, RoqContext *enc, RoqTempdata *tempData)
 Get distortion for all options available to a subcel.
 
static void gather_data_for_cel (CelEvaluation *cel, RoqContext *enc, RoqTempdata *tempData)
 Get distortion for all options available to a cel.
 
static void remap_codebooks (RoqContext *enc, RoqTempdata *tempData)
 
static void write_codebooks (RoqContext *enc, RoqTempdata *tempData)
 Write codebook chunk.
 
static uint8_t motion_arg (motion_vect mot)
 
static void write_typecode (CodingSpool *s, uint8_t type)
 
static void reconstruct_and_encode_image (RoqContext *enc, RoqTempdata *tempData, int w, int h, int numBlocks)
 
static void frame_block_to_cell (uint8_t *block, uint8_t *const *data, int top, int left, const int *stride)
 Create a single YUV cell from a 2x2 section of the image.
 
static void create_clusters (const AVFrame *frame, int w, int h, uint8_t *yuvClusters)
 Create YUV clusters for the entire image.
 
static void generate_codebook (RoqContext *enc, RoqTempdata *tempdata, int *points, int inputCount, roq_cell *results, int size, int cbsize)
 
static void generate_new_codebooks (RoqContext *enc, RoqTempdata *tempData)
 
static void roq_encode_video (RoqContext *enc)
 
static av_cold int roq_encode_end (AVCodecContext *avctx)
 
static av_cold int roq_encode_init (AVCodecContext *avctx)
 
static void roq_write_video_info_chunk (RoqContext *enc)
 
static int roq_encode_frame (AVCodecContext *avctx, AVPacket *pkt, const AVFrame *frame, int *got_packet)
 

Variables

AVCodec ff_roq_encoder
 

Detailed Description

id RoQ encoder by Vitor.

Based on the Switchblade3 library and the Switchblade3 FFmpeg glue by Eric Lasota.

Definition in file roqvideoenc.c.

Macro Definition Documentation

#define CHROMA_BIAS   1
#define MAX_CBS_4x4   255

Maximum number of generated 4x4 codebooks.

Can't be 256 to workaround a Quake 3 bug.

Definition at line 72 of file roqvideoenc.c.

Referenced by generate_new_codebooks(), and remap_codebooks().

#define MAX_CBS_2x2   256

Maximum number of 2x2 codebooks.

Definition at line 74 of file roqvideoenc.c.

Referenced by generate_new_codebooks(), and remap_codebooks().

#define ROQ_LAMBDA_SCALE   ((uint64_t) FF_LAMBDA_SCALE)

Definition at line 77 of file roqvideoenc.c.

Referenced by gather_data_for_cel(), gather_data_for_subcel(), and roq_encode_frame().

#define EVAL_MOTION (   MOTION)
Value:
do { \
diff = eval_motion_dist(enc, j, i, MOTION, blocksize); \
if (diff < lowestdiff) { \
lowestdiff = diff; \
bestpick = MOTION; \
} \
} while(0)

Definition at line 298 of file roqvideoenc.c.

Referenced by motion_search().

Function Documentation

static void unpack_roq_cell ( roq_cell cell,
uint8_t  u[4 *3] 
)
static

Definition at line 80 of file roqvideoenc.c.

Referenced by generate_new_codebooks().

static void unpack_roq_qcell ( uint8_t  cb2[],
roq_qcell qcell,
uint8_t  u[4 *4 *3] 
)
static

Definition at line 87 of file roqvideoenc.c.

Referenced by generate_new_codebooks().

static void enlarge_roq_mb4 ( uint8_t  base[3 *16],
uint8_t  u[3 *64] 
)
static

Definition at line 102 of file roqvideoenc.c.

Referenced by generate_new_codebooks().

static int square ( int  x)
inlinestatic

Definition at line 112 of file roqvideoenc.c.

Referenced by dpcm_decode_init(), eval_sse(), and iterative_me().

static int eval_sse ( const uint8_t a,
const uint8_t b,
int  count 
)
inlinestatic

Definition at line 117 of file roqvideoenc.c.

Referenced by block_sse(), and squared_diff_macroblock().

static int block_sse ( uint8_t *const *  buf1,
uint8_t *const *  buf2,
int  x1,
int  y1,
int  x2,
int  y2,
const int *  stride1,
const int *  stride2,
int  size 
)
static
static int eval_motion_dist ( RoqContext enc,
int  x,
int  y,
motion_vect  vect,
int  size 
)
static

Definition at line 145 of file roqvideoenc.c.

Referenced by gather_data_for_cel(), gather_data_for_subcel(), and motion_search().

static int squared_diff_macroblock ( uint8_t  a[],
uint8_t  b[],
int  size 
)
inlinestatic
Returns
distortion between two macroblocks

Definition at line 172 of file roqvideoenc.c.

Referenced by gather_data_for_subcel(), and index_mb().

static void create_cel_evals ( RoqContext enc,
RoqTempdata tempData 
)
static

Initialize cel evaluators and set their source coordinates.

Definition at line 247 of file roqvideoenc.c.

Referenced by roq_encode_video().

static void get_frame_mb ( const AVFrame frame,
int  x,
int  y,
uint8_t  mb[],
int  dim 
)
static

Get macroblocks from parts of the image.

Definition at line 265 of file roqvideoenc.c.

Referenced by gather_data_for_cel(), and gather_data_for_subcel().

static int index_mb ( uint8_t  cluster[],
uint8_t  cb[],
int  numCB,
int *  outIndex,
int  dim 
)
static

Find the codebook with the lowest distortion from an image.

Definition at line 280 of file roqvideoenc.c.

Referenced by gather_data_for_cel(), gather_data_for_subcel(), and generate_new_codebooks().

static void motion_search ( RoqContext enc,
int  blocksize 
)
static

Definition at line 308 of file roqvideoenc.c.

Referenced by roq_encode_video().

static void gather_data_for_subcel ( SubcelEvaluation subcel,
int  x,
int  y,
RoqContext enc,
RoqTempdata tempData 
)
static

Get distortion for all options available to a subcel.

Definition at line 400 of file roqvideoenc.c.

Referenced by gather_data_for_cel().

static void gather_data_for_cel ( CelEvaluation cel,
RoqContext enc,
RoqTempdata tempData 
)
static

Get distortion for all options available to a cel.

Definition at line 464 of file roqvideoenc.c.

Referenced by roq_encode_video().

static void remap_codebooks ( RoqContext enc,
RoqTempdata tempData 
)
static

Definition at line 538 of file roqvideoenc.c.

Referenced by roq_encode_video().

static void write_codebooks ( RoqContext enc,
RoqTempdata tempData 
)
static

Write codebook chunk.

Definition at line 570 of file roqvideoenc.c.

Referenced by roq_encode_video().

static uint8_t motion_arg ( motion_vect  mot)
inlinestatic

Definition at line 594 of file roqvideoenc.c.

Referenced by reconstruct_and_encode_image().

static void write_typecode ( CodingSpool s,
uint8_t  type 
)
static

Definition at line 611 of file roqvideoenc.c.

Referenced by reconstruct_and_encode_image().

static void reconstruct_and_encode_image ( RoqContext enc,
RoqTempdata tempData,
int  w,
int  h,
int  numBlocks 
)
static

Definition at line 625 of file roqvideoenc.c.

Referenced by roq_encode_video().

static void frame_block_to_cell ( uint8_t block,
uint8_t *const *  data,
int  top,
int  left,
const int *  stride 
)
inlinestatic

Create a single YUV cell from a 2x2 section of the image.

Definition at line 759 of file roqvideoenc.c.

Referenced by create_clusters().

static void create_clusters ( const AVFrame frame,
int  w,
int  h,
uint8_t yuvClusters 
)
static

Create YUV clusters for the entire image.

Definition at line 780 of file roqvideoenc.c.

Referenced by generate_new_codebooks().

static void generate_codebook ( RoqContext enc,
RoqTempdata tempdata,
int *  points,
int  inputCount,
roq_cell results,
int  size,
int  cbsize 
)
static

Definition at line 794 of file roqvideoenc.c.

Referenced by generate_new_codebooks().

static void generate_new_codebooks ( RoqContext enc,
RoqTempdata tempData 
)
static

Definition at line 829 of file roqvideoenc.c.

Referenced by roq_encode_video().

static void roq_encode_video ( RoqContext enc)
static

Definition at line 883 of file roqvideoenc.c.

Referenced by roq_encode_frame().

static av_cold int roq_encode_end ( AVCodecContext avctx)
static

Definition at line 940 of file roqvideoenc.c.

Referenced by roq_encode_init().

static av_cold int roq_encode_init ( AVCodecContext avctx)
static

Definition at line 956 of file roqvideoenc.c.

static void roq_write_video_info_chunk ( RoqContext enc)
static

Definition at line 1001 of file roqvideoenc.c.

Referenced by roq_encode_frame().

static int roq_encode_frame ( AVCodecContext avctx,
AVPacket pkt,
const AVFrame frame,
int *  got_packet 
)
static

Definition at line 1026 of file roqvideoenc.c.

Variable Documentation

AVCodec ff_roq_encoder
Initial value:
= {
.name = "roqvideo",
.long_name = NULL_IF_CONFIG_SMALL("id RoQ video"),
.priv_data_size = sizeof(RoqContext),
.encode2 = roq_encode_frame,
.supported_framerates = (const AVRational[]){ {30,1}, {0,0} },
.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV444P,
}

Definition at line 1076 of file roqvideoenc.c.