2017-12-11 12:21:02 +05:30
|
|
|
/*
|
|
|
|
|
* Copyright (c) 2017 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.
|
|
|
|
|
*/
|
|
|
|
|
|
2018-01-25 13:01:09 -08:00
|
|
|
#ifndef MEDIA_ENGINE_MULTIPLEXCODECFACTORY_H_
|
|
|
|
|
#define MEDIA_ENGINE_MULTIPLEXCODECFACTORY_H_
|
2017-12-11 12:21:02 +05:30
|
|
|
|
|
|
|
|
#include <memory>
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
|
|
#include "api/video_codecs/video_decoder_factory.h"
|
|
|
|
|
#include "api/video_codecs/video_encoder_factory.h"
|
|
|
|
|
|
|
|
|
|
namespace webrtc {
|
|
|
|
|
|
2018-01-25 13:01:09 -08:00
|
|
|
class MultiplexEncoderFactory : public VideoEncoderFactory {
|
2017-12-11 12:21:02 +05:30
|
|
|
public:
|
2018-08-15 10:19:32 -07:00
|
|
|
// supports_augmenting_data defines if the encoder would support augmenting
|
|
|
|
|
// data in that case the encoder expects video frame buffer of type
|
|
|
|
|
// AugmentedVideoFrameBuffer the encoder would encode the attached buffer and
|
|
|
|
|
// data together if the flag is not set any frame buffer can be passed in
|
|
|
|
|
MultiplexEncoderFactory(std::unique_ptr<VideoEncoderFactory> factory,
|
|
|
|
|
bool supports_augmenting_data = false);
|
2017-12-11 12:21:02 +05:30
|
|
|
|
|
|
|
|
std::vector<SdpVideoFormat> GetSupportedFormats() const override;
|
|
|
|
|
CodecInfo QueryVideoEncoder(const SdpVideoFormat& format) const override;
|
|
|
|
|
std::unique_ptr<VideoEncoder> CreateVideoEncoder(
|
|
|
|
|
const SdpVideoFormat& format) override;
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
std::unique_ptr<VideoEncoderFactory> factory_;
|
2018-08-15 10:19:32 -07:00
|
|
|
const bool supports_augmenting_data_;
|
2017-12-11 12:21:02 +05:30
|
|
|
};
|
|
|
|
|
|
2018-01-25 13:01:09 -08:00
|
|
|
class MultiplexDecoderFactory : public VideoDecoderFactory {
|
2017-12-11 12:21:02 +05:30
|
|
|
public:
|
2018-08-15 10:19:32 -07:00
|
|
|
// supports_augmenting_data defines if the decoder would support augmenting
|
|
|
|
|
// data in that case the decoder expects the encoded video frame to contain
|
|
|
|
|
// augmenting_data it is expected that the sender is using MultiplexEncoder
|
|
|
|
|
// with supports_augmenting_data set
|
|
|
|
|
MultiplexDecoderFactory(std::unique_ptr<VideoDecoderFactory> factory,
|
|
|
|
|
bool supports_augmenting_data = false);
|
2017-12-11 12:21:02 +05:30
|
|
|
|
|
|
|
|
std::vector<SdpVideoFormat> GetSupportedFormats() const override;
|
|
|
|
|
std::unique_ptr<VideoDecoder> CreateVideoDecoder(
|
|
|
|
|
const SdpVideoFormat& format) override;
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
std::unique_ptr<VideoDecoderFactory> factory_;
|
2018-08-15 10:19:32 -07:00
|
|
|
const bool supports_augmenting_data_;
|
2017-12-11 12:21:02 +05:30
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} // namespace webrtc
|
|
|
|
|
|
2018-01-25 13:01:09 -08:00
|
|
|
#endif // MEDIA_ENGINE_MULTIPLEXCODECFACTORY_H_
|