libavcodec/roqvideoenc.c File Reference

id RoQ encoder by Vitor. More...

#include <string.h>
#include "roqvideo.h"
#include "bytestream.h"
#include "elbg.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

Defines

#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)

Typedefs

typedef struct RoqTempData RoqTempdata
 Temporary vars.

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 (uint8_t *a, uint8_t *b, int count)
static int block_sse (uint8_t **buf1, uint8_t **buf2, int x1, int y1, int x2, int y2, int *stride1, 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 (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 **data, int top, int left, int *stride)
 Create a single YUV cell from a 2x2 section of the image.
static void create_clusters (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 int roq_encode_init (AVCodecContext *avctx)
static void roq_write_video_info_chunk (RoqContext *enc)
static int roq_encode_frame (AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data)
static int roq_encode_end (AVCodecContext *avctx)

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.


Define Documentation

#define CHROMA_BIAS   1

#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 296 of file roqvideoenc.c.

Referenced by motion_search().

#define MAX_CBS_2x2   256

Maximum number of 2x2 codebooks.

Definition at line 72 of file roqvideoenc.c.

Referenced by generate_new_codebooks(), and remap_codebooks().

#define MAX_CBS_4x4   255

Maximum number of generated 4x4 codebooks.

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

Definition at line 70 of file roqvideoenc.c.

Referenced by generate_new_codebooks(), and remap_codebooks().

#define ROQ_LAMBDA_SCALE   ((uint64_t) FF_LAMBDA_SCALE)

Definition at line 75 of file roqvideoenc.c.

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


Typedef Documentation

typedef struct RoqTempData RoqTempdata

Temporary vars.


Function Documentation

static int block_sse ( uint8_t **  buf1,
uint8_t **  buf2,
int  x1,
int  y1,
int  x2,
int  y2,
int *  stride1,
int *  stride2,
int  size 
) [static]

static void create_cel_evals ( RoqContext enc,
RoqTempdata tempData 
) [static]

Initialize cel evaluators and set their source coordinates.

Definition at line 245 of file roqvideoenc.c.

Referenced by roq_encode_video().

static void create_clusters ( AVFrame frame,
int  w,
int  h,
uint8_t *  yuvClusters 
) [static]

Create YUV clusters for the entire image.

Definition at line 778 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 100 of file roqvideoenc.c.

Referenced by generate_new_codebooks().

static int eval_motion_dist ( RoqContext enc,
int  x,
int  y,
motion_vect  vect,
int  size 
) [static]

Definition at line 143 of file roqvideoenc.c.

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

static int eval_sse ( uint8_t *  a,
uint8_t *  b,
int  count 
) [inline, static]

Definition at line 115 of file roqvideoenc.c.

Referenced by block_sse(), and squared_diff_macroblock().

static void frame_block_to_cell ( uint8_t *  block,
uint8_t **  data,
int  top,
int  left,
int *  stride 
) [inline, static]

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

Definition at line 757 of file roqvideoenc.c.

Referenced by create_clusters().

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 462 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 398 of file roqvideoenc.c.

Referenced by gather_data_for_cel().

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

Definition at line 792 of file roqvideoenc.c.

Referenced by generate_new_codebooks().

static void generate_new_codebooks ( RoqContext enc,
RoqTempdata tempData 
) [static]

Definition at line 827 of file roqvideoenc.c.

Referenced by roq_encode_video().

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

Get macroblocks from parts of the image.

Definition at line 263 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 278 of file roqvideoenc.c.

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

static uint8_t motion_arg ( motion_vect  mot  )  [inline, static]

Definition at line 592 of file roqvideoenc.c.

Referenced by reconstruct_and_encode_image().

static void motion_search ( RoqContext enc,
int  blocksize 
) [static]

Definition at line 306 of file roqvideoenc.c.

Referenced by roq_encode_video().

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

Definition at line 623 of file roqvideoenc.c.

Referenced by roq_encode_video().

static void remap_codebooks ( RoqContext enc,
RoqTempdata tempData 
) [static]

Definition at line 536 of file roqvideoenc.c.

Referenced by roq_encode_video().

static int roq_encode_end ( AVCodecContext avctx  )  [static]

Definition at line 1052 of file roqvideoenc.c.

static int roq_encode_frame ( AVCodecContext avctx,
unsigned char *  buf,
int  buf_size,
void *  data 
) [static]

Definition at line 1004 of file roqvideoenc.c.

static int roq_encode_init ( AVCodecContext avctx  )  [static]

Definition at line 938 of file roqvideoenc.c.

static void roq_encode_video ( RoqContext enc  )  [static]

Definition at line 881 of file roqvideoenc.c.

Referenced by roq_encode_frame().

static void roq_write_video_info_chunk ( RoqContext enc  )  [static]

Definition at line 979 of file roqvideoenc.c.

Referenced by roq_encode_frame().

static int square ( int  x  )  [inline, static]

Definition at line 110 of file roqvideoenc.c.

Referenced by dpcm_decode_init(), and eval_sse().

static int squared_diff_macroblock ( uint8_t  a[],
uint8_t  b[],
int  size 
) [inline, static]

Returns:
distortion between two macroblocks

Definition at line 170 of file roqvideoenc.c.

Referenced by gather_data_for_subcel(), and index_mb().

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

Definition at line 78 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 85 of file roqvideoenc.c.

Referenced by generate_new_codebooks().

static void write_codebooks ( RoqContext enc,
RoqTempdata tempData 
) [static]

Write codebook chunk.

Definition at line 568 of file roqvideoenc.c.

Referenced by roq_encode_video().

static void write_typecode ( CodingSpool s,
uint8_t  type 
) [static]

Definition at line 609 of file roqvideoenc.c.

Referenced by reconstruct_and_encode_image().


Variable Documentation

Initial value:

 {
    .name                 = "roqvideo",
    .type                 = AVMEDIA_TYPE_VIDEO,
    .id                   = CODEC_ID_ROQ,
    .priv_data_size       = sizeof(RoqContext),
    .init                 = roq_encode_init,
    .encode               = roq_encode_frame,
    .close                = roq_encode_end,
    .supported_framerates = (const AVRational[]){{30,1}, {0,0}},
    .pix_fmts             = (const enum PixelFormat[]){PIX_FMT_YUV444P, PIX_FMT_NONE},
    .long_name            = NULL_IF_CONFIG_SMALL("id RoQ video"),
}

Definition at line 1068 of file roqvideoenc.c.


Generated on Fri Oct 26 02:46:10 2012 for FFmpeg by  doxygen 1.5.8