TT#98901 add decoder_packet_lost() and callbacks

Change-Id: I782b79ac02238ae7bc52bf05ced4318aa14d6164
pull/1116/head
Richard Fuchs 6 years ago
parent 36eb641966
commit c3ebbc4b43

@ -662,14 +662,15 @@ err:
return -1;
}
int decoder_input_data(decoder_t *dec, const str *data, unsigned long ts,
static int __decoder_input_data(decoder_t *dec, const str *data, unsigned long ts,
int (*callback)(decoder_t *, AVFrame *, void *u1, void *u2), void *u1, void *u2)
{
GQueue frames = G_QUEUE_INIT;
if (G_UNLIKELY(!dec))
return -1;
if (!data || !data->s || !data->len)
if (!data && !dec->def->packet_lost)
return 0;
ts *= dec->def->clockrate_mult;
@ -695,7 +696,10 @@ int decoder_input_data(decoder_t *dec, const str *data, unsigned long ts,
}
dec->rtp_ts = ts;
dec->def->codec_type->decoder_input(dec, data, &frames);
if (data)
dec->def->codec_type->decoder_input(dec, data, &frames);
else
dec->def->packet_lost(dec, &frames);
AVFrame *frame;
int ret = 0;
@ -714,6 +718,18 @@ int decoder_input_data(decoder_t *dec, const str *data, unsigned long ts,
return ret;
}
int decoder_input_data(decoder_t *dec, const str *data, unsigned long ts,
int (*callback)(decoder_t *, AVFrame *, void *u1, void *u2), void *u1, void *u2)
{
if (!data || !data->s || !data->len)
return 0;
return __decoder_input_data(dec, data, ts, callback, u1, u2);
}
int decoder_lost_packet(decoder_t *dec, unsigned long ts,
int (*callback)(decoder_t *, AVFrame *, void *u1, void *u2), void *u1, void *u2)
{
return __decoder_input_data(dec, NULL, ts, callback, u1, u2);
}
static void avlog_ilog(void *ptr, int loglevel, const char *fmt, va_list ap) {

@ -72,6 +72,7 @@ typedef void format_init_f(struct rtp_payload_type *);
typedef void set_enc_options_f(encoder_t *, const str *, const str *);
typedef void set_dec_options_f(decoder_t *, const str *, const str *);
typedef int format_cmp_f(const struct rtp_payload_type *, const struct rtp_payload_type *);
typedef int packet_lost_f(decoder_t *, GQueue *);
@ -136,6 +137,7 @@ struct codec_def_s {
format_init_f *init;
set_enc_options_f *set_enc_options;
set_dec_options_f *set_dec_options;
packet_lost_f *packet_lost;
// filled in by codeclib_init()
str rtpname_str;
@ -276,6 +278,8 @@ decoder_t *decoder_new_fmtp(const codec_def_t *def, int clockrate, int channels,
void decoder_close(decoder_t *dec);
int decoder_input_data(decoder_t *dec, const str *data, unsigned long ts,
int (*callback)(decoder_t *, AVFrame *, void *u1, void *u2), void *u1, void *u2);
int decoder_lost_packet(decoder_t *dec, unsigned long ts,
int (*callback)(decoder_t *, AVFrame *, void *u1, void *u2), void *u1, void *u2);
encoder_t *encoder_new(void);

Loading…
Cancel
Save