(API Change) Remove pointers from all typedefs
Typedef pointers are unsafe. If you do: typedef struct bla *bla_t; then you cannot use it as a constant, such as: const bla_t, because that constant will be to the pointer itself rather than to the underlying data. I admit this was a fundamental mistake that must be corrected. All typedefs that were pointer types will now have their pointers removed from the type itself, and the pointers will be used when they are actually used as variables/parameters/returns instead. This does not break ABI though, which is pretty nice.
This commit is contained in:
@@ -32,7 +32,7 @@
|
||||
|
||||
struct audio_input {
|
||||
struct audio_convert_info conversion;
|
||||
audio_resampler_t resampler;
|
||||
audio_resampler_t *resampler;
|
||||
|
||||
void (*callback)(void *param, struct audio_data *data);
|
||||
void *param;
|
||||
@@ -82,7 +82,7 @@ struct audio_output {
|
||||
size_t planes;
|
||||
|
||||
pthread_t thread;
|
||||
os_event_t stop_event;
|
||||
os_event_t *stop_event;
|
||||
|
||||
DARRAY(uint8_t) mix_buffers[MAX_AV_PLANES];
|
||||
|
||||
@@ -112,7 +112,7 @@ static inline void audio_output_removeline(struct audio_output *audio,
|
||||
* timestamps. this will actually work accurately as long as you handle the
|
||||
* values correctly */
|
||||
|
||||
static inline double ts_to_frames(audio_t audio, uint64_t ts)
|
||||
static inline double ts_to_frames(audio_t *audio, uint64_t ts)
|
||||
{
|
||||
double audio_offset_d = (double)ts;
|
||||
audio_offset_d /= 1000000000.0;
|
||||
@@ -126,19 +126,19 @@ static inline double positive_round(double val)
|
||||
return floor(val+0.5);
|
||||
}
|
||||
|
||||
static size_t ts_diff_frames(audio_t audio, uint64_t ts1, uint64_t ts2)
|
||||
static size_t ts_diff_frames(audio_t *audio, uint64_t ts1, uint64_t ts2)
|
||||
{
|
||||
double diff = ts_to_frames(audio, ts1) - ts_to_frames(audio, ts2);
|
||||
return (size_t)positive_round(diff);
|
||||
}
|
||||
|
||||
static size_t ts_diff_bytes(audio_t audio, uint64_t ts1, uint64_t ts2)
|
||||
static size_t ts_diff_bytes(audio_t *audio, uint64_t ts1, uint64_t ts2)
|
||||
{
|
||||
return ts_diff_frames(audio, ts1, ts2) * audio->block_size;
|
||||
}
|
||||
|
||||
/* unless the value is 3+ hours worth of frames, this won't overflow */
|
||||
static inline uint64_t conv_frames_to_time(audio_t audio, uint32_t frames)
|
||||
static inline uint64_t conv_frames_to_time(audio_t *audio, uint32_t frames)
|
||||
{
|
||||
return (uint64_t)frames * 1000000000ULL /
|
||||
(uint64_t)audio->info.samples_per_sec;
|
||||
@@ -369,7 +369,7 @@ static void *audio_thread(void *param)
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
static size_t audio_get_input_idx(audio_t video,
|
||||
static size_t audio_get_input_idx(audio_t *video,
|
||||
void (*callback)(void *param, struct audio_data *data),
|
||||
void *param)
|
||||
{
|
||||
@@ -413,7 +413,7 @@ static inline bool audio_input_init(struct audio_input *input,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool audio_output_connect(audio_t audio,
|
||||
bool audio_output_connect(audio_t *audio,
|
||||
const struct audio_convert_info *conversion,
|
||||
void (*callback)(void *param, struct audio_data *data),
|
||||
void *param)
|
||||
@@ -456,7 +456,7 @@ bool audio_output_connect(audio_t audio,
|
||||
return success;
|
||||
}
|
||||
|
||||
void audio_output_disconnect(audio_t audio,
|
||||
void audio_output_disconnect(audio_t *audio,
|
||||
void (*callback)(void *param, struct audio_data *data),
|
||||
void *param)
|
||||
{
|
||||
@@ -479,7 +479,7 @@ static inline bool valid_audio_params(struct audio_output_info *info)
|
||||
info->speakers > 0;
|
||||
}
|
||||
|
||||
int audio_output_open(audio_t *audio, struct audio_output_info *info)
|
||||
int audio_output_open(audio_t **audio, struct audio_output_info *info)
|
||||
{
|
||||
struct audio_output *out;
|
||||
pthread_mutexattr_t attr;
|
||||
@@ -521,7 +521,7 @@ fail:
|
||||
return AUDIO_OUTPUT_FAIL;
|
||||
}
|
||||
|
||||
void audio_output_close(audio_t audio)
|
||||
void audio_output_close(audio_t *audio)
|
||||
{
|
||||
void *thread_ret;
|
||||
struct audio_line *line;
|
||||
@@ -553,7 +553,7 @@ void audio_output_close(audio_t audio)
|
||||
bfree(audio);
|
||||
}
|
||||
|
||||
audio_line_t audio_output_create_line(audio_t audio, const char *name)
|
||||
audio_line_t *audio_output_create_line(audio_t *audio, const char *name)
|
||||
{
|
||||
if (!audio) return NULL;
|
||||
|
||||
@@ -584,7 +584,7 @@ audio_line_t audio_output_create_line(audio_t audio, const char *name)
|
||||
return line;
|
||||
}
|
||||
|
||||
const struct audio_output_info *audio_output_get_info(audio_t audio)
|
||||
const struct audio_output_info *audio_output_get_info(audio_t *audio)
|
||||
{
|
||||
return audio ? &audio->info : NULL;
|
||||
}
|
||||
@@ -599,28 +599,28 @@ void audio_line_destroy(struct audio_line *line)
|
||||
}
|
||||
}
|
||||
|
||||
bool audio_output_active(audio_t audio)
|
||||
bool audio_output_active(audio_t *audio)
|
||||
{
|
||||
if (!audio) return false;
|
||||
return audio->inputs.num != 0;
|
||||
}
|
||||
|
||||
size_t audio_output_get_block_size(audio_t audio)
|
||||
size_t audio_output_get_block_size(audio_t *audio)
|
||||
{
|
||||
return audio ? audio->block_size : 0;
|
||||
}
|
||||
|
||||
size_t audio_output_get_planes(audio_t audio)
|
||||
size_t audio_output_get_planes(audio_t *audio)
|
||||
{
|
||||
return audio ? audio->planes : 0;
|
||||
}
|
||||
|
||||
size_t audio_output_get_channels(audio_t audio)
|
||||
size_t audio_output_get_channels(audio_t *audio)
|
||||
{
|
||||
return audio ? audio->channels : 0;
|
||||
}
|
||||
|
||||
uint32_t audio_output_get_sample_rate(audio_t audio)
|
||||
uint32_t audio_output_get_sample_rate(audio_t *audio)
|
||||
{
|
||||
return audio ? audio->info.samples_per_sec : 0;
|
||||
}
|
||||
@@ -706,7 +706,7 @@ static inline bool valid_timestamp_range(struct audio_line *line, uint64_t ts)
|
||||
return ts >= line->base_timestamp && ts < max_ts;
|
||||
}
|
||||
|
||||
void audio_line_output(audio_line_t line, const struct audio_data *data)
|
||||
void audio_line_output(audio_line_t *line, const struct audio_data *data)
|
||||
{
|
||||
if (!line || !data) return;
|
||||
|
||||
|
@@ -31,8 +31,8 @@ extern "C" {
|
||||
|
||||
struct audio_output;
|
||||
struct audio_line;
|
||||
typedef struct audio_output *audio_t;
|
||||
typedef struct audio_line *audio_line_t;
|
||||
typedef struct audio_output audio_t;
|
||||
typedef struct audio_line audio_line_t;
|
||||
|
||||
enum audio_format {
|
||||
AUDIO_FORMAT_UNKNOWN,
|
||||
@@ -169,28 +169,28 @@ static inline size_t get_audio_size(enum audio_format format,
|
||||
#define AUDIO_OUTPUT_INVALIDPARAM -1
|
||||
#define AUDIO_OUTPUT_FAIL -2
|
||||
|
||||
EXPORT int audio_output_open(audio_t *audio, struct audio_output_info *info);
|
||||
EXPORT void audio_output_close(audio_t audio);
|
||||
EXPORT int audio_output_open(audio_t **audio, struct audio_output_info *info);
|
||||
EXPORT void audio_output_close(audio_t *audio);
|
||||
|
||||
EXPORT bool audio_output_connect(audio_t video,
|
||||
EXPORT bool audio_output_connect(audio_t *video,
|
||||
const struct audio_convert_info *conversion,
|
||||
void (*callback)(void *param, struct audio_data *data),
|
||||
void *param);
|
||||
EXPORT void audio_output_disconnect(audio_t video,
|
||||
EXPORT void audio_output_disconnect(audio_t *video,
|
||||
void (*callback)(void *param, struct audio_data *data),
|
||||
void *param);
|
||||
|
||||
EXPORT bool audio_output_active(audio_t audio);
|
||||
EXPORT bool audio_output_active(audio_t *audio);
|
||||
|
||||
EXPORT size_t audio_output_get_block_size(audio_t audio);
|
||||
EXPORT size_t audio_output_get_planes(audio_t audio);
|
||||
EXPORT size_t audio_output_get_channels(audio_t audio);
|
||||
EXPORT uint32_t audio_output_get_sample_rate(audio_t audio);
|
||||
EXPORT const struct audio_output_info *audio_output_get_info(audio_t audio);
|
||||
EXPORT size_t audio_output_get_block_size(audio_t *audio);
|
||||
EXPORT size_t audio_output_get_planes(audio_t *audio);
|
||||
EXPORT size_t audio_output_get_channels(audio_t *audio);
|
||||
EXPORT uint32_t audio_output_get_sample_rate(audio_t *audio);
|
||||
EXPORT const struct audio_output_info *audio_output_get_info(audio_t *audio);
|
||||
|
||||
EXPORT audio_line_t audio_output_create_line(audio_t audio, const char *name);
|
||||
EXPORT void audio_line_destroy(audio_line_t line);
|
||||
EXPORT void audio_line_output(audio_line_t line, const struct audio_data *data);
|
||||
EXPORT audio_line_t *audio_output_create_line(audio_t *audio, const char *name);
|
||||
EXPORT void audio_line_destroy(audio_line_t *line);
|
||||
EXPORT void audio_line_output(audio_line_t *line, const struct audio_data *data);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@@ -77,7 +77,7 @@ static inline uint64_t convert_speaker_layout(enum speaker_layout layout)
|
||||
return 0;
|
||||
}
|
||||
|
||||
audio_resampler_t audio_resampler_create(const struct resample_info *dst,
|
||||
audio_resampler_t *audio_resampler_create(const struct resample_info *dst,
|
||||
const struct resample_info *src)
|
||||
{
|
||||
struct audio_resampler *rs = bzalloc(sizeof(struct audio_resampler));
|
||||
@@ -116,7 +116,7 @@ audio_resampler_t audio_resampler_create(const struct resample_info *dst,
|
||||
return rs;
|
||||
}
|
||||
|
||||
void audio_resampler_destroy(audio_resampler_t rs)
|
||||
void audio_resampler_destroy(audio_resampler_t *rs)
|
||||
{
|
||||
if (rs) {
|
||||
if (rs->context)
|
||||
@@ -128,7 +128,7 @@ void audio_resampler_destroy(audio_resampler_t rs)
|
||||
}
|
||||
}
|
||||
|
||||
bool audio_resampler_resample(audio_resampler_t rs,
|
||||
bool audio_resampler_resample(audio_resampler_t *rs,
|
||||
uint8_t *output[], uint32_t *out_frames, uint64_t *ts_offset,
|
||||
const uint8_t *const input[], uint32_t in_frames)
|
||||
{
|
||||
|
@@ -25,7 +25,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
struct audio_resampler;
|
||||
typedef struct audio_resampler *audio_resampler_t;
|
||||
typedef struct audio_resampler audio_resampler_t;
|
||||
|
||||
struct resample_info {
|
||||
uint32_t samples_per_sec;
|
||||
@@ -33,11 +33,11 @@ struct resample_info {
|
||||
enum speaker_layout speakers;
|
||||
};
|
||||
|
||||
EXPORT audio_resampler_t audio_resampler_create(const struct resample_info *dst,
|
||||
EXPORT audio_resampler_t *audio_resampler_create(const struct resample_info *dst,
|
||||
const struct resample_info *src);
|
||||
EXPORT void audio_resampler_destroy(audio_resampler_t resampler);
|
||||
EXPORT void audio_resampler_destroy(audio_resampler_t *resampler);
|
||||
|
||||
EXPORT bool audio_resampler_resample(audio_resampler_t resampler,
|
||||
EXPORT bool audio_resampler_resample(audio_resampler_t *resampler,
|
||||
uint8_t *output[], uint32_t *out_frames, uint64_t *ts_offset,
|
||||
const uint8_t *const input[], uint32_t in_frames);
|
||||
|
||||
|
@@ -30,7 +30,7 @@
|
||||
|
||||
struct video_input {
|
||||
struct video_scale_info conversion;
|
||||
video_scaler_t scaler;
|
||||
video_scaler_t *scaler;
|
||||
struct video_frame frame[MAX_CONVERT_BUFFERS];
|
||||
int cur_frame;
|
||||
|
||||
@@ -50,13 +50,13 @@ struct video_output {
|
||||
|
||||
pthread_t thread;
|
||||
pthread_mutex_t data_mutex;
|
||||
os_event_t stop_event;
|
||||
os_event_t *stop_event;
|
||||
|
||||
struct video_data cur_frame;
|
||||
struct video_data next_frame;
|
||||
bool new_frame;
|
||||
|
||||
os_event_t update_event;
|
||||
os_event_t *update_event;
|
||||
uint64_t frame_time;
|
||||
volatile uint64_t cur_video_time;
|
||||
uint32_t skipped_frames;
|
||||
@@ -181,7 +181,7 @@ static inline bool valid_video_params(struct video_output_info *info)
|
||||
info->fps_num != 0;
|
||||
}
|
||||
|
||||
int video_output_open(video_t *video, struct video_output_info *info)
|
||||
int video_output_open(video_t **video, struct video_output_info *info)
|
||||
{
|
||||
struct video_output *out;
|
||||
|
||||
@@ -217,7 +217,7 @@ fail:
|
||||
return VIDEO_OUTPUT_FAIL;
|
||||
}
|
||||
|
||||
void video_output_close(video_t video)
|
||||
void video_output_close(video_t *video)
|
||||
{
|
||||
if (!video)
|
||||
return;
|
||||
@@ -235,7 +235,7 @@ void video_output_close(video_t video)
|
||||
bfree(video);
|
||||
}
|
||||
|
||||
static size_t video_get_input_idx(video_t video,
|
||||
static size_t video_get_input_idx(video_t *video,
|
||||
void (*callback)(void *param, struct video_data *frame),
|
||||
void *param)
|
||||
{
|
||||
@@ -284,7 +284,7 @@ static inline bool video_input_init(struct video_input *input,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool video_output_connect(video_t video,
|
||||
bool video_output_connect(video_t *video,
|
||||
const struct video_scale_info *conversion,
|
||||
void (*callback)(void *param, struct video_data *frame),
|
||||
void *param)
|
||||
@@ -326,7 +326,7 @@ bool video_output_connect(video_t video,
|
||||
return success;
|
||||
}
|
||||
|
||||
void video_output_disconnect(video_t video,
|
||||
void video_output_disconnect(video_t *video,
|
||||
void (*callback)(void *param, struct video_data *frame),
|
||||
void *param)
|
||||
{
|
||||
@@ -344,18 +344,18 @@ void video_output_disconnect(video_t video,
|
||||
pthread_mutex_unlock(&video->input_mutex);
|
||||
}
|
||||
|
||||
bool video_output_active(video_t video)
|
||||
bool video_output_active(video_t *video)
|
||||
{
|
||||
if (!video) return false;
|
||||
return video->inputs.num != 0;
|
||||
}
|
||||
|
||||
const struct video_output_info *video_output_get_info(video_t video)
|
||||
const struct video_output_info *video_output_get_info(video_t *video)
|
||||
{
|
||||
return video ? &video->info : NULL;
|
||||
}
|
||||
|
||||
void video_output_swap_frame(video_t video, struct video_data *frame)
|
||||
void video_output_swap_frame(video_t *video, struct video_data *frame)
|
||||
{
|
||||
if (!video) return;
|
||||
|
||||
@@ -365,7 +365,7 @@ void video_output_swap_frame(video_t video, struct video_data *frame)
|
||||
pthread_mutex_unlock(&video->data_mutex);
|
||||
}
|
||||
|
||||
bool video_output_wait(video_t video)
|
||||
bool video_output_wait(video_t *video)
|
||||
{
|
||||
if (!video) return false;
|
||||
|
||||
@@ -373,17 +373,17 @@ bool video_output_wait(video_t video)
|
||||
return os_event_try(video->stop_event) == EAGAIN;
|
||||
}
|
||||
|
||||
uint64_t video_output_get_frame_time(video_t video)
|
||||
uint64_t video_output_get_frame_time(video_t *video)
|
||||
{
|
||||
return video ? video->frame_time : 0;
|
||||
}
|
||||
|
||||
uint64_t video_output_get_time(video_t video)
|
||||
uint64_t video_output_get_time(video_t *video)
|
||||
{
|
||||
return video ? video->cur_video_time : 0;
|
||||
}
|
||||
|
||||
void video_output_stop(video_t video)
|
||||
void video_output_stop(video_t *video)
|
||||
{
|
||||
void *thread_ret;
|
||||
|
||||
@@ -398,22 +398,22 @@ void video_output_stop(video_t video)
|
||||
}
|
||||
}
|
||||
|
||||
enum video_format video_output_get_format(video_t video)
|
||||
enum video_format video_output_get_format(video_t *video)
|
||||
{
|
||||
return video ? video->info.format : VIDEO_FORMAT_NONE;
|
||||
}
|
||||
|
||||
uint32_t video_output_get_width(video_t video)
|
||||
uint32_t video_output_get_width(video_t *video)
|
||||
{
|
||||
return video ? video->info.width : 0;
|
||||
}
|
||||
|
||||
uint32_t video_output_get_height(video_t video)
|
||||
uint32_t video_output_get_height(video_t *video)
|
||||
{
|
||||
return video ? video->info.height : 0;
|
||||
}
|
||||
|
||||
double video_output_get_frame_rate(video_t video)
|
||||
double video_output_get_frame_rate(video_t *video)
|
||||
{
|
||||
if (!video)
|
||||
return 0.0;
|
||||
@@ -421,12 +421,12 @@ double video_output_get_frame_rate(video_t video)
|
||||
return (double)video->info.fps_num / (double)video->info.fps_den;
|
||||
}
|
||||
|
||||
uint32_t video_output_get_skipped_frames(video_t video)
|
||||
uint32_t video_output_get_skipped_frames(video_t *video)
|
||||
{
|
||||
return video->skipped_frames;
|
||||
}
|
||||
|
||||
uint32_t video_output_get_total_frames(video_t video)
|
||||
uint32_t video_output_get_total_frames(video_t *video)
|
||||
{
|
||||
return video->total_frames;
|
||||
}
|
||||
|
@@ -26,7 +26,7 @@ extern "C" {
|
||||
/* Base video output component. Use this to create a video output track. */
|
||||
|
||||
struct video_output;
|
||||
typedef struct video_output *video_t;
|
||||
typedef struct video_output video_t;
|
||||
|
||||
enum video_format {
|
||||
VIDEO_FORMAT_NONE,
|
||||
@@ -119,33 +119,33 @@ EXPORT bool video_format_get_parameters(enum video_colorspace color_space,
|
||||
#define VIDEO_OUTPUT_INVALIDPARAM -1
|
||||
#define VIDEO_OUTPUT_FAIL -2
|
||||
|
||||
EXPORT int video_output_open(video_t *video, struct video_output_info *info);
|
||||
EXPORT void video_output_close(video_t video);
|
||||
EXPORT int video_output_open(video_t **video, struct video_output_info *info);
|
||||
EXPORT void video_output_close(video_t *video);
|
||||
|
||||
EXPORT bool video_output_connect(video_t video,
|
||||
EXPORT bool video_output_connect(video_t *video,
|
||||
const struct video_scale_info *conversion,
|
||||
void (*callback)(void *param, struct video_data *frame),
|
||||
void *param);
|
||||
EXPORT void video_output_disconnect(video_t video,
|
||||
EXPORT void video_output_disconnect(video_t *video,
|
||||
void (*callback)(void *param, struct video_data *frame),
|
||||
void *param);
|
||||
|
||||
EXPORT bool video_output_active(video_t video);
|
||||
EXPORT bool video_output_active(video_t *video);
|
||||
|
||||
EXPORT const struct video_output_info *video_output_get_info(video_t video);
|
||||
EXPORT void video_output_swap_frame(video_t video, struct video_data *frame);
|
||||
EXPORT bool video_output_wait(video_t video);
|
||||
EXPORT uint64_t video_output_get_frame_time(video_t video);
|
||||
EXPORT uint64_t video_output_get_time(video_t video);
|
||||
EXPORT void video_output_stop(video_t video);
|
||||
EXPORT const struct video_output_info *video_output_get_info(video_t *video);
|
||||
EXPORT void video_output_swap_frame(video_t *video, struct video_data *frame);
|
||||
EXPORT bool video_output_wait(video_t *video);
|
||||
EXPORT uint64_t video_output_get_frame_time(video_t *video);
|
||||
EXPORT uint64_t video_output_get_time(video_t *video);
|
||||
EXPORT void video_output_stop(video_t *video);
|
||||
|
||||
EXPORT enum video_format video_output_get_format(video_t video);
|
||||
EXPORT uint32_t video_output_get_width(video_t video);
|
||||
EXPORT uint32_t video_output_get_height(video_t video);
|
||||
EXPORT double video_output_get_frame_rate(video_t video);
|
||||
EXPORT enum video_format video_output_get_format(video_t *video);
|
||||
EXPORT uint32_t video_output_get_width(video_t *video);
|
||||
EXPORT uint32_t video_output_get_height(video_t *video);
|
||||
EXPORT double video_output_get_frame_rate(video_t *video);
|
||||
|
||||
EXPORT uint32_t video_output_get_skipped_frames(video_t video);
|
||||
EXPORT uint32_t video_output_get_total_frames(video_t video);
|
||||
EXPORT uint32_t video_output_get_skipped_frames(video_t *video);
|
||||
EXPORT uint32_t video_output_get_total_frames(video_t *video);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@@ -80,7 +80,7 @@ static inline int get_ffmpeg_range_type(enum video_range_type type)
|
||||
|
||||
#define FIXED_1_0 (1<<16)
|
||||
|
||||
int video_scaler_create(video_scaler_t *scaler_out,
|
||||
int video_scaler_create(video_scaler_t **scaler_out,
|
||||
const struct video_scale_info *dst,
|
||||
const struct video_scale_info *src,
|
||||
enum video_scale_type type)
|
||||
@@ -132,7 +132,7 @@ fail:
|
||||
return VIDEO_SCALER_FAILED;
|
||||
}
|
||||
|
||||
void video_scaler_destroy(video_scaler_t scaler)
|
||||
void video_scaler_destroy(video_scaler_t *scaler)
|
||||
{
|
||||
if (scaler) {
|
||||
sws_freeContext(scaler->swscale);
|
||||
@@ -140,7 +140,7 @@ void video_scaler_destroy(video_scaler_t scaler)
|
||||
}
|
||||
}
|
||||
|
||||
bool video_scaler_scale(video_scaler_t scaler,
|
||||
bool video_scaler_scale(video_scaler_t *scaler,
|
||||
uint8_t *output[], const uint32_t out_linesize[],
|
||||
const uint8_t *const input[], const uint32_t in_linesize[])
|
||||
{
|
||||
|
@@ -25,19 +25,19 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
struct video_scaler;
|
||||
typedef struct video_scaler *video_scaler_t;
|
||||
typedef struct video_scaler video_scaler_t;
|
||||
|
||||
#define VIDEO_SCALER_SUCCESS 0
|
||||
#define VIDEO_SCALER_BAD_CONVERSION -1
|
||||
#define VIDEO_SCALER_FAILED -2
|
||||
|
||||
EXPORT int video_scaler_create(video_scaler_t *scaler,
|
||||
EXPORT int video_scaler_create(video_scaler_t **scaler,
|
||||
const struct video_scale_info *dst,
|
||||
const struct video_scale_info *src,
|
||||
enum video_scale_type type);
|
||||
EXPORT void video_scaler_destroy(video_scaler_t scaler);
|
||||
EXPORT void video_scaler_destroy(video_scaler_t *scaler);
|
||||
|
||||
EXPORT bool video_scaler_scale(video_scaler_t scaler,
|
||||
EXPORT bool video_scaler_scale(video_scaler_t *scaler,
|
||||
uint8_t *output[], const uint32_t out_linesize[],
|
||||
const uint8_t *const input[], const uint32_t in_linesize[]);
|
||||
|
||||
|
Reference in New Issue
Block a user