23#ifndef GAVLDSP_H_INCLUDED
24#define GAVLDSP_H_INCLUDED
26#include <gavl/gavldefs.h>
69 int (*
sad_rgb15)(
const uint8_t * src_1,
const uint8_t * src_2,
70 int stride_1,
int stride_2,
86 int (*
sad_rgb16)(
const uint8_t * src_1,
const uint8_t * src_2,
87 int stride_1,
int stride_2,
100 int (*
sad_8)(
const uint8_t * src_1,
const uint8_t * src_2,
101 int stride_1,
int stride_2,
114 int (*
sad_16)(
const uint8_t * src_1,
const uint8_t * src_2,
115 int stride_1,
int stride_2,
127 float (*
sad_f)(
const uint8_t * src_1,
const uint8_t * src_2,
128 int stride_1,
int stride_2,
139 uint8_t * dst,
int num);
148 uint8_t * dst,
int num);
156 void (*
average_8)(
const uint8_t * src_1,
const uint8_t * src_2,
157 uint8_t * dst,
int num);
165 void (*
average_16)(
const uint8_t * src_1,
const uint8_t * src_2,
166 uint8_t * dst,
int num);
175 void (*
average_f)(
const uint8_t * src_1,
const uint8_t * src_2,
176 uint8_t * dst,
int num);
190 uint8_t * dst,
int num, float);
202 uint8_t * dst,
int num,
float fac);
214 uint8_t * dst,
int num,
float fac);
226 uint8_t * dst,
int num,
float fac);
239 uint8_t * dst,
int num,
float fac);
268 void (*
add_u8)(
const void * src1,
const void * src2,
void * dst,
int num);
278 void (*
add_u8_s)(
const void * src1,
const void * src2,
void * dst,
int num);
288 void (*
add_s8)(
const void * src1,
const void * src2,
void * dst,
int num);
298 void (*
add_u16)(
const void * src1,
const void * src2,
void * dst,
int num);
308 void (*
add_u16_s)(
const void * src1,
const void * src2,
void * dst,
int num);
318 void (*
add_s16)(
const void * src1,
const void * src2,
void * dst,
int num);
328 void (*
add_s32)(
const void * src1,
const void * src2,
void * dst,
int num);
338 void (*
add_float)(
const void * src1,
const void * src2,
void * dst,
int num);
348 void (*
add_double)(
const void * src1,
const void * src2,
void * dst,
int num);
359 void (*
sub_u8)(
const void * src1,
const void * src2,
void * dst,
int num);
369 void (*
sub_u8_s)(
const void * src1,
const void * src2,
void * dst,
int num);
379 void (*
sub_s8)(
const void * src1,
const void * src2,
void * dst,
int num);
389 void (*
sub_u16)(
const void * src1,
const void * src2,
void * dst,
int num);
399 void (*
sub_u16_s)(
const void * src1,
const void * src2,
void * dst,
int num);
409 void (*
sub_s16)(
const void * src1,
const void * src2,
void * dst,
int num);
419 void (*
sub_s32)(
const void * src1,
const void * src2,
void * dst,
int num);
429 void (*
sub_float)(
const void * src1,
const void * src2,
void * dst,
int num);
439 void (*
sub_double)(
const void * src1,
const void * src2,
void * dst,
int num);
477 void (*
shuffle_8_4)(
void * dst,
const void * src,
int num,
int * indices);
485 void (*
shuffle_16_4)(
void * dst,
const void * src,
int num,
int * indices);
577 gavl_video_frame_t * src_1,
578 gavl_video_frame_t * src_2,
579 gavl_video_frame_t * dst,
619 gavl_video_frame_t * frame,
639 gavl_video_frame_t * frame,
645 gavl_video_frame_t * dst,
646 const gavl_video_frame_t * src,
655 gavl_video_frame_t * dst,
656 const gavl_video_frame_t * src,
GAVL_PUBLIC void gavl_dsp_context_destroy(gavl_dsp_context_t *ctx)
Destroy a DSP context.
GAVL_PUBLIC void gavl_dsp_context_set_quality(gavl_dsp_context_t *ctx, int q)
Set the quality for a DSP context.
GAVL_PUBLIC gavl_dsp_funcs_t * gavl_dsp_context_get_funcs(gavl_dsp_context_t *ctx)
Get the functions.
GAVL_PUBLIC gavl_dsp_context_t * gavl_dsp_context_create(void)
Create a DSP context.
GAVL_PUBLIC void gavl_dsp_context_set_accel_flags(gavl_dsp_context_t *ctx, int flags)
Set the acceleration flags for a DSP context.
struct gavl_dsp_context_s gavl_dsp_context_t
Opaque DSP context.
Definition gavldsp.h:46
GAVL_PUBLIC int gavl_dsp_video_frame_swap_endian(gavl_dsp_context_t *ctx, gavl_video_frame_t *frame, const gavl_video_format_t *format)
Swap endianness a video frame.
GAVL_PUBLIC int gavl_dsp_audio_frame_swap_endian(gavl_dsp_context_t *ctx, gavl_audio_frame_t *frame, const gavl_audio_format_t *format)
Swap endianness an audio frame.
GAVL_PUBLIC void gavl_dsp_video_frame_shift_bits(gavl_dsp_context_t *ctx, gavl_video_frame_t *frame, const gavl_video_format_t *format, int bits)
Shift bits in a video frame.
GAVL_PUBLIC int gavl_dsp_interpolate_video_frame(gavl_dsp_context_t *ctx, gavl_video_format_t *format, gavl_video_frame_t *src_1, gavl_video_frame_t *src_2, gavl_video_frame_t *dst, float factor)
Do a linear interpolation of a video frame.
Generic container for audio samples.
Definition gavl.h:624
Function table.
Definition gavldsp.h:55
int(* sad_8)(const uint8_t *src_1, const uint8_t *src_2, int stride_1, int stride_2, int w, int h)
Get the sum of absolute differences (8 bit).
Definition gavldsp.h:100
int(* sad_rgb16)(const uint8_t *src_1, const uint8_t *src_2, int stride_1, int stride_2, int w, int h)
Get the sum of absolute differences (RGB/BGR16).
Definition gavldsp.h:86
void(* shift_up_copy_16)(void *dst, const void *src, int num, int bits)
Shift up and copy.
Definition gavldsp.h:461
void(* sub_u8)(const void *src1, const void *src2, void *dst, int num)
Subtract 2 uint8_t vectors.
Definition gavldsp.h:359
void(* average_16)(const uint8_t *src_1, const uint8_t *src_2, uint8_t *dst, int num)
Average 2 scanlines (16 bit).
Definition gavldsp.h:165
void(* sub_u16_s)(const void *src1, const void *src2, void *dst, int num)
Subtract 2 uint16_t vectors (for audio stored as unsigned).
Definition gavldsp.h:399
void(* average_f)(const uint8_t *src_1, const uint8_t *src_2, uint8_t *dst, int num)
Average 2 scanlines (float).
Definition gavldsp.h:175
void(* shuffle_8_4)(void *dst, const void *src, int num, int *indices)
Shuffle bytes in 4 byte words.
Definition gavldsp.h:477
void(* interpolate_8)(const uint8_t *src_1, const uint8_t *src_2, uint8_t *dst, int num, float fac)
Interpolate 2 scanlines (8 bit).
Definition gavldsp.h:213
void(* sub_float)(const void *src1, const void *src2, void *dst, int num)
Subtract 2 float vectors.
Definition gavldsp.h:429
void(* average_rgb15)(const uint8_t *src_1, const uint8_t *src_2, uint8_t *dst, int num)
Average 2 scanlines (RGB/BGR15).
Definition gavldsp.h:138
void(* add_s32)(const void *src1, const void *src2, void *dst, int num)
Add 2 int32_t vectors.
Definition gavldsp.h:328
int(* sad_16)(const uint8_t *src_1, const uint8_t *src_2, int stride_1, int stride_2, int w, int h)
Get the sum of absolute differences (16 bit).
Definition gavldsp.h:114
void(* add_u16_s)(const void *src1, const void *src2, void *dst, int num)
Add 2 uint16_t vectors (for audio stored as unsigned).
Definition gavldsp.h:308
void(* add_u8_s)(const void *src1, const void *src2, void *dst, int num)
Add 2 uint8_t vectors (for audio stored as unsigned).
Definition gavldsp.h:278
void(* add_s8)(const void *src1, const void *src2, void *dst, int num)
Add 2 int8_t vectors.
Definition gavldsp.h:288
void(* shift_up_16)(void *ptr, int num, int bits)
Shift up.
Definition gavldsp.h:446
void(* bswap_32)(void *ptr, int len)
Do 32 byte endian swapping.
Definition gavldsp.h:251
void(* add_double)(const void *src1, const void *src2, void *dst, int num)
Add 2 float vectors.
Definition gavldsp.h:348
void(* sub_s32)(const void *src1, const void *src2, void *dst, int num)
Subtract 2 int32_t vectors.
Definition gavldsp.h:419
void(* add_u16)(const void *src1, const void *src2, void *dst, int num)
Add 2 uint16_t vectors.
Definition gavldsp.h:298
float(* sad_f)(const uint8_t *src_1, const uint8_t *src_2, int stride_1, int stride_2, int w, int h)
Get the sum of absolute differences (float).
Definition gavldsp.h:127
void(* interpolate_16)(const uint8_t *src_1, const uint8_t *src_2, uint8_t *dst, int num, float fac)
Interpolate 2 scanlines (16 bit).
Definition gavldsp.h:225
void(* shift_down_copy_16)(void *dst, const void *src, int num, int bits)
Shift down.
Definition gavldsp.h:469
void(* add_u8)(const void *src1, const void *src2, void *dst, int num)
Add 2 uint8_t vectors.
Definition gavldsp.h:268
void(* sub_s8)(const void *src1, const void *src2, void *dst, int num)
Subtract 2 int8_t vectors.
Definition gavldsp.h:379
void(* interpolate_rgb15)(const uint8_t *src_1, const uint8_t *src_2, uint8_t *dst, int num, float)
Interpolate 2 scanlines (RGB/BGR15).
Definition gavldsp.h:189
void(* add_s16)(const void *src1, const void *src2, void *dst, int num)
Add 2 int16_t vectors.
Definition gavldsp.h:318
void(* add_float)(const void *src1, const void *src2, void *dst, int num)
Add 2 float vectors.
Definition gavldsp.h:338
void(* average_rgb16)(const uint8_t *src_1, const uint8_t *src_2, uint8_t *dst, int num)
Average 2 scanlines (RGB/BGR16).
Definition gavldsp.h:147
void(* sub_u8_s)(const void *src1, const void *src2, void *dst, int num)
Subtract 2 uint8_t vectors (for audio stored as unsigned).
Definition gavldsp.h:369
void(* shift_down_16)(void *ptr, int num, int bits)
Shift down.
Definition gavldsp.h:453
void(* sub_double)(const void *src1, const void *src2, void *dst, int num)
Subtract 2 float vectors.
Definition gavldsp.h:439
void(* bswap_16)(void *ptr, int len)
Do 16 bit endian swapping.
Definition gavldsp.h:245
void(* sub_s16)(const void *src1, const void *src2, void *dst, int num)
Subtract 2 int16_t vectors.
Definition gavldsp.h:409
void(* sub_u16)(const void *src1, const void *src2, void *dst, int num)
Subtract 2 uint16_t vectors.
Definition gavldsp.h:389
int(* sad_rgb15)(const uint8_t *src_1, const uint8_t *src_2, int stride_1, int stride_2, int w, int h)
Get the sum of absolute differences (RGB/BGR15).
Definition gavldsp.h:69
void(* shuffle_16_4)(void *dst, const void *src, int num, int *indices)
Shuffle 16 bit words in groups of 4.
Definition gavldsp.h:485
void(* interpolate_rgb16)(const uint8_t *src_1, const uint8_t *src_2, uint8_t *dst, int num, float fac)
Interpolate 2 scanlines (RGB/BGR16).
Definition gavldsp.h:201
void(* bswap_64)(void *ptr, int len)
Do 64 byte endian swapping.
Definition gavldsp.h:257
void(* average_8)(const uint8_t *src_1, const uint8_t *src_2, uint8_t *dst, int num)
Average 2 scanlines (8 bit).
Definition gavldsp.h:156
void(* interpolate_f)(const uint8_t *src_1, const uint8_t *src_2, uint8_t *dst, int num, float fac)
Interpolate 2 scanlines (float).
Definition gavldsp.h:238