Libav
Data Structures | Defines | Functions | Variables

libavcodec/libxvidff.c File Reference

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

#include <xvid.h>
#include <unistd.h>
#include "avcodec.h"
#include "libavutil/intreadwrite.h"
#include "libxvid_internal.h"

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...

Defines

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

Functions

int has_altivec (void)
 This function MAY rely on signal() or fork() in order to make sure AltiVec is present.
int xvid_strip_vol_header (AVCodecContext *avctx, unsigned char *frame, unsigned int header_len, unsigned int frame_len)
 Routine to create a global VO/VOL header for MP4 container.
int xvid_ff_2pass (void *ref, int cmd, void *p1, void *p2)
 Dispatch function for our custom plugin.
void xvid_correct_framerate (AVCodecContext *avctx)
 Routine to correct a possibly erroneous framerate being fed to us.
static av_cold int xvid_encode_init (AVCodecContext *avctx)
 Creates the private context for the encoder.
static int xvid_encode_frame (AVCodecContext *avctx, unsigned char *frame, int buf_size, void *data)
 Encodes a single frame.
static av_cold int xvid_encode_close (AVCodecContext *avctx)
 Destroys the private context for the encoder.
static int xvid_ff_2pass_create (xvid_plg_create_t *param, void **handle)
 Initializes the two-pass plugin and context.
static int xvid_ff_2pass_destroy (struct xvid_context *ref, xvid_plg_destroy_t *param)
 Destroys the two-pass plugin context.
static int xvid_ff_2pass_before (struct xvid_context *ref, xvid_plg_data_t *param)
 Enables fast encode mode during the first pass.
static int xvid_ff_2pass_after (struct xvid_context *ref, xvid_plg_data_t *param)
 Captures statistic data and writes it during first pass.

Variables

AVCodec libxvid_encoder
 Xvid codec definition for libavcodec.

Detailed Description

Interface to xvidcore for MPEG-4 compliant encoding.

Author:
Adam Thayer (krevnik@comcast.net)

Definition in file libxvidff.c.


Define Documentation

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

Definition at line 39 of file libxvidff.c.

Referenced by xvid_ff_2pass_after(), and xvid_ff_2pass_create().

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

Definition at line 38 of file libxvidff.c.

Referenced by xvid_ff_2pass_after(), and xvid_ff_2pass_create().

#define BUFFER_SIZE   1024

Buffer management macros.

Definition at line 37 of file libxvidff.c.

Referenced by xvid_encode_init().


Function Documentation

int has_altivec ( void  )

This function MAY rely on signal() or fork() in order to make sure AltiVec is present.

Definition at line 46 of file check_altivec.c.

Referenced by dsputil_h264_init_ppc(), dsputil_init_ppc(), ff_h264dsp_init_ppc(), mm_support(), and xvid_encode_init().

void xvid_correct_framerate ( AVCodecContext avctx)

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 552 of file libxvidff.c.

Referenced by xvid_encode_init().

static av_cold int xvid_encode_close ( AVCodecContext avctx) [static]

Destroys the private context for the encoder.

All buffers are freed, and the Xvid encoder context is destroyed.

Parameters:
avctxAVCodecContext pointer to context
Returns:
Returns 0, success guaranteed

Definition at line 478 of file libxvidff.c.

static int xvid_encode_frame ( AVCodecContext avctx,
unsigned char *  frame,
int  buf_size,
void *  data 
) [static]

Encodes a single frame.

Parameters:
avctxAVCodecContext pointer to context
framePointer to encoded frame buffer
buf_sizeSize of encoded frame buffer
dataPointer to AVFrame of unencoded frame
Returns:
Returns 0 on success, -1 on failure

Definition at line 370 of file libxvidff.c.

static av_cold int xvid_encode_init ( AVCodecContext avctx) [static]

Creates the private context for the encoder.

All buffers are allocated, settings are loaded from the user, and the encoder context created.

Parameters:
avctxAVCodecContext pointer to context
Returns:
Returns 0 on success, -1 on failure

Definition at line 85 of file libxvidff.c.

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

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 744 of file libxvidff.c.

Referenced by xvid_encode_init().

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

Captures statistic data and writes 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 708 of file libxvidff.c.

Referenced by xvid_ff_2pass().

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

Enables fast encode mode during the first pass.

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

Definition at line 665 of file libxvidff.c.

Referenced by xvid_ff_2pass().

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

Initializes 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 618 of file libxvidff.c.

Referenced by xvid_ff_2pass().

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

Destroys the two-pass plugin context.

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

Definition at line 649 of file libxvidff.c.

Referenced by xvid_ff_2pass().

int xvid_strip_vol_header ( AVCodecContext avctx,
unsigned char *  frame,
unsigned int  header_len,
unsigned int  frame_len 
)

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 512 of file libxvidff.c.

Referenced by xvid_encode_frame().


Variable Documentation

Initial value:
 {
    "libxvid",
    AVMEDIA_TYPE_VIDEO,
    CODEC_ID_MPEG4,
    sizeof(struct xvid_context),
    xvid_encode_init,
    xvid_encode_frame,
    xvid_encode_close,
    .pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE},
    .long_name= NULL_IF_CONFIG_SMALL("libxvidcore MPEG-4 part 2"),
}

Xvid codec definition for libavcodec.

Definition at line 770 of file libxvidff.c.