Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
Loading...
Searching...
No Matches
resampler_writer.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018 Roc Streaming authors
3 *
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 */
8
9//! @file roc_audio/resampler_writer.h
10//! @brief Resampler.
11
12#ifndef ROC_AUDIO_RESAMPLER_WRITER_H_
13#define ROC_AUDIO_RESAMPLER_WRITER_H_
14
15#include "roc_audio/frame.h"
19#include "roc_audio/sample.h"
21#include "roc_core/array.h"
23#include "roc_core/slice.h"
24#include "roc_core/stddefs.h"
25#include "roc_packet/units.h"
26
27namespace roc {
28namespace audio {
29
30//! Resampler element for writing pipeline.
32public:
33 //! Initialize.
35 IResampler& resampler,
36 FrameFactory& frame_factory,
37 const SampleSpec& in_sample_spec,
38 const SampleSpec& out_sample_spec);
39
40 //! Check if object is successfully constructed.
41 bool is_valid() const;
42
43 //! Set new resample factor.
44 bool set_scaling(float multiplier);
45
46 //! Read audio frame.
47 virtual void write(Frame&);
48
49private:
50 size_t push_input_(Frame& in_frame, size_t in_pos);
51 core::nanoseconds_t capture_ts_(Frame& in_frame, size_t in_pos);
52
53 IResampler& resampler_;
54 IFrameWriter& writer_;
55
56 const SampleSpec in_sample_spec_;
57 const SampleSpec out_sample_spec_;
58
59 core::Slice<sample_t> input_buf_;
60 core::Slice<sample_t> output_buf_;
61
62 size_t input_buf_pos_;
63 size_t output_buf_pos_;
64
65 float scaling_;
66 bool valid_;
67};
68
69} // namespace audio
70} // namespace roc
71
72#endif // ROC_AUDIO_RESAMPLER_WRITER_H_
Dynamic array.
Audio frame.
Definition frame.h:25
Frame writer interface.
Audio writer interface.
Definition iresampler.h:24
Resampler element for writing pipeline.
virtual void write(Frame &)
Read audio frame.
bool set_scaling(float multiplier)
Set new resample factor.
ResamplerWriter(IFrameWriter &writer, IResampler &resampler, FrameFactory &frame_factory, const SampleSpec &in_sample_spec, const SampleSpec &out_sample_spec)
Initialize.
bool is_valid() const
Check if object is successfully constructed.
Sample specification. Describes sample rate and channels.
Definition sample_spec.h:30
Base class for non-copyable objects.
Definition noncopyable.h:23
Shared ownership intrusive pointer.
Definition shared_ptr.h:32
Audio frame.
Frame factory.
Frame writer interface.
Audio resampler interface.
int64_t nanoseconds_t
Nanoseconds.
Definition time.h:58
Root namespace.
Non-copyable object.
Audio sample.
Sample specifications.
Slice.
Commonly used types and functions.
Various units used in packets.