Created by the British Broadcasting Corporation.
C interface to Dirac Encoder. More...
Go to the source code of this file.
Classes | |
struct | dirac_encparams_t |
struct | dirac_encoder_context_t |
struct | dirac_enc_data_t |
struct | dirac_enc_picstats_t |
struct | dirac_enc_seqstats_t |
struct | dirac_mv_t |
struct | dirac_mv_cost_t |
struct | dirac_instr_t |
struct | dirac_encoder_t |
Typedefs | |
typedef PrefilterType | dirac_prefilter_t |
typedef VideoFormat | dirac_encoder_presets_t |
typedef MVPrecisionType | dirac_mvprecision_t |
Enumerations | |
enum | dirac_encoder_state_t { ENC_STATE_INVALID = -1 , ENC_STATE_BUFFER , ENC_STATE_AVAIL , ENC_STATE_EOS } |
Functions | |
DllExport void | dirac_encoder_context_init (dirac_encoder_context_t *enc_ctx, dirac_encoder_presets_t preset) |
DllExport dirac_encoder_t * | dirac_encoder_init (const dirac_encoder_context_t *enc_ctx, int verbose) |
DllExport int | dirac_encoder_pts_offset (const dirac_encoder_t *encoder) |
DllExport int | dirac_encoder_load (dirac_encoder_t *encoder, unsigned char *uncdata, int uncdata_size) |
DllExport dirac_encoder_state_t | dirac_encoder_output (dirac_encoder_t *encoder) |
DllExport void | dirac_encoder_end_sequence (dirac_encoder_t *encoder) |
DllExport void | dirac_encoder_close (dirac_encoder_t *encoder) |
A set of 'C' functions that define the public interface to the Dirac encoder. Refer to the the reference encoder source code, encoder/encmain.cpp for an example of how to use the "C" interface. The pseudocode below gives a brief description of the "C" interface usage.
#include <libdirac_decoder/dirac_encoder.h> #define ENCBUF_SIZE 1024*1024; unsigned char *buffer, enc_buf[ENC_BUFSIZE]; int buffer_size; dirac_encoder_t *encoder; dirac_encoder_context_t enc_ctx; // Initialse the encoder context with the presets for SD576 - Standard // Definition Digital dirac_encoder_context_init (&enc_ctx, VIDEO_FORMAT_SD576I50); // Override parameters if required // interlace : 1 - interlaced; 0 - progressive enc_ctx.seq_params.interlace = 0; enc_ctx.seq_params.topfieldfirst = 0; enc_ctx.enc_params.qf = 7.5; // disable instrumentation flag enc_ctx.instr_flag = 0; // return locally decoded output enc_ctx.decode_flag = 1; // Initialise the encoder with the encoder context. // Setting verbose output to false encoder= dirac_encoder_init(&enc_ctx, false); // Set the buffer size. For SD576 4:2:0 chroma buffer_size = (720*576*3)/2; buffer = (unsigned char *)malloc (buffer_size); // Output buffer dirac_encoder_state_t state; int go = 1; do { read uncompressed frame data into buffer if (end of file) { // push end of sequence dirac_encoder_end_sequence(encoder); } // load one frame of data into encoder if (dirac_encoder_load(encoder, buffer, buffer_size) == 0) { // Retrieve encoded frames from encoder do { encoder->enc_buf.buffer = enc_buf; encoder->enc_buf.size = ENCBUF_SIZE; state = dirac_encoder_output (encoder); switch (state) { case ENC_STATE_AVAIL: // Encoded frame available in encoder->enc_buf // Encoded frame params available in enccoder->enc_fparams // Encoded frame stats available in enccoder->enc_fstats break; case ENC_STATE_BUFFER: break; case ENC_STATE_EOS: // Reached end of sequence // End of sequence information is available in encoder->enc_buf // Sequence statistics available in encoder->enc_seqstats; go = 0; // exit from the encoding loop break; case ENC_STATE_INVALID: default: // Unrecoverable error encountered. Exit; exit (exit code); } if (encoder->decoded_frame_avail) { //locally decoded frame is available in //encoder->dec_buf //locally decoded frame parameters available //in encoder->dec_fparams } if (encoder->instr_data_avail) { //Instrumentation data (motion vectors etc.) //available in encoder->instr } } while (state == ENC_STATE_AVAIL) } } while (go == 1); // Free the encoder resources dirac_encoder_close(encoder) // Free the uncompressed data buffer free (buffer);
typedef VideoFormat dirac_encoder_presets_t |
Enumerated type that defines encoder presets that set the encoder and sequence paramters. More presets may be added in future
typedef MVPrecisionType dirac_mvprecision_t |
Enumerated type that defines motion vector precisions supported by the encoder.
typedef PrefilterType dirac_prefilter_t |
Enumerated type that defines prefiltering types supported by the encoder.
|
extern |
|
extern |
Function that creates an encoder context based on a preset value. The values can then be overridden by the user by setting each field separately
enc_ctx | pointer to Encoder context tp be initialised. |
preset | Preset to be used to initialise the encoder context For a full list of video formats presets supported and the default values of the source and encoder parameters. refer to Annex C of the Dirac ByteStream Specification. |
References DllExport.
|
extern |
|
extern |
Initialise encoder. Makes a copy of the enc_ctx passed to it.
enc_ctx | Parameters to initialise encoder context |
verbose | boolean flag to set verbose output |
References DllExport.
|
extern |
Load uncompressed data into the encoder. Expects one full frame of data
encoder | Encoder Handle |
uncdata | Uncompressed data buffer |
uncdata_size | boolean flag to set verbose output |
References DllExport.
|
extern |
Retrieve an encoded frame from the encoder. Returns the state of the encoder. The encoder buffer enc_buf in the encodermust be set up with the buffer and buffer_size that will hold the encoded frame
encoder | Encoder Handle |
References DllExport.
|
extern |
Query the encoder for the reordering depth.
encoder | Encoder Handle |
References DllExport.
© 2004 British Broadcasting Corporation.
Dirac code licensed under the Mozilla Public License (MPL) Version 1.1.
HTML documentation generated by Dimitri van Heesch's
excellent Doxygen tool.