xref: /aosp_15_r20/external/webrtc/modules/video_coding/encoded_frame.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker 
11*d9f75844SAndroid Build Coastguard Worker #ifndef MODULES_VIDEO_CODING_ENCODED_FRAME_H_
12*d9f75844SAndroid Build Coastguard Worker #define MODULES_VIDEO_CODING_ENCODED_FRAME_H_
13*d9f75844SAndroid Build Coastguard Worker 
14*d9f75844SAndroid Build Coastguard Worker #include <vector>
15*d9f75844SAndroid Build Coastguard Worker 
16*d9f75844SAndroid Build Coastguard Worker #include "api/video/encoded_image.h"
17*d9f75844SAndroid Build Coastguard Worker #include "modules/rtp_rtcp/source/rtp_video_header.h"
18*d9f75844SAndroid Build Coastguard Worker #include "modules/video_coding/include/video_codec_interface.h"
19*d9f75844SAndroid Build Coastguard Worker #include "modules/video_coding/include/video_coding_defines.h"
20*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/system/rtc_export.h"
21*d9f75844SAndroid Build Coastguard Worker 
22*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
23*d9f75844SAndroid Build Coastguard Worker 
24*d9f75844SAndroid Build Coastguard Worker class RTC_EXPORT VCMEncodedFrame : public EncodedImage {
25*d9f75844SAndroid Build Coastguard Worker  public:
26*d9f75844SAndroid Build Coastguard Worker   VCMEncodedFrame();
27*d9f75844SAndroid Build Coastguard Worker   VCMEncodedFrame(const VCMEncodedFrame&);
28*d9f75844SAndroid Build Coastguard Worker 
29*d9f75844SAndroid Build Coastguard Worker   ~VCMEncodedFrame();
30*d9f75844SAndroid Build Coastguard Worker   /**
31*d9f75844SAndroid Build Coastguard Worker    *   Set render time in milliseconds
32*d9f75844SAndroid Build Coastguard Worker    */
SetRenderTime(const int64_t renderTimeMs)33*d9f75844SAndroid Build Coastguard Worker   void SetRenderTime(const int64_t renderTimeMs) {
34*d9f75844SAndroid Build Coastguard Worker     _renderTimeMs = renderTimeMs;
35*d9f75844SAndroid Build Coastguard Worker   }
36*d9f75844SAndroid Build Coastguard Worker 
PlayoutDelay()37*d9f75844SAndroid Build Coastguard Worker   VideoPlayoutDelay PlayoutDelay() const { return playout_delay_; }
38*d9f75844SAndroid Build Coastguard Worker 
SetPlayoutDelay(VideoPlayoutDelay playout_delay)39*d9f75844SAndroid Build Coastguard Worker   void SetPlayoutDelay(VideoPlayoutDelay playout_delay) {
40*d9f75844SAndroid Build Coastguard Worker     playout_delay_ = playout_delay;
41*d9f75844SAndroid Build Coastguard Worker   }
42*d9f75844SAndroid Build Coastguard Worker 
43*d9f75844SAndroid Build Coastguard Worker   /**
44*d9f75844SAndroid Build Coastguard Worker    *   Get the encoded image
45*d9f75844SAndroid Build Coastguard Worker    */
EncodedImage()46*d9f75844SAndroid Build Coastguard Worker   const webrtc::EncodedImage& EncodedImage() const {
47*d9f75844SAndroid Build Coastguard Worker     return static_cast<const webrtc::EncodedImage&>(*this);
48*d9f75844SAndroid Build Coastguard Worker   }
49*d9f75844SAndroid Build Coastguard Worker 
50*d9f75844SAndroid Build Coastguard Worker   using EncodedImage::ColorSpace;
51*d9f75844SAndroid Build Coastguard Worker   using EncodedImage::data;
52*d9f75844SAndroid Build Coastguard Worker   using EncodedImage::GetEncodedData;
53*d9f75844SAndroid Build Coastguard Worker   using EncodedImage::NtpTimeMs;
54*d9f75844SAndroid Build Coastguard Worker   using EncodedImage::PacketInfos;
55*d9f75844SAndroid Build Coastguard Worker   using EncodedImage::set_size;
56*d9f75844SAndroid Build Coastguard Worker   using EncodedImage::SetColorSpace;
57*d9f75844SAndroid Build Coastguard Worker   using EncodedImage::SetEncodedData;
58*d9f75844SAndroid Build Coastguard Worker   using EncodedImage::SetPacketInfos;
59*d9f75844SAndroid Build Coastguard Worker   using EncodedImage::SetSpatialIndex;
60*d9f75844SAndroid Build Coastguard Worker   using EncodedImage::SetSpatialLayerFrameSize;
61*d9f75844SAndroid Build Coastguard Worker   using EncodedImage::SetTimestamp;
62*d9f75844SAndroid Build Coastguard Worker   using EncodedImage::size;
63*d9f75844SAndroid Build Coastguard Worker   using EncodedImage::SpatialIndex;
64*d9f75844SAndroid Build Coastguard Worker   using EncodedImage::SpatialLayerFrameSize;
65*d9f75844SAndroid Build Coastguard Worker   using EncodedImage::Timestamp;
66*d9f75844SAndroid Build Coastguard Worker 
67*d9f75844SAndroid Build Coastguard Worker   /**
68*d9f75844SAndroid Build Coastguard Worker    *   Get render time in milliseconds
69*d9f75844SAndroid Build Coastguard Worker    */
RenderTimeMs()70*d9f75844SAndroid Build Coastguard Worker   int64_t RenderTimeMs() const { return _renderTimeMs; }
71*d9f75844SAndroid Build Coastguard Worker   /**
72*d9f75844SAndroid Build Coastguard Worker    *   Get frame type
73*d9f75844SAndroid Build Coastguard Worker    */
FrameType()74*d9f75844SAndroid Build Coastguard Worker   webrtc::VideoFrameType FrameType() const { return _frameType; }
75*d9f75844SAndroid Build Coastguard Worker   /**
76*d9f75844SAndroid Build Coastguard Worker    *   Set frame type
77*d9f75844SAndroid Build Coastguard Worker    */
SetFrameType(webrtc::VideoFrameType frame_type)78*d9f75844SAndroid Build Coastguard Worker   void SetFrameType(webrtc::VideoFrameType frame_type) {
79*d9f75844SAndroid Build Coastguard Worker     _frameType = frame_type;
80*d9f75844SAndroid Build Coastguard Worker   }
81*d9f75844SAndroid Build Coastguard Worker   /**
82*d9f75844SAndroid Build Coastguard Worker    *   Get frame rotation
83*d9f75844SAndroid Build Coastguard Worker    */
rotation()84*d9f75844SAndroid Build Coastguard Worker   VideoRotation rotation() const { return rotation_; }
85*d9f75844SAndroid Build Coastguard Worker   /**
86*d9f75844SAndroid Build Coastguard Worker    *  Get video content type
87*d9f75844SAndroid Build Coastguard Worker    */
contentType()88*d9f75844SAndroid Build Coastguard Worker   VideoContentType contentType() const { return content_type_; }
89*d9f75844SAndroid Build Coastguard Worker   /**
90*d9f75844SAndroid Build Coastguard Worker    * Get video timing
91*d9f75844SAndroid Build Coastguard Worker    */
video_timing()92*d9f75844SAndroid Build Coastguard Worker   EncodedImage::Timing video_timing() const { return timing_; }
video_timing_mutable()93*d9f75844SAndroid Build Coastguard Worker   EncodedImage::Timing* video_timing_mutable() { return &timing_; }
94*d9f75844SAndroid Build Coastguard Worker   /**
95*d9f75844SAndroid Build Coastguard Worker    *   True if there's a frame missing before this frame
96*d9f75844SAndroid Build Coastguard Worker    */
MissingFrame()97*d9f75844SAndroid Build Coastguard Worker   bool MissingFrame() const { return _missingFrame; }
98*d9f75844SAndroid Build Coastguard Worker   /**
99*d9f75844SAndroid Build Coastguard Worker    *   Payload type of the encoded payload
100*d9f75844SAndroid Build Coastguard Worker    */
PayloadType()101*d9f75844SAndroid Build Coastguard Worker   uint8_t PayloadType() const { return _payloadType; }
102*d9f75844SAndroid Build Coastguard Worker   /**
103*d9f75844SAndroid Build Coastguard Worker    *   Get codec specific info.
104*d9f75844SAndroid Build Coastguard Worker    *   The returned pointer is only valid as long as the VCMEncodedFrame
105*d9f75844SAndroid Build Coastguard Worker    *   is valid. Also, VCMEncodedFrame owns the pointer and will delete
106*d9f75844SAndroid Build Coastguard Worker    *   the object.
107*d9f75844SAndroid Build Coastguard Worker    */
CodecSpecific()108*d9f75844SAndroid Build Coastguard Worker   const CodecSpecificInfo* CodecSpecific() const { return &_codecSpecificInfo; }
SetCodecSpecific(const CodecSpecificInfo * codec_specific)109*d9f75844SAndroid Build Coastguard Worker   void SetCodecSpecific(const CodecSpecificInfo* codec_specific) {
110*d9f75844SAndroid Build Coastguard Worker     _codecSpecificInfo = *codec_specific;
111*d9f75844SAndroid Build Coastguard Worker   }
112*d9f75844SAndroid Build Coastguard Worker 
113*d9f75844SAndroid Build Coastguard Worker  protected:
114*d9f75844SAndroid Build Coastguard Worker   void Reset();
115*d9f75844SAndroid Build Coastguard Worker 
116*d9f75844SAndroid Build Coastguard Worker   void CopyCodecSpecific(const RTPVideoHeader* header);
117*d9f75844SAndroid Build Coastguard Worker 
118*d9f75844SAndroid Build Coastguard Worker   int64_t _renderTimeMs;
119*d9f75844SAndroid Build Coastguard Worker   uint8_t _payloadType;
120*d9f75844SAndroid Build Coastguard Worker   bool _missingFrame;
121*d9f75844SAndroid Build Coastguard Worker   CodecSpecificInfo _codecSpecificInfo;
122*d9f75844SAndroid Build Coastguard Worker   webrtc::VideoCodecType _codec;
123*d9f75844SAndroid Build Coastguard Worker };
124*d9f75844SAndroid Build Coastguard Worker 
125*d9f75844SAndroid Build Coastguard Worker }  // namespace webrtc
126*d9f75844SAndroid Build Coastguard Worker 
127*d9f75844SAndroid Build Coastguard Worker #endif  // MODULES_VIDEO_CODING_ENCODED_FRAME_H_
128