blob: 888cfc8cbb8fbaa8a0c51a5dfa43246e95862a99 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SERVICES_MEDIA_FRAMEWORK_LPCM_UTIL_H_
#define SERVICES_MEDIA_FRAMEWORK_LPCM_UTIL_H_
#include <memory>
#include "services/media/framework/stream_type.h"
namespace mojo {
namespace media {
// Helper class that performs various LPCM processing functions.
class LpcmUtil {
public:
static std::unique_ptr<LpcmUtil> Create(const LpcmStreamType& stream_type);
virtual ~LpcmUtil() {}
// Fills the buffer with silence.
virtual void Silence(void* buffer, size_t frame_count) const = 0;
// Copies samples.
virtual void Copy(const void* in, void* out, size_t frame_count) const = 0;
// Mixes samples.
virtual void Mix(const void* in, void* out, size_t frame_count) const = 0;
// Interleaves non-interleaved samples. This assumes ffmpeg non-interleaved
// ("planar") layout, in which the buffer (in) is divided evenly into a
// channel buffer per channel. The samples for each channel are contiguous
// in the respective channel buffer with possible empty space at the end
// (hence the in_type_count and the frame_count).
virtual void Interleave(
const void* in,
size_t in_byte_count,
void* out,
size_t frame_count) const = 0;
};
} // namespace media
} // namespace mojo
#endif // SERVICES_MEDIA_FRAMEWORK_LPCM_UTIL_H_