webrtc/modules/audio_coding/codecs/opus/opus_inst.h
Alex Loiko 7a3e43a5d7 Reland of Opus multistream.
This is a reland of
https://webrtc-review.googlesource.com/c/src/+/111750.

This time we don't use the multistream decoder unless we have to.
(Which is when #channels >2). Pros: don't make downstream projects
crash due to used up stack space, a few % more efficiency for the
typical case (because multistream adds some overhead). Cons: Messy
C-code with "union" types and #define MACROs, probably more
maintenance.

Bug: webrtc:8649
Change-Id: I4253a5e0c382f67ac7c6731dc6602a31e6779e63
Reviewed-on: https://webrtc-review.googlesource.com/c/120049
Commit-Queue: Alex Loiko <aleloi@webrtc.org>
Reviewed-by: Minyue Li <minyue@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26445}
2019-01-29 12:16:19 +00:00

42 lines
1.1 KiB
C

/*
* Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#ifndef MODULES_AUDIO_CODING_CODECS_OPUS_OPUS_INST_H_
#define MODULES_AUDIO_CODING_CODECS_OPUS_OPUS_INST_H_
#include <stddef.h>
#include "rtc_base/ignore_wundef.h"
RTC_PUSH_IGNORING_WUNDEF()
#include "opus.h"
#include "opus_multistream.h"
RTC_POP_IGNORING_WUNDEF()
struct WebRtcOpusEncInst {
union {
OpusEncoder* encoder;
OpusMSEncoder* multistream_encoder;
} encoder;
size_t channels;
int in_dtx_mode;
};
struct WebRtcOpusDecInst {
union {
OpusDecoder* decoder;
OpusMSDecoder* multistream_decoder;
} decoder;
int prev_decoded_samples;
size_t channels;
int in_dtx_mode;
};
#endif // MODULES_AUDIO_CODING_CODECS_OPUS_OPUS_INST_H_