Schroedinger Reference Manual | ||||
---|---|---|---|---|
Top | Description |
struct SchroFrame; struct SchroFrameData; void (*SchroFrameFreeFunc) (SchroFrame *frame
,void *priv
); enum SchroFrameFormat; struct 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_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
);
struct SchroFrame { 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; int cache_offset[3]; int is_upsampled; };
struct SchroFrameData { SchroFrameFormat format; void *data; int stride; int width; int height; int length; int h_shift; int v_shift; };
typedef enum { 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, SCHRO_FRAME_FORMAT_AY64 = 0x107 } SchroFrameFormat;
#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 YUY2 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_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
);
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
);
Creates a new SchroFrame object with the requested size using
the data pointed to by data
. The data must be in UYVY 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_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 |
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_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_mean_squared_error (SchroFrame *a
,SchroFrame *b
,double *mse
);
double schro_frame_calculate_average_luma (SchroFrame *frame
);
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
);