• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2011 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_ENCODED_FRAME_H_
12 #define WEBRTC_MODULES_VIDEO_CODING_ENCODED_FRAME_H_
13 
14 #include <vector>
15 
16 #include "webrtc/common_types.h"
17 #include "webrtc/common_video/interface/video_image.h"
18 #include "webrtc/modules/interface/module_common_types.h"
19 #include "webrtc/modules/video_coding/codecs/interface/video_codec_interface.h"
20 #include "webrtc/modules/video_coding/main/interface/video_coding_defines.h"
21 
22 namespace webrtc
23 {
24 
25 class VCMEncodedFrame : protected EncodedImage
26 {
27 public:
28     VCMEncodedFrame();
29     VCMEncodedFrame(const webrtc::EncodedImage& rhs);
30     VCMEncodedFrame(const VCMEncodedFrame& rhs);
31 
32     ~VCMEncodedFrame();
33     /**
34     *   Delete VideoFrame and resets members to zero
35     */
36     void Free();
37     /**
38     *   Set render time in milliseconds
39     */
SetRenderTime(const int64_t renderTimeMs)40     void SetRenderTime(const int64_t renderTimeMs) {_renderTimeMs = renderTimeMs;}
41 
42     /**
43     *   Set the encoded frame size
44     */
SetEncodedSize(uint32_t width,uint32_t height)45     void SetEncodedSize(uint32_t width, uint32_t height)
46                        { _encodedWidth  = width; _encodedHeight = height; }
47     /**
48     *   Get the encoded image
49     */
EncodedImage()50     const webrtc::EncodedImage& EncodedImage() const
51                        { return static_cast<const webrtc::EncodedImage&>(*this); }
52     /**
53     *   Get pointer to frame buffer
54     */
Buffer()55     const uint8_t* Buffer() const {return _buffer;}
56     /**
57     *   Get frame length
58     */
Length()59     uint32_t Length() const {return _length;}
60     /**
61     *   Get frame timestamp (90kHz)
62     */
TimeStamp()63     uint32_t TimeStamp() const {return _timeStamp;}
64     /**
65     *   Get render time in milliseconds
66     */
RenderTimeMs()67     int64_t RenderTimeMs() const {return _renderTimeMs;}
68     /**
69     *   Get frame type
70     */
FrameType()71     webrtc::FrameType FrameType() const {return ConvertFrameType(_frameType);}
72     /**
73     *   True if this frame is complete, false otherwise
74     */
Complete()75     bool Complete() const { return _completeFrame; }
76     /**
77     *   True if there's a frame missing before this frame
78     */
MissingFrame()79     bool MissingFrame() const { return _missingFrame; }
80     /**
81     *   Payload type of the encoded payload
82     */
PayloadType()83     uint8_t PayloadType() const { return _payloadType; }
84     /**
85     *   Get codec specific info.
86     *   The returned pointer is only valid as long as the VCMEncodedFrame
87     *   is valid. Also, VCMEncodedFrame owns the pointer and will delete
88     *   the object.
89     */
CodecSpecific()90     const CodecSpecificInfo* CodecSpecific() const {return &_codecSpecificInfo;}
91 
92     const RTPFragmentationHeader* FragmentationHeader() const;
93 
94     static webrtc::FrameType ConvertFrameType(VideoFrameType frameType);
95     static VideoFrameType ConvertFrameType(webrtc::FrameType frameType);
96     static void ConvertFrameTypes(
97         const std::vector<webrtc::FrameType>& frame_types,
98         std::vector<VideoFrameType>* video_frame_types);
99 
100 protected:
101     /**
102     * Verifies that current allocated buffer size is larger than or equal to the input size.
103     * If the current buffer size is smaller, a new allocation is made and the old buffer data
104     * is copied to the new buffer.
105     * Buffer size is updated to minimumSize.
106     */
107     void VerifyAndAllocate(const uint32_t minimumSize);
108 
109     void Reset();
110 
111     void CopyCodecSpecific(const RTPVideoHeader* header);
112 
113     int64_t                 _renderTimeMs;
114     uint8_t                 _payloadType;
115     bool                          _missingFrame;
116     CodecSpecificInfo             _codecSpecificInfo;
117     webrtc::VideoCodecType        _codec;
118     RTPFragmentationHeader        _fragmentation;
119 };
120 
121 }  // namespace webrtc
122 
123 #endif // WEBRTC_MODULES_VIDEO_CODING_ENCODED_FRAME_H_
124