1 /*
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 
11 #ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_INTERFACE_VIDEO_CODEC_INTERFACE_H_
12 #define WEBRTC_MODULES_VIDEO_CODING_CODECS_INTERFACE_VIDEO_CODEC_INTERFACE_H_
13 
14 #pragma message("WARNING: video_coding/codecs/interface is DEPRECATED; "
15     "use video_coding/include")
16 #include <vector>
17 
18 #include "webrtc/common_types.h"
19 #include "webrtc/modules/include/module_common_types.h"
20 #include "webrtc/modules/video_coding/include/video_error_codes.h"
21 #include "webrtc/typedefs.h"
22 #include "webrtc/video_decoder.h"
23 #include "webrtc/video_encoder.h"
24 #include "webrtc/video_frame.h"
25 
26 namespace webrtc {
27 
28 class RTPFragmentationHeader;  // forward declaration
29 
30 // Note: if any pointers are added to this struct, it must be fitted
31 // with a copy-constructor. See below.
32 struct CodecSpecificInfoVP8 {
33   bool hasReceivedSLI;
34   uint8_t pictureIdSLI;
35   bool hasReceivedRPSI;
36   uint64_t pictureIdRPSI;
37   int16_t pictureId;  // Negative value to skip pictureId.
38   bool nonReference;
39   uint8_t simulcastIdx;
40   uint8_t temporalIdx;
41   bool layerSync;
42   int tl0PicIdx;  // Negative value to skip tl0PicIdx.
43   int8_t keyIdx;  // Negative value to skip keyIdx.
44 };
45 
46 struct CodecSpecificInfoVP9 {
47   bool has_received_sli;
48   uint8_t picture_id_sli;
49   bool has_received_rpsi;
50   uint64_t picture_id_rpsi;
51   int16_t picture_id;  // Negative value to skip pictureId.
52 
53   bool inter_pic_predicted;  // This layer frame is dependent on previously
54                              // coded frame(s).
55   bool flexible_mode;
56   bool ss_data_available;
57 
58   int tl0_pic_idx;  // Negative value to skip tl0PicIdx.
59   uint8_t temporal_idx;
60   uint8_t spatial_idx;
61   bool temporal_up_switch;
62   bool inter_layer_predicted;  // Frame is dependent on directly lower spatial
63                                // layer frame.
64   uint8_t gof_idx;
65 
66   // SS data.
67   size_t num_spatial_layers;  // Always populated.
68   bool spatial_layer_resolution_present;
69   uint16_t width[kMaxVp9NumberOfSpatialLayers];
70   uint16_t height[kMaxVp9NumberOfSpatialLayers];
71   GofInfoVP9 gof;
72 
73   // Frame reference data.
74   uint8_t num_ref_pics;
75   uint8_t p_diff[kMaxVp9RefPics];
76 };
77 
78 struct CodecSpecificInfoGeneric {
79   uint8_t simulcast_idx;
80 };
81 
82 struct CodecSpecificInfoH264 {};
83 
84 union CodecSpecificInfoUnion {
85   CodecSpecificInfoGeneric generic;
86   CodecSpecificInfoVP8 VP8;
87   CodecSpecificInfoVP9 VP9;
88   CodecSpecificInfoH264 H264;
89 };
90 
91 // Note: if any pointers are added to this struct or its sub-structs, it
92 // must be fitted with a copy-constructor. This is because it is copied
93 // in the copy-constructor of VCMEncodedFrame.
94 struct CodecSpecificInfo {
95   VideoCodecType codecType;
96   CodecSpecificInfoUnion codecSpecific;
97 };
98 
99 }  // namespace webrtc
100 
101 #endif  // WEBRTC_MODULES_VIDEO_CODING_CODECS_INTERFACE_VIDEO_CODEC_INTERFACE_H_
102