schroencoder

schroencoder

Synopsis

struct              SchroEncoder;
struct              SchroEncoderFrame;
enum                SchroEncoderFrameStateEnum;
enum                SchroEncoderPerceptualEnum;
enum                SchroQuantiserEngineEnum;
enum                SchroStateEnum;
enum                SchroEncoderGOPEnum;
enum                SchroEncoderRateControlEnum;
struct              SchroEncoderSetting;
enum                SchroEncoderSettingTypeEnum;
int                 (*SchroEngineIterateFunc)           (SchroEncoder *encoder);
SchroEncoder *      schro_encoder_new                   (void);
void                schro_encoder_free                  (SchroEncoder *encoder);
SchroVideoFormat *  schro_encoder_get_video_format      (SchroEncoder *encoder);
void                schro_encoder_set_video_format      (SchroEncoder *encoder,
                                                         SchroVideoFormat *video_format);
void                schro_encoder_end_of_stream         (SchroEncoder *encoder);
void                schro_encoder_push_frame            (SchroEncoder *encoder,
                                                         SchroFrame *frame);
void                schro_encoder_encode_parse_info     (SchroPack *bits,
                                                         int parse_code);
SchroBuffer *       schro_encoder_pull                  (SchroEncoder *encoder,
                                                         int *n_decodable_frames);
void                schro_encoder_analyse_picture       (SchroAsyncStage *stage);
void                schro_encoder_calculate_subband_weights
                                                        (SchroEncoder *encoder,
                                                         double (*perceptual_weight) (double));
void                schro_encoder_calculate_test_info   (SchroEncoderFrame *frame);
void                schro_encoder_choose_quantisers     (SchroEncoderFrame *frame);
void                schro_encoder_clean_up_transform    (SchroEncoderFrame *frame);
SchroBuffer *       schro_encoder_encode_auxiliary_data (SchroEncoder *encoder,
                                                         SchroAuxiliaryDataID id,
                                                         const void *data,
                                                         int size);
SchroBuffer *       schro_encoder_encode_end_of_stream  (SchroEncoder *encoder);
void                schro_encoder_encode_lowdelay_transform_data
                                                        (SchroEncoderFrame *frame);
void                schro_encoder_encode_picture        (SchroAsyncStage *stage);
void                schro_encoder_encode_picture_header (SchroEncoderFrame *frame);
void                schro_encoder_encode_subband        (SchroEncoderFrame *frame,
                                                         int component,
                                                         int index);
void                schro_encoder_encode_subband_noarith
                                                        (SchroEncoderFrame *frame,
                                                         int component,
                                                         int index);
int                 schro_encoder_engine_backref        (SchroEncoder *encoder);
int                 schro_encoder_engine_backtest       (SchroEncoder *encoder);
int                 schro_encoder_engine_intra_only     (SchroEncoder *encoder);
int                 schro_encoder_engine_lossless       (SchroEncoder *encoder);
int                 schro_encoder_engine_lowdelay       (SchroEncoder *encoder);
int                 schro_encoder_engine_test_intra     (SchroEncoder *encoder);
void                schro_encoder_estimate_entropy      (SchroEncoderFrame *frame);
void                schro_encoder_frame_analyse         (SchroEncoderFrame *frame);
void                schro_encoder_frame_downsample      (SchroEncoderFrame *frame);
void                schro_encoder_frame_insert_buffer   (SchroEncoderFrame *frame,
                                                         SchroBuffer *buffer);
SchroEncoderFrame * schro_encoder_frame_new             (SchroEncoder *encoder);
SchroFrame *        schro_encoder_frame_queue_get       (SchroEncoder *encoder,
                                                         SchroPictureNumber frame_number);
void                schro_encoder_frame_queue_remove    (SchroEncoder *encoder,
                                                         SchroPictureNumber frame_number);
void                schro_encoder_frame_ref             (SchroEncoderFrame *frame);
void                schro_encoder_frame_unref           (SchroEncoderFrame *frame);
void                schro_encoder_init_subbands         (SchroEncoderFrame *frame);
void                schro_encoder_insert_buffer         (SchroEncoder *encoder,
                                                         SchroBuffer *buffer);
void                schro_encoder_output_push           (SchroEncoder *encoder,
                                                         SchroBuffer *buffer,
                                                         int slot,
                                                         int presentation_frame);
double              schro_encoder_perceptual_weight_ccir959
                                                        (double cpd);
double              schro_encoder_perceptual_weight_constant
                                                        (double cpd);
double              schro_encoder_perceptual_weight_moo (double cpd);
void                schro_encoder_postanalyse_picture   (SchroAsyncStage *stage);
int                 schro_encoder_push_ready            (SchroEncoder *encoder);
void                schro_encoder_recalculate_allocations
                                                        (SchroEncoder *encoder);
void                schro_encoder_reconstruct_picture   (SchroAsyncStage *stage);
SchroEncoderFrame * schro_encoder_reference_get         (SchroEncoder *encoder,
                                                         SchroPictureNumber frame_number);
void                schro_encoder_set_default_subband_weights
                                                        (SchroEncoder *encoder);
void                schro_encoder_start                 (SchroEncoder *encoder);
SchroStateEnum      schro_encoder_wait                  (SchroEncoder *encoder);
int                 schro_encoder_get_n_settings        (void);
const SchroEncoderSetting * schro_encoder_get_setting_info
                                                        (int i);
void                schro_encoder_global_estimation     (SchroEncoderFrame *frame);
void                schro_encoder_init_error_tables     (SchroEncoder *encoder);
void                schro_encoder_phasecorr_estimation  (SchroPhaseCorr *pc);
double              schro_encoder_setting_get_double    (SchroEncoder *encoder,
                                                         const char *name);
void                schro_encoder_setting_set_double    (SchroEncoder *encoder,
                                                         const char *name,
                                                         double d);

Description

Details

struct SchroEncoder

struct SchroEncoder {
};


struct SchroEncoderFrame

struct SchroEncoderFrame {
};


enum SchroEncoderFrameStateEnum

typedef enum {
  SCHRO_ENCODER_FRAME_STAGE_NEW = 0,
  SCHRO_ENCODER_FRAME_STAGE_ANALYSE,
  SCHRO_ENCODER_FRAME_STAGE_SC_DETECT_1,
  SCHRO_ENCODER_FRAME_STAGE_SC_DETECT_2,
  SCHRO_ENCODER_FRAME_STAGE_HAVE_GOP,
  SCHRO_ENCODER_FRAME_STAGE_HAVE_PARAMS,
  SCHRO_ENCODER_FRAME_STAGE_PREDICT_ROUGH,
  SCHRO_ENCODER_FRAME_STAGE_PREDICT_PEL,
  SCHRO_ENCODER_FRAME_STAGE_PREDICT_SUBPEL,
  SCHRO_ENCODER_FRAME_STAGE_MODE_DECISION,
  SCHRO_ENCODER_FRAME_STAGE_HAVE_REFS,
  SCHRO_ENCODER_FRAME_STAGE_HAVE_QUANTS,
  SCHRO_ENCODER_FRAME_STAGE_ENCODING,
  SCHRO_ENCODER_FRAME_STAGE_RECONSTRUCT,
  SCHRO_ENCODER_FRAME_STAGE_POSTANALYSE,
  SCHRO_ENCODER_FRAME_STAGE_DONE,
  SCHRO_ENCODER_FRAME_STAGE_FREE,
  SCHRO_ENCODER_FRAME_STAGE_LAST /* this should be last */
} SchroEncoderFrameStateEnum;


enum SchroEncoderPerceptualEnum

typedef enum {
  SCHRO_ENCODER_PERCEPTUAL_CONSTANT,
  SCHRO_ENCODER_PERCEPTUAL_CCIR959,
  SCHRO_ENCODER_PERCEPTUAL_MOO,
  SCHRO_ENCODER_PERCEPTUAL_MANOS_SAKRISON
} SchroEncoderPerceptualEnum;


enum SchroQuantiserEngineEnum

typedef enum {
  SCHRO_QUANTISER_ENGINE_SIMPLE,
  SCHRO_QUANTISER_ENGINE_RDO_BIT_ALLOCATION,
  SCHRO_QUANTISER_ENGINE_CBR,
  SCHRO_QUANTISER_ENGINE_LOSSLESS,
  SCHRO_QUANTISER_ENGINE_LOWDELAY,
  SCHRO_QUANTISER_ENGINE_RDO_LAMBDA,
  SCHRO_QUANTISER_ENGINE_CONSTANT_ERROR
} SchroQuantiserEngineEnum;


enum SchroStateEnum

typedef enum {
  SCHRO_STATE_NEED_FRAME,
  SCHRO_STATE_HAVE_BUFFER,
  SCHRO_STATE_AGAIN,
  SCHRO_STATE_END_OF_STREAM
} SchroStateEnum;


enum SchroEncoderGOPEnum

typedef enum {
  SCHRO_ENCODER_GOP_ADAPTIVE,
  SCHRO_ENCODER_GOP_INTRA_ONLY,
  SCHRO_ENCODER_GOP_BACKREF,
  SCHRO_ENCODER_GOP_CHAINED_BACKREF,
  SCHRO_ENCODER_GOP_BIREF,
  SCHRO_ENCODER_GOP_CHAINED_BIREF,
} SchroEncoderGOPEnum;


enum SchroEncoderRateControlEnum

typedef enum {
  SCHRO_ENCODER_RATE_CONTROL_CONSTANT_NOISE_THRESHOLD,
  SCHRO_ENCODER_RATE_CONTROL_CONSTANT_BITRATE,
  SCHRO_ENCODER_RATE_CONTROL_LOW_DELAY,
  SCHRO_ENCODER_RATE_CONTROL_LOSSLESS,
  SCHRO_ENCODER_RATE_CONTROL_CONSTANT_LAMBDA,
  SCHRO_ENCODER_RATE_CONTROL_CONSTANT_ERROR,
  SCHRO_ENCODER_RATE_CONTROL_CONSTANT_QUALITY
} SchroEncoderRateControlEnum;


struct SchroEncoderSetting

struct SchroEncoderSetting {
  const char *name;
  SchroEncoderSettingTypeEnum type;

  double min;
  double max;
  double default_value;

  const char **enum_list;
};


enum SchroEncoderSettingTypeEnum

typedef enum {
  SCHRO_ENCODER_SETTING_TYPE_BOOLEAN,
  SCHRO_ENCODER_SETTING_TYPE_INT,
  SCHRO_ENCODER_SETTING_TYPE_ENUM,
  SCHRO_ENCODER_SETTING_TYPE_DOUBLE,
  SCHRO_ENCODER_SETTING_TYPE_LAST
} SchroEncoderSettingTypeEnum;


SchroEngineIterateFunc ()

int                 (*SchroEngineIterateFunc)           (SchroEncoder *encoder);


schro_encoder_new ()

SchroEncoder *      schro_encoder_new                   (void);

Create a new encoder object.

Returns :

a new encoder object

schro_encoder_free ()

void                schro_encoder_free                  (SchroEncoder *encoder);

Frees an encoder object and all its resources.

encoder :

an encoder object

schro_encoder_get_video_format ()

SchroVideoFormat *  schro_encoder_get_video_format      (SchroEncoder *encoder);

Creates a new SchroVideoFormat structure and copies the video format information of decoder into it.

When no longer needed, the returned pointer should be freed using free().

encoder :

an encoder object

Returns :

a pointer to a SchroVideoFormat structure

schro_encoder_set_video_format ()

void                schro_encoder_set_video_format      (SchroEncoder *encoder,
                                                         SchroVideoFormat *video_format);

Sets the video format used by encoder to the values specified in format. This function may only be called before schro_encoder_start() is called on the encoder.

encoder :

an encoder object

schro_encoder_end_of_stream ()

void                schro_encoder_end_of_stream         (SchroEncoder *encoder);

Tells the encoder that the end of the stream has been reached, and no more frames are available to encode. The encoder will then finish encoding.

encoder :

an encoder object

schro_encoder_push_frame ()

void                schro_encoder_push_frame            (SchroEncoder *encoder,
                                                         SchroFrame *frame);

Provides a frame to the encoder to encode.

encoder :

an encoder object

frame :

a frame to encode

schro_encoder_encode_parse_info ()

void                schro_encoder_encode_parse_info     (SchroPack *bits,
                                                         int parse_code);


schro_encoder_pull ()

SchroBuffer *       schro_encoder_pull                  (SchroEncoder *encoder,
                                                         int *n_decodable_frames);

Pulls a buffer of compressed video from the encoder. If presentation_frame is not NULL, the frame number of the latest decodable frame is returned.

encoder :

an encoder object

Returns :

a buffer containing compressed video

schro_encoder_analyse_picture ()

void                schro_encoder_analyse_picture       (SchroAsyncStage *stage);


schro_encoder_calculate_subband_weights ()

void                schro_encoder_calculate_subband_weights
                                                        (SchroEncoder *encoder,
                                                         double (*perceptual_weight) (double));


schro_encoder_calculate_test_info ()

void                schro_encoder_calculate_test_info   (SchroEncoderFrame *frame);


schro_encoder_choose_quantisers ()

void                schro_encoder_choose_quantisers     (SchroEncoderFrame *frame);


schro_encoder_clean_up_transform ()

void                schro_encoder_clean_up_transform    (SchroEncoderFrame *frame);


schro_encoder_encode_auxiliary_data ()

SchroBuffer *       schro_encoder_encode_auxiliary_data (SchroEncoder *encoder,
                                                         SchroAuxiliaryDataID id,
                                                         const void *data,
                                                         int size);

Packs data into a Dirac auxiliary data packet.

Returns :

a buffer

schro_encoder_encode_end_of_stream ()

SchroBuffer *       schro_encoder_encode_end_of_stream  (SchroEncoder *encoder);

Creates an end-of-stream packet.

Returns :

a buffer

schro_encoder_encode_lowdelay_transform_data ()

void                schro_encoder_encode_lowdelay_transform_data
                                                        (SchroEncoderFrame *frame);


schro_encoder_encode_picture ()

void                schro_encoder_encode_picture        (SchroAsyncStage *stage);


schro_encoder_encode_picture_header ()

void                schro_encoder_encode_picture_header (SchroEncoderFrame *frame);


schro_encoder_encode_subband ()

void                schro_encoder_encode_subband        (SchroEncoderFrame *frame,
                                                         int component,
                                                         int index);


schro_encoder_encode_subband_noarith ()

void                schro_encoder_encode_subband_noarith
                                                        (SchroEncoderFrame *frame,
                                                         int component,
                                                         int index);


schro_encoder_engine_backref ()

int                 schro_encoder_engine_backref        (SchroEncoder *encoder);


schro_encoder_engine_backtest ()

int                 schro_encoder_engine_backtest       (SchroEncoder *encoder);


schro_encoder_engine_intra_only ()

int                 schro_encoder_engine_intra_only     (SchroEncoder *encoder);


schro_encoder_engine_lossless ()

int                 schro_encoder_engine_lossless       (SchroEncoder *encoder);


schro_encoder_engine_lowdelay ()

int                 schro_encoder_engine_lowdelay       (SchroEncoder *encoder);


schro_encoder_engine_test_intra ()

int                 schro_encoder_engine_test_intra     (SchroEncoder *encoder);


schro_encoder_estimate_entropy ()

void                schro_encoder_estimate_entropy      (SchroEncoderFrame *frame);


schro_encoder_frame_analyse ()

void                schro_encoder_frame_analyse         (SchroEncoderFrame *frame);


schro_encoder_frame_downsample ()

void                schro_encoder_frame_downsample      (SchroEncoderFrame *frame);


schro_encoder_frame_insert_buffer ()

void                schro_encoder_frame_insert_buffer   (SchroEncoderFrame *frame,
                                                         SchroBuffer *buffer);

Inserts a buffer into an encoder frame.

frame :

an encoder frame

buffer :

a buffer

schro_encoder_frame_new ()

SchroEncoderFrame * schro_encoder_frame_new             (SchroEncoder *encoder);


schro_encoder_frame_queue_get ()

SchroFrame *        schro_encoder_frame_queue_get       (SchroEncoder *encoder,
                                                         SchroPictureNumber frame_number);


schro_encoder_frame_queue_remove ()

void                schro_encoder_frame_queue_remove    (SchroEncoder *encoder,
                                                         SchroPictureNumber frame_number);


schro_encoder_frame_ref ()

void                schro_encoder_frame_ref             (SchroEncoderFrame *frame);


schro_encoder_frame_unref ()

void                schro_encoder_frame_unref           (SchroEncoderFrame *frame);


schro_encoder_init_subbands ()

void                schro_encoder_init_subbands         (SchroEncoderFrame *frame);


schro_encoder_insert_buffer ()

void                schro_encoder_insert_buffer         (SchroEncoder *encoder,
                                                         SchroBuffer *buffer);

Inserts an application-provided buffer into the encoded video stream with the next frame that is pushed.

encoder :

an encoder object

buffer :

a buffer

schro_encoder_output_push ()

void                schro_encoder_output_push           (SchroEncoder *encoder,
                                                         SchroBuffer *buffer,
                                                         int slot,
                                                         int presentation_frame);


schro_encoder_perceptual_weight_ccir959 ()

double              schro_encoder_perceptual_weight_ccir959
                                                        (double cpd);


schro_encoder_perceptual_weight_constant ()

double              schro_encoder_perceptual_weight_constant
                                                        (double cpd);


schro_encoder_perceptual_weight_moo ()

double              schro_encoder_perceptual_weight_moo (double cpd);


schro_encoder_postanalyse_picture ()

void                schro_encoder_postanalyse_picture   (SchroAsyncStage *stage);


schro_encoder_push_ready ()

int                 schro_encoder_push_ready            (SchroEncoder *encoder);

Returns true if the encoder has available space for additional video frames.

encoder :

an encoder object

Returns :

TRUE if the encoder is ready for another video frame to be pushed.

schro_encoder_recalculate_allocations ()

void                schro_encoder_recalculate_allocations
                                                        (SchroEncoder *encoder);


schro_encoder_reconstruct_picture ()

void                schro_encoder_reconstruct_picture   (SchroAsyncStage *stage);


schro_encoder_reference_get ()

SchroEncoderFrame * schro_encoder_reference_get         (SchroEncoder *encoder,
                                                         SchroPictureNumber frame_number);


schro_encoder_set_default_subband_weights ()

void                schro_encoder_set_default_subband_weights
                                                        (SchroEncoder *encoder);


schro_encoder_start ()

void                schro_encoder_start                 (SchroEncoder *encoder);

Locks in encoder configuration and causes the encoder to start encoding pictures. At this point, the encoder will start worker threads to do the actual encoding.

encoder :

an encoder object

schro_encoder_wait ()

SchroStateEnum      schro_encoder_wait                  (SchroEncoder *encoder);

Checks the state of the encoder. If the encoder requires the application to do something, an appropriate state code is returned. Otherwise, this function waits until the encoder requires the application to do something.

encoder :

an encoder object

Returns :

a state code

schro_encoder_get_n_settings ()

int                 schro_encoder_get_n_settings        (void);


schro_encoder_get_setting_info ()

const SchroEncoderSetting * schro_encoder_get_setting_info
                                                        (int i);


schro_encoder_global_estimation ()

void                schro_encoder_global_estimation     (SchroEncoderFrame *frame);


schro_encoder_init_error_tables ()

void                schro_encoder_init_error_tables     (SchroEncoder *encoder);


schro_encoder_phasecorr_estimation ()

void                schro_encoder_phasecorr_estimation  (SchroPhaseCorr *pc);


schro_encoder_setting_get_double ()

double              schro_encoder_setting_get_double    (SchroEncoder *encoder,
                                                         const char *name);

encoder :

an encoder object

Returns :

the current value of an encoder option given by name

schro_encoder_setting_set_double ()

void                schro_encoder_setting_set_double    (SchroEncoder *encoder,
                                                         const char *name,
                                                         double d);

set the encoder option given by name to value.

encoder :

an encoder object