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;

SCHRO_ENCODER_FRAME_STAGE_NEW

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


enum SchroEncoderPerceptualEnum

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

SCHRO_ENCODER_PERCEPTUAL_CONSTANT

SCHRO_ENCODER_PERCEPTUAL_CCIR959

SCHRO_ENCODER_PERCEPTUAL_MOO

SCHRO_ENCODER_PERCEPTUAL_MANOS_SAKRISON


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;

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


enum SchroStateEnum

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

SCHRO_STATE_NEED_FRAME

SCHRO_STATE_HAVE_BUFFER

SCHRO_STATE_AGAIN

SCHRO_STATE_END_OF_STREAM


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;

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


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;

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


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;

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


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