Browse Source

MT#62571 add sink resampling stage

Change-Id: Ifcd25ea9ed71f913e44ebb34a8fe63ae92f748f0
pull/1967/head
Richard Fuchs 6 months ago
parent
commit
fb2b6986bb
3 changed files with 25 additions and 6 deletions
  1. +1
    -5
      recording-daemon/mix.c
  2. +22
    -1
      recording-daemon/output.c
  3. +2
    -0
      recording-daemon/types.h

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

@ -388,13 +388,9 @@ int mix_add(mix_t *mix, AVFrame *frame, unsigned int idx, void *ptr, output_t *o
else
goto err;
}
frame = resample_frame(&mix->resample, mix->sink_frame, &mix->out_format);
bool ok = sink_add(&output->sink, frame, &mix->out_format);
bool ok = sink_add(&output->sink, mix->sink_frame, &mix->out_format);
av_frame_unref(mix->sink_frame);
if (frame != mix->sink_frame)
av_frame_free(&frame);
if (!ok)
return -1;


+ 22
- 1
recording-daemon/output.c View File

@ -12,6 +12,7 @@
#include "main.h"
#include "recaux.h"
#include "notify.h"
#include "resample.h"
#define DEFAULT_AVIO_BUFSIZE 4096
@ -52,7 +53,21 @@ bool sink_add(sink_t *sink, AVFrame *frame, const format_t *requested_format) {
if (!sink->config(sink, requested_format, &actual_format))
return false;
return sink->add(sink, frame);
AVFrame *copy_frame = av_frame_clone(frame);
if (!copy_frame)
return false;
AVFrame *dec_frame = resample_frame(&sink->resampler, copy_frame, &actual_format);
if (!dec_frame) {
av_frame_free(&copy_frame);
return false;
}
bool ok = sink->add(sink, dec_frame);
if (dec_frame != copy_frame)
av_frame_free(&copy_frame);
return ok;
}
@ -544,6 +559,11 @@ static bool output_shutdown(output_t *output, FILE **fp, GString **gs) {
}
static void sink_close(sink_t *sink) {
resample_shutdown(&sink->resampler);
}
void output_close(metafile_t *mf, output_t *output, tag_t *tag, bool discard) {
if (!output)
return;
@ -575,6 +595,7 @@ void output_close(metafile_t *mf, output_t *output, tag_t *tag, bool discard) {
g_clear_pointer(&output->iobuf, g_free);
if (output->membuf)
g_string_free(output->membuf, TRUE);
sink_close(&output->sink);
g_free(output);
}


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

@ -52,6 +52,8 @@ struct sink_s {
union {
output_t *output;
};
resample_t resampler;
};


Loading…
Cancel
Save