|  | /* | 
|  | *  Copyright (c) 2011 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_VIDEO_CODING_ENCODED_FRAME_H_ | 
|  | #define MODULES_VIDEO_CODING_ENCODED_FRAME_H_ | 
|  |  | 
|  | #include <cstdint> | 
|  |  | 
|  | #include "api/video/encoded_image.h" | 
|  | #include "api/video/video_codec_type.h" | 
|  | #include "modules/rtp_rtcp/source/rtp_video_header.h" | 
|  | #include "modules/video_coding/include/video_codec_interface.h" | 
|  | #include "rtc_base/system/rtc_export.h" | 
|  |  | 
|  | namespace webrtc { | 
|  |  | 
|  | class RTC_EXPORT VCMEncodedFrame : public EncodedImage { | 
|  | public: | 
|  | VCMEncodedFrame(); | 
|  | VCMEncodedFrame(const VCMEncodedFrame&); | 
|  |  | 
|  | ~VCMEncodedFrame(); | 
|  | /** | 
|  | *   Set render time in milliseconds | 
|  | */ | 
|  | void SetRenderTime(const int64_t renderTimeMs) { | 
|  | _renderTimeMs = renderTimeMs; | 
|  | } | 
|  |  | 
|  | /** | 
|  | *   Get the encoded image | 
|  | */ | 
|  | const EncodedImage& EncodedImage() const { | 
|  | return static_cast<const ::webrtc::EncodedImage&>(*this); | 
|  | } | 
|  |  | 
|  | using EncodedImage::ColorSpace; | 
|  | using EncodedImage::data; | 
|  | using EncodedImage::GetEncodedData; | 
|  | using EncodedImage::NtpTimeMs; | 
|  | using EncodedImage::PacketInfos; | 
|  | using EncodedImage::RtpTimestamp; | 
|  | using EncodedImage::set_size; | 
|  | using EncodedImage::SetColorSpace; | 
|  | using EncodedImage::SetEncodedData; | 
|  | using EncodedImage::SetPacketInfos; | 
|  | using EncodedImage::SetRtpTimestamp; | 
|  | using EncodedImage::SetSpatialIndex; | 
|  | using EncodedImage::SetSpatialLayerFrameSize; | 
|  | using EncodedImage::size; | 
|  | using EncodedImage::SpatialIndex; | 
|  | using EncodedImage::SpatialLayerFrameSize; | 
|  |  | 
|  | /** | 
|  | *   Get render time in milliseconds | 
|  | */ | 
|  | int64_t RenderTimeMs() const { return _renderTimeMs; } | 
|  | /** | 
|  | *   True if there's a frame missing before this frame | 
|  | */ | 
|  | bool MissingFrame() const { return _missingFrame; } | 
|  | /** | 
|  | *   Payload type of the encoded payload | 
|  | */ | 
|  | uint8_t PayloadType() const { return _payloadType; } | 
|  | /** | 
|  | *   Get codec specific info. | 
|  | *   The returned pointer is only valid as long as the VCMEncodedFrame | 
|  | *   is valid. Also, VCMEncodedFrame owns the pointer and will delete | 
|  | *   the object. | 
|  | */ | 
|  | const CodecSpecificInfo* CodecSpecific() const { return &_codecSpecificInfo; } | 
|  | void SetCodecSpecific(const CodecSpecificInfo* codec_specific) { | 
|  | _codecSpecificInfo = *codec_specific; | 
|  | } | 
|  |  | 
|  | protected: | 
|  | void Reset(); | 
|  |  | 
|  | void CopyCodecSpecific(const RTPVideoHeader* header); | 
|  |  | 
|  | int64_t _renderTimeMs; | 
|  | uint8_t _payloadType; | 
|  | bool _missingFrame; | 
|  | CodecSpecificInfo _codecSpecificInfo; | 
|  | VideoCodecType _codec; | 
|  | }; | 
|  |  | 
|  | }  // namespace webrtc | 
|  |  | 
|  | #endif  // MODULES_VIDEO_CODING_ENCODED_FRAME_H_ |