blob: 7bbc98fd4831a8e28a440cee9ad27f6826960c15 [file] [log] [blame]
Henrik Kjellander2557b862015-11-18 22:00:21 +01001/*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020011#ifndef MODULES_VIDEO_CODING_INCLUDE_VIDEO_CODING_DEFINES_H_
12#define MODULES_VIDEO_CODING_INCLUDE_VIDEO_CODING_DEFINES_H_
Henrik Kjellander2557b862015-11-18 22:00:21 +010013
perkj376b1922016-05-02 11:35:24 -070014#include <string>
philipel5ab4c6d2016-03-08 03:36:15 -080015#include <vector>
16
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020017#include "api/video/video_frame.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020018#include "modules/include/module_common_types.h"
Henrik Kjellander2557b862015-11-18 22:00:21 +010019
20namespace webrtc {
21
22// Error codes
philipel9d3ab612015-12-21 04:12:39 -080023#define VCM_FRAME_NOT_READY 3
philipel9d3ab612015-12-21 04:12:39 -080024#define VCM_MISSING_CALLBACK 1
25#define VCM_OK 0
26#define VCM_GENERAL_ERROR -1
27#define VCM_LEVEL_EXCEEDED -2
28#define VCM_MEMORY -3
29#define VCM_PARAMETER_ERROR -4
30#define VCM_UNKNOWN_PAYLOAD -5
31#define VCM_CODEC_ERROR -6
32#define VCM_UNINITIALIZED -7
Henrik Kjellander2557b862015-11-18 22:00:21 +010033#define VCM_NO_CODEC_REGISTERED -8
34#define VCM_JITTER_BUFFER_ERROR -9
philipel9d3ab612015-12-21 04:12:39 -080035#define VCM_OLD_PACKET_ERROR -10
36#define VCM_NO_FRAME_DECODED -11
philipel9d3ab612015-12-21 04:12:39 -080037#define VCM_NOT_IMPLEMENTED -20
Henrik Kjellander2557b862015-11-18 22:00:21 +010038
ilnik04f4d122017-06-19 07:18:55 -070039enum {
ilnik04f4d122017-06-19 07:18:55 -070040 // Timing frames settings. Timing frames are sent every
41 // |kDefaultTimingFramesDelayMs|, or if the frame is at least
42 // |kDefaultOutliserFrameSizePercent| in size of average frame.
43 kDefaultTimingFramesDelayMs = 200,
Ilya Nikolaevskiy82c07ea2018-11-06 12:54:30 +010044 kDefaultOutlierFrameSizePercent = 500,
Ilya Nikolaevskiyd79314f2017-10-23 10:45:37 +020045 // Maximum number of frames for what we store encode start timing information.
46 kMaxEncodeStartTimeListSize = 50,
ilnik04f4d122017-06-19 07:18:55 -070047};
Henrik Kjellander2557b862015-11-18 22:00:21 +010048
49enum VCMVideoProtection {
50 kProtectionNone,
51 kProtectionNack,
52 kProtectionFEC,
53 kProtectionNackFEC,
54};
55
56enum VCMTemporalDecimation {
57 kBitrateOverUseDecimation,
58};
59
60struct VCMFrameCount {
61 uint32_t numKeyFrames;
62 uint32_t numDeltaFrames;
63};
64
philipel9d3ab612015-12-21 04:12:39 -080065// Callback class used for passing decoded frames which are ready to be
66// rendered.
Henrik Kjellander2557b862015-11-18 22:00:21 +010067class VCMReceiveCallback {
68 public:
sakalcc452e12017-02-09 04:53:45 -080069 virtual int32_t FrameToRender(VideoFrame& videoFrame, // NOLINT
Danil Chapovalov0040b662018-06-18 10:48:16 +020070 absl::optional<uint8_t> qp,
ilnik6d5b4d62017-08-30 03:32:14 -070071 VideoContentType content_type) = 0;
ilnikfc0acc42017-05-08 02:59:38 -070072
Niels Möllerbe682d42018-03-27 08:31:45 +020073 virtual int32_t ReceivedDecodedReferenceFrame(const uint64_t pictureId);
Henrik Kjellander2557b862015-11-18 22:00:21 +010074 // Called when the current receive codec changes.
Niels Möllerbe682d42018-03-27 08:31:45 +020075 virtual void OnIncomingPayloadType(int payload_type);
76 virtual void OnDecoderImplementationName(const char* implementation_name);
Henrik Kjellander2557b862015-11-18 22:00:21 +010077
78 protected:
philipel9d3ab612015-12-21 04:12:39 -080079 virtual ~VCMReceiveCallback() {}
Henrik Kjellander2557b862015-11-18 22:00:21 +010080};
81
philipel9d3ab612015-12-21 04:12:39 -080082// Callback class used for informing the user of the incoming bit rate and frame
83// rate.
Henrik Kjellander2557b862015-11-18 22:00:21 +010084class VCMReceiveStatisticsCallback {
85 public:
86 virtual void OnReceiveRatesUpdated(uint32_t bitRate, uint32_t frameRate) = 0;
ilnik6d5b4d62017-08-30 03:32:14 -070087 virtual void OnCompleteFrame(bool is_keyframe,
88 size_t size_bytes,
89 VideoContentType content_type) = 0;
Henrik Kjellander2557b862015-11-18 22:00:21 +010090 virtual void OnDiscardedPacketsUpdated(int discarded_packets) = 0;
91 virtual void OnFrameCountsUpdated(const FrameCounts& frame_counts) = 0;
philipela45102f2017-02-22 05:30:39 -080092 virtual void OnFrameBufferTimingsUpdated(int decode_ms,
93 int max_decode_ms,
94 int current_delay_ms,
95 int target_delay_ms,
96 int jitter_buffer_ms,
97 int min_playout_delay_ms,
98 int render_delay_ms) = 0;
Henrik Kjellander2557b862015-11-18 22:00:21 +010099
ilnik2edc6842017-07-06 03:06:50 -0700100 virtual void OnTimingFrameInfoUpdated(const TimingFrameInfo& info) = 0;
101
Henrik Kjellander2557b862015-11-18 22:00:21 +0100102 protected:
philipel9d3ab612015-12-21 04:12:39 -0800103 virtual ~VCMReceiveStatisticsCallback() {}
Henrik Kjellander2557b862015-11-18 22:00:21 +0100104};
105
philipel9d3ab612015-12-21 04:12:39 -0800106// Callback class used for telling the user about what frame type needed to
107// continue decoding.
Henrik Kjellander2557b862015-11-18 22:00:21 +0100108// Typically a key frame when the stream has been corrupted in some way.
109class VCMFrameTypeCallback {
110 public:
111 virtual int32_t RequestKeyFrame() = 0;
Henrik Kjellander2557b862015-11-18 22:00:21 +0100112
113 protected:
philipel9d3ab612015-12-21 04:12:39 -0800114 virtual ~VCMFrameTypeCallback() {}
Henrik Kjellander2557b862015-11-18 22:00:21 +0100115};
116
philipel9d3ab612015-12-21 04:12:39 -0800117// Callback class used for telling the user about which packet sequence numbers
118// are currently
Henrik Kjellander2557b862015-11-18 22:00:21 +0100119// missing and need to be resent.
philipel5ab4c6d2016-03-08 03:36:15 -0800120// TODO(philipel): Deprecate VCMPacketRequestCallback
121// and use NackSender instead.
Henrik Kjellander2557b862015-11-18 22:00:21 +0100122class VCMPacketRequestCallback {
123 public:
124 virtual int32_t ResendPackets(const uint16_t* sequenceNumbers,
philipel9d3ab612015-12-21 04:12:39 -0800125 uint16_t length) = 0;
Henrik Kjellander2557b862015-11-18 22:00:21 +0100126
127 protected:
philipel9d3ab612015-12-21 04:12:39 -0800128 virtual ~VCMPacketRequestCallback() {}
Henrik Kjellander2557b862015-11-18 22:00:21 +0100129};
130
Henrik Kjellander2557b862015-11-18 22:00:21 +0100131} // namespace webrtc
132
Mirko Bonadei92ea95e2017-09-15 06:47:31 +0200133#endif // MODULES_VIDEO_CODING_INCLUDE_VIDEO_CODING_DEFINES_H_