| Schroedinger Reference Manual | ||||
|---|---|---|---|---|
SchroFrame;
SchroFrameData;
void (*SchroFrameFreeFunc) (SchroFrame *frame,
void *priv);
enum SchroFrameFormat;
SchroUpsampledFrame;
#define SCHRO_FRAME_FORMAT_DEPTH (format)
#define SCHRO_FRAME_FORMAT_DEPTH_S16
#define SCHRO_FRAME_FORMAT_DEPTH_S32
#define SCHRO_FRAME_FORMAT_DEPTH_U8
#define SCHRO_FRAME_FORMAT_H_SHIFT (format)
#define SCHRO_FRAME_FORMAT_V_SHIFT (format)
#define SCHRO_FRAME_IS_PACKED (format)
#define SCHRO_FRAME_DATA_GET_LINE (fd,i)
#define SCHRO_FRAME_DATA_GET_PIXEL_S16 (fd,i,j)
#define SCHRO_FRAME_DATA_GET_PIXEL_U8 (fd,i,j)
SchroFrame* schro_frame_new (void);
SchroFrame* schro_frame_new_and_alloc (SchroMemoryDomain *domain,
SchroFrameFormat format,
int width,
int height);
SchroFrame* schro_frame_new_from_data_AYUV (void *data,
int width,
int height);
SchroFrame* schro_frame_new_from_data_I420 (void *data,
int width,
int height);
SchroFrame* schro_frame_new_from_data_YUY2 (void *data,
int width,
int height);
SchroFrame* schro_frame_dup (SchroFrame *frame);
SchroFrame* schro_frame_ref (SchroFrame *frame);
void schro_frame_unref (SchroFrame *frame);
void schro_frame_set_free_callback (SchroFrame *frame,
SchroFrameFreeFunc free_func,
void *priv);
SchroFrame* schro_frame_clone (SchroMemoryDomain *domain,
SchroFrame *frame);
void schro_frame_data_get_codeblock (SchroFrameData *dest,
SchroFrameData *src,
int x,
int y,
int horiz_codeblocks,
int vert_codeblocks);
int schro_frame_get_metric (SchroFrame *frame1,
int x1,
int y1,
SchroFrame *frame2,
int x2,
int y2);
void schro_frame_get_subdata (SchroFrame *frame,
SchroFrameData *fd,
int comp,
int x,
int y);
void schro_frame_inverse_iwt_transform_cuda
(SchroFrame *frame,
SchroFrame *transform_frame,
SchroParams *params);
SchroFrame* schro_frame_new_from_data_UYVY (void *data,
int width,
int height);
SchroFrame* schro_frame_new_from_data_YV12 (void *data,
int width,
int height);
void schro_frame_convert (SchroFrame *dest,
SchroFrame *src);
SchroFrame* schro_frame_convert_to_444 (SchroFrame *frame);
void schro_frame_add (SchroFrame *dest,
SchroFrame *src);
void schro_frame_subtract (SchroFrame *dest,
SchroFrame *src);
void schro_frame_shift_left (SchroFrame *frame,
int shift);
void schro_frame_shift_right (SchroFrame *frame,
int shift);
void schro_frame_edge_extend (SchroFrame *frame,
int width,
int height);
void schro_frame_zero_extend (SchroFrame *frame,
int width,
int height);
void schro_frame_iwt_transform (SchroFrame *frame,
SchroParams *params);
void schro_frame_inverse_iwt_transform (SchroFrame *frame,
SchroParams *params);
void schro_frame_downsample (SchroFrame *dest,
SchroFrame *src);
void schro_frame_mark (SchroFrame *frame,
int value);
void schro_frame_upsample_horiz (SchroFrame *dest,
SchroFrame *src);
void schro_frame_upsample_vert (SchroFrame *dest,
SchroFrame *src);
double schro_frame_ssim (SchroFrame *a,
SchroFrame *b);
void schro_frame_mean_squared_error (SchroFrame *a,
SchroFrame *b,
double *mse);
void schro_frame_md5 (SchroFrame *frame,
uint32_t *state);
double schro_frame_calculate_average_luma (SchroFrame *frame);
void schro_upsampled_frame_free (SchroUpsampledFrame *df);
SchroUpsampledFrame* schro_upsampled_frame_new (SchroFrame *frame);
void schro_upsampled_frame_upsample (SchroUpsampledFrame *df);
void schro_upsampled_frame_get_block_fast_precN
(SchroUpsampledFrame *upframe,
int k,
int x,
int y,
int prec,
SchroFrameData *dest,
SchroFrameData *fd);
void schro_upsampled_frame_get_block_precN
(SchroUpsampledFrame *upframe,
int k,
int x,
int y,
int prec,
SchroFrameData *dest);
int schro_upsampled_frame_get_pixel_prec0
(SchroUpsampledFrame *upframe,
int k,
int x,
int y);
int schro_upsampled_frame_get_pixel_prec1
(SchroUpsampledFrame *upframe,
int k,
int x,
int y);
int schro_upsampled_frame_get_pixel_prec3
(SchroUpsampledFrame *upframe,
int k,
int x,
int y);
int schro_upsampled_frame_get_pixel_precN
(SchroUpsampledFrame *upframe,
int k,
int x,
int y,
int mv_precision);
typedef struct {
int refcount;
SchroFrameFreeFunc free;
SchroMemoryDomain *domain;
void *regions[3];
void *priv;
SchroFrameFormat format;
int width;
int height;
SchroFrameData components[3];
int is_virtual;
int cached_lines[3][SCHRO_FRAME_CACHE_SIZE];
SchroFrame *virt_frame1;
SchroFrame *virt_frame2;
void (*render_line) (SchroFrame *frame, void *dest, int component, int i);
void *virt_priv;
void *virt_priv2;
int extension;
} SchroFrame;
typedef struct {
SchroFrameFormat format;
void *data;
int stride;
int width;
int height;
int length;
int h_shift;
int v_shift;
} SchroFrameData;
typedef enum _SchroFrameFormat {
SCHRO_FRAME_FORMAT_U8_444 = 0x00,
SCHRO_FRAME_FORMAT_U8_422 = 0x01,
SCHRO_FRAME_FORMAT_U8_420 = 0x03,
SCHRO_FRAME_FORMAT_S16_444 = 0x04,
SCHRO_FRAME_FORMAT_S16_422 = 0x05,
SCHRO_FRAME_FORMAT_S16_420 = 0x07,
SCHRO_FRAME_FORMAT_S32_444 = 0x08,
SCHRO_FRAME_FORMAT_S32_422 = 0x09,
SCHRO_FRAME_FORMAT_S32_420 = 0x0b,
/* indirectly supported */
SCHRO_FRAME_FORMAT_YUYV = 0x100, /* YUYV order */
SCHRO_FRAME_FORMAT_UYVY = 0x101, /* UYVY order */
SCHRO_FRAME_FORMAT_AYUV = 0x102,
SCHRO_FRAME_FORMAT_ARGB = 0x103,
SCHRO_FRAME_FORMAT_RGB = 0x104,
SCHRO_FRAME_FORMAT_v216 = 0x105,
SCHRO_FRAME_FORMAT_v210 = 0x106
} SchroFrameFormat;
typedef struct {
SchroFrame *frames[4];
void *components[3];
} SchroUpsampledFrame;
#define SCHRO_FRAME_FORMAT_V_SHIFT(format) (((format)>>1) & 0x1)
|
#define SCHRO_FRAME_DATA_GET_LINE(fd,i) (SCHRO_OFFSET((fd)->data,(fd)->stride*(i)))
|
|
|
#define SCHRO_FRAME_DATA_GET_PIXEL_S16(fd,i,j) ((int16_t *)SCHRO_OFFSET((fd)->data,(fd)->stride*(j)+(i)*sizeof(int16_t)))
|
|
|
|
|
#define SCHRO_FRAME_DATA_GET_PIXEL_U8(fd,i,j) ((uint8_t *)SCHRO_OFFSET((fd)->data,(fd)->stride*(j)+(i)))
|
|
|
|
|
SchroFrame* schro_frame_new (void);
Creates a new SchroFrame object. The created frame is uninitialized and has no data storage associated with it. The caller must fill in the required information.
Returns : |
a new SchroFrame object |
SchroFrame* schro_frame_new_and_alloc (SchroMemoryDomain *domain, SchroFrameFormat format, int width, int height);
Creates a new SchroFrame object with the requested size and format.
|
|
|
|
|
|
|
|
Returns : |
a new SchroFrame object |
SchroFrame* schro_frame_new_from_data_AYUV (void *data, int width, int height);
Creates a new SchroFrame object with the requested size using
the data pointed to by data. The data must be in AYUV format.
The data must remain for the lifetime of the SchroFrame object.
It is recommended to use schro_frame_set_free_callback() for
notification when the data is no longer needed.
|
|
|
|
|
|
Returns : |
a new SchroFrame object |
SchroFrame* schro_frame_new_from_data_I420 (void *data, int width, int height);
Creates a new SchroFrame object with the requested size using
the data pointed to by data. The data must be in I420 format.
The data must remain for the lifetime of the SchroFrame object.
It is recommended to use schro_frame_set_free_callback() for
notification when the data is no longer needed.
|
|
|
|
|
|
Returns : |
a new SchroFrame object |
SchroFrame* schro_frame_new_from_data_YUY2 (void *data, int width, int height);
Creates a new SchroFrame object with the requested size using
the data pointed to by data. The data must be in UYVY format,
although the row stride is allowed to be different than what
would normally be calculated from width.
The data must remain for the lifetime of the SchroFrame object.
It is recommended to use schro_frame_set_free_callback() for
notification when the data is no longer needed.
|
|
|
|
|
|
Returns : |
a new SchroFrame object |
SchroFrame* schro_frame_dup (SchroFrame *frame);
Creates a new SchroFrame object with the same dimensions and format
as frame, and copies the data from the frame to the new object.
|
|
Returns : |
a new SchroFrame object |
SchroFrame* schro_frame_ref (SchroFrame *frame);
Increases the reference count of frame.
|
a frame object |
Returns : |
the value of frame
|
void schro_frame_unref (SchroFrame *frame);
Decreases the reference count of frame. If the new reference
count is 0, the frame is freed. If a frame free callback was
set, this function is called.
|
a frame object |
void schro_frame_set_free_callback (SchroFrame *frame, SchroFrameFreeFunc free_func, void *priv);
Sets a function that will be called when the object reference count drops to zero and the object is freed.
|
a frame object |
|
the function to call when the frame is freed |
|
callback key |
SchroFrame* schro_frame_clone (SchroMemoryDomain *domain, SchroFrame *frame);
Creates a new SchroFrame object with the same dimensions and format
as frame. This function leaves the data in the new object
uninitialized.
|
|
|
|
Returns : |
a new SchroFrame object |
void schro_frame_data_get_codeblock (SchroFrameData *dest, SchroFrameData *src, int x, int y, int horiz_codeblocks, int vert_codeblocks);
|
|
|
|
|
|
|
|
|
|
|
int schro_frame_get_metric (SchroFrame *frame1, int x1, int y1, SchroFrame *frame2, int x2, int y2);
|
|
|
|
|
|
|
|
|
|
|
|
Returns : |
void schro_frame_get_subdata (SchroFrame *frame, SchroFrameData *fd, int comp, int x, int y);
|
|
|
|
|
|
|
|
|
void schro_frame_inverse_iwt_transform_cuda
(SchroFrame *frame,
SchroFrame *transform_frame,
SchroParams *params);
|
|
|
|
|
SchroFrame* schro_frame_new_from_data_UYVY (void *data, int width, int height);
|
|
|
|
|
|
Returns : |
SchroFrame* schro_frame_new_from_data_YV12 (void *data, int width, int height);
Creates a new SchroFrame object with the requested size using
the data pointed to by data. The data must be in YV12 format.
The data must remain for the lifetime of the SchroFrame object.
It is recommended to use schro_frame_set_free_callback() for
notification when the data is no longer needed.
|
|
|
|
|
|
Returns : |
a new SchroFrame object |
void schro_frame_convert (SchroFrame *dest, SchroFrame *src);
Copies data from the source frame to the destination frame, converting formats if necessary. Only a few conversions are supported.
|
destination frame |
|
source frame |
SchroFrame* schro_frame_convert_to_444 (SchroFrame *frame);
|
|
Returns : |
void schro_frame_add (SchroFrame *dest, SchroFrame *src);
Adds data from the source frame to the destination frame. The frames must have the same chroma subsampling, and only a few combinations of bit depths are supported.
|
destination frame |
|
source frame |
void schro_frame_subtract (SchroFrame *dest, SchroFrame *src);
Subtracts data from the source frame to the destination frame. The frames must have the same chroma subsampling, and only a few combinations of bit depths are supported.
|
destination frame |
|
source frame |
void schro_frame_shift_left (SchroFrame *frame, int shift);
Shifts each value in frame to the left by shift bits. This
operation happens in-place.
|
frame |
|
number of bits to shift |
void schro_frame_shift_right (SchroFrame *frame, int shift);
Shifts each value in frame to the right by shift bits. This
operation happens in-place.
|
frame |
|
number of bits to shift |
void schro_frame_edge_extend (SchroFrame *frame, int width, int height);
Extends the edges of the subpicture defined from 0,0 to width,height
to the size of frame.
|
frame |
|
width of subpicture |
|
height of subpicture |
void schro_frame_zero_extend (SchroFrame *frame, int width, int height);
|
|
|
|
|
void schro_frame_iwt_transform (SchroFrame *frame, SchroParams *params);
Performs an in-place integer wavelet transform on frame. The
frame must have a bit depth of 16.
|
frame |
|
transform parameters |
void schro_frame_inverse_iwt_transform (SchroFrame *frame, SchroParams *params);
Performs an in-place inverse integer wavelet transform on frame. The
frame must have a bit depth of 16.
|
frame |
|
transform parameters |
void schro_frame_downsample (SchroFrame *dest, SchroFrame *src);
|
|
|
void schro_frame_upsample_horiz (SchroFrame *dest, SchroFrame *src);
|
|
|
void schro_frame_upsample_vert (SchroFrame *dest, SchroFrame *src);
|
|
|
void schro_frame_mean_squared_error (SchroFrame *a, SchroFrame *b, double *mse);
|
|
|
|
|
double schro_frame_calculate_average_luma (SchroFrame *frame);
|
|
Returns : |
SchroUpsampledFrame* schro_upsampled_frame_new (SchroFrame *frame);
|
|
Returns : |
void schro_upsampled_frame_upsample (SchroUpsampledFrame *df);
|
void schro_upsampled_frame_get_block_fast_precN
(SchroUpsampledFrame *upframe,
int k,
int x,
int y,
int prec,
SchroFrameData *dest,
SchroFrameData *fd);
|
|
|
|
|
|
|
|
|
|
|
|
|
void schro_upsampled_frame_get_block_precN
(SchroUpsampledFrame *upframe,
int k,
int x,
int y,
int prec,
SchroFrameData *dest);
|
|
|
|
|
|
|
|
|
|
|
int schro_upsampled_frame_get_pixel_prec0
(SchroUpsampledFrame *upframe,
int k,
int x,
int y);
|
|
|
|
|
|
|
|
Returns : |
int schro_upsampled_frame_get_pixel_prec1
(SchroUpsampledFrame *upframe,
int k,
int x,
int y);
|
|
|
|
|
|
|
|
Returns : |
int schro_upsampled_frame_get_pixel_prec3
(SchroUpsampledFrame *upframe,
int k,
int x,
int y);
|
|
|
|
|
|
|
|
Returns : |
int schro_upsampled_frame_get_pixel_precN
(SchroUpsampledFrame *upframe,
int k,
int x,
int y,
int mv_precision);
|
|
|
|
|
|
|
|
|
|
Returns : |