libxvid.c File Reference

Interface to xvidcore for MPEG-4 compliant encoding. More...

#include <xvid.h>
#include <unistd.h>
#include "avcodec.h"
#include "internal.h"
#include "libavutil/file.h"
#include "libavutil/cpu.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/mathematics.h"
#include "libxvid.h"
#include "mpegvideo.h"
Include dependency graph for libxvid.c:

Go to the source code of this file.

Data Structures

struct  xvid_context
 Structure for the private Xvid context. More...
 
struct  xvid_ff_pass1
 Structure for the private first-pass plugin. More...
 

Macros

#define BUFFER_SIZE   1024
 Buffer management macros. More...
 
#define BUFFER_REMAINING(x)   (BUFFER_SIZE - strlen(x))
 
#define BUFFER_CAT(x)   (&((x)[strlen(x)]))
 

Functions

static int xvid_encode_close (AVCodecContext *avctx)
 
static int xvid_ff_2pass_create (xvid_plg_create_t *param, void **handle)
 Initialize the two-pass plugin and context. More...
 
static int xvid_ff_2pass_destroy (struct xvid_context *ref, xvid_plg_destroy_t *param)
 Destroy the two-pass plugin context. More...
 
static int xvid_ff_2pass_before (struct xvid_context *ref, xvid_plg_data_t *param)
 Enable fast encode mode during the first pass. More...
 
static int xvid_ff_2pass_after (struct xvid_context *ref, xvid_plg_data_t *param)
 Capture statistic data and write it during first pass. More...
 
static int xvid_ff_2pass (void *ref, int cmd, void *p1, void *p2)
 Dispatch function for our custom plugin. More...
 
static int xvid_strip_vol_header (AVCodecContext *avctx, AVPacket *pkt, unsigned int header_len, unsigned int frame_len)
 Routine to create a global VO/VOL header for MP4 container. More...
 
static void xvid_correct_framerate (AVCodecContext *avctx)
 Routine to correct a possibly erroneous framerate being fed to us. More...
 
static av_cold int xvid_encode_init (AVCodecContext *avctx)
 
static int xvid_encode_frame (AVCodecContext *avctx, AVPacket *pkt, const AVFrame *picture, int *got_packet)
 

Variables

AVCodec ff_libxvid_encoder
 

Detailed Description

Interface to xvidcore for MPEG-4 compliant encoding.

Author
Adam Thayer (krevn.nosp@m.ik@c.nosp@m.omcas.nosp@m.t.ne.nosp@m.t)

Definition in file libxvid.c.

Macro Definition Documentation

#define BUFFER_CAT (   x)    (&((x)[strlen(x)]))

Definition at line 44 of file libxvid.c.

Referenced by xvid_ff_2pass_after(), and xvid_ff_2pass_create().

#define BUFFER_REMAINING (   x)    (BUFFER_SIZE - strlen(x))

Definition at line 43 of file libxvid.c.

Referenced by xvid_ff_2pass_after(), and xvid_ff_2pass_create().

#define BUFFER_SIZE   1024

Buffer management macros.

Definition at line 42 of file libxvid.c.

Referenced by xvid_encode_init().

Function Documentation

static void xvid_correct_framerate ( AVCodecContext avctx)
static

Routine to correct a possibly erroneous framerate being fed to us.

Xvid currently chokes on framerates where the ticks per frame is extremely large. This function works to correct problems in this area by estimating a new framerate and taking the simpler fraction of the two presented.

Parameters
avctxContext that contains the framerate to correct.

Definition at line 298 of file libxvid.c.

Referenced by xvid_encode_init().

static av_cold int xvid_encode_close ( AVCodecContext avctx)
static

Definition at line 740 of file libxvid.c.

Referenced by xvid_encode_init().

static int xvid_encode_frame ( AVCodecContext avctx,
AVPacket pkt,
const AVFrame picture,
int *  got_packet 
)
static

Definition at line 623 of file libxvid.c.

static av_cold int xvid_encode_init ( AVCodecContext avctx)
static

Definition at line 348 of file libxvid.c.

static int xvid_ff_2pass ( void ref,
int  cmd,
void p1,
void p2 
)
static

Dispatch function for our custom plugin.

This handles the dispatch for the Xvid plugin. It passes data on to other functions for actual processing.

Parameters
refContext pointer for the plugin
cmdThe task given for us to complete
p1First parameter (varies)
p2Second parameter (varies)
Returns
Returns XVID_ERR_xxxx on failure, or 0 on success

Definition at line 221 of file libxvid.c.

Referenced by xvid_encode_init().

static int xvid_ff_2pass_after ( struct xvid_context ref,
xvid_plg_data_t *  param 
)
static

Capture statistic data and write it during first pass.

Parameters
refContext pointer for the plugin
paramStatistic data
Returns
Returns XVID_ERR_xxxx on failure, or 0 on success

Definition at line 185 of file libxvid.c.

Referenced by xvid_ff_2pass().

static int xvid_ff_2pass_before ( struct xvid_context ref,
xvid_plg_data_t *  param 
)
static

Enable fast encode mode during the first pass.

Parameters
refContext pointer for the plugin
paramFrame data
Returns
Returns 0, success guaranteed

Definition at line 142 of file libxvid.c.

Referenced by xvid_ff_2pass().

static int xvid_ff_2pass_create ( xvid_plg_create_t *  param,
void **  handle 
)
static

Initialize the two-pass plugin and context.

Parameters
paramInput construction parameter structure
handlePrivate context handle
Returns
Returns XVID_ERR_xxxx on failure, or 0 on success.

Definition at line 95 of file libxvid.c.

Referenced by xvid_ff_2pass().

static int xvid_ff_2pass_destroy ( struct xvid_context ref,
xvid_plg_destroy_t *  param 
)
static

Destroy the two-pass plugin context.

Parameters
refContext pointer for the plugin
paramDestrooy context
Returns
Returns 0, success guaranteed

Definition at line 126 of file libxvid.c.

Referenced by xvid_ff_2pass().

static int xvid_strip_vol_header ( AVCodecContext avctx,
AVPacket pkt,
unsigned int  header_len,
unsigned int  frame_len 
)
static

Routine to create a global VO/VOL header for MP4 container.

What we do here is extract the header from the Xvid bitstream as it is encoded. We also strip the repeated headers from the bitstream when a global header is requested for MPEG-4 ISO compliance.

Parameters
avctxAVCodecContext pointer to context
framePointer to encoded frame data
header_lenLength of header to search
frame_lenLength of encoded frame data
Returns
Returns new length of frame data

Definition at line 258 of file libxvid.c.

Referenced by xvid_encode_frame().

Variable Documentation

AVCodec ff_libxvid_encoder
Initial value:
= {
.name = "libxvid",
.priv_data_size = sizeof(struct xvid_context),
.encode2 = xvid_encode_frame,
.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.long_name = NULL_IF_CONFIG_SMALL("libxvidcore MPEG-4 part 2"),
}
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
static int xvid_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *picture, int *got_packet)
Definition: libxvid.c:623
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static int xvid_encode_close(AVCodecContext *avctx)
Definition: libxvid.c:740
Structure for the private Xvid context.
Definition: libxvid.c:50
static av_cold int xvid_encode_init(AVCodecContext *avctx)
Definition: libxvid.c:348
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:68
AVPixelFormat
Pixel format.
Definition: pixfmt.h:66

Definition at line 765 of file libxvid.c.