Browse Source

MT#62571 add sink config method

Change-Id: Ia10636ec7090b8dbe976bb8b91defde8b3a34395
pull/1967/head
Richard Fuchs 6 months ago
parent
commit
98db2ba250
5 changed files with 27 additions and 9 deletions
  1. +1
    -3
      recording-daemon/decoder.c
  2. +1
    -1
      recording-daemon/mix.c
  3. +23
    -4
      recording-daemon/output.c
  4. +1
    -1
      recording-daemon/output.h
  5. +1
    -0
      recording-daemon/types.h

+ 1
- 3
recording-daemon/decoder.c View File

@ -138,9 +138,7 @@ no_mix_out:
if (output) {
dbg("SSRC %lx of stream #%lu has single output", ssrc->ssrc, stream->id);
if (output_config(output, &dec->dest_format, NULL))
goto err;
if (!sink_add(&output->sink, frame))
if (!sink_add(&output->sink, frame, &dec->dest_format))
ilog(LOG_ERR, "Failed to add decoded packet to individual output");
}


+ 1
- 1
recording-daemon/mix.c View File

@ -390,7 +390,7 @@ int mix_add(mix_t *mix, AVFrame *frame, unsigned int idx, void *ptr, output_t *o
}
frame = resample_frame(&mix->resample, mix->sink_frame, &mix->out_format);
bool ok = sink_add(&output->sink, frame);
bool ok = sink_add(&output->sink, frame, &mix->out_format);
av_frame_unref(mix->sink_frame);
if (frame != mix->sink_frame)


+ 23
- 4
recording-daemon/output.c View File

@ -25,6 +25,8 @@ int mp3_bitrate;
static bool output_shutdown(output_t *output, FILE **, GString **);
static bool output_config_(sink_t *, output_t *output, const format_t *requested_format,
format_t *actual_format);
@ -42,9 +44,14 @@ static int output_got_packet(encoder_t *enc, void *u1, void *u2) {
}
bool sink_add(sink_t *sink, AVFrame *frame) {
bool sink_add(sink_t *sink, AVFrame *frame, const format_t *requested_format) {
if (!sink)
return false;
format_t actual_format;
if (!sink->config(sink, requested_format, &actual_format))
return false;
return sink->add(sink, frame);
}
@ -104,6 +111,10 @@ void sink_init(sink_t *sink) {
};
}
static bool output_config__(sink_t *s, const format_t *requested_format, format_t *actual_format) {
return output_config_(s, s->output, requested_format, actual_format);
}
static output_t *output_alloc(const char *path, const char *name) {
output_t *ret = g_new0(output_t, 1);
ret->file_path = g_strdup(path);
@ -119,6 +130,7 @@ static output_t *output_alloc(const char *path, const char *name) {
sink_init(&ret->sink);
ret->sink.output = ret;
ret->sink.add = output_add;
ret->sink.config = output_config__;
return ret;
}
@ -308,7 +320,9 @@ int64_t output_avio_mem_seek(void *opaque, int64_t offset, int whence) {
return o->mempos;
}
int output_config(output_t *output, const format_t *requested_format, format_t *actual_format) {
static bool output_config_(sink_t *sink, output_t *output, const format_t *requested_format,
format_t *actual_format)
{
const char *err;
int av_ret = 0;
@ -461,14 +475,19 @@ no_output_file:
done:
if (actual_format)
*actual_format = output->actual_format;
return 0;
return true;
err:
output_shutdown(output, NULL, NULL);
ilog(LOG_ERR, "Error configuring media output: %s", err);
if (av_ret)
ilog(LOG_ERR, "Error returned from libav: %s", av_error(av_ret));
return -1;
return false;
}
int output_config(output_t *output, const format_t *requested_format, format_t *actual_format) {
return output_config_(NULL, output, requested_format, actual_format) ? 0 : -1;
}


+ 1
- 1
recording-daemon/output.h View File

@ -18,7 +18,7 @@ int output_config(output_t *output, const format_t *requested_format, format_t *
void sink_init(sink_t *);
bool sink_add(sink_t *, AVFrame *frame);
bool sink_add(sink_t *, AVFrame *frame, const format_t *requested_format);
#endif

+ 1
- 0
recording-daemon/types.h View File

@ -47,6 +47,7 @@ struct handler_s {
struct sink_s {
bool (*add)(sink_t *, AVFrame *);
bool (*config)(sink_t *, const format_t *requested_format, format_t *actual_format);
union {
output_t *output;


Loading…
Cancel
Save