diff options
Diffstat (limited to 'webrtc/modules/video_coding/encoded_frame.h')
-rw-r--r-- | webrtc/modules/video_coding/encoded_frame.h | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/webrtc/modules/video_coding/encoded_frame.h b/webrtc/modules/video_coding/encoded_frame.h new file mode 100644 index 0000000000..9034200980 --- /dev/null +++ b/webrtc/modules/video_coding/encoded_frame.h @@ -0,0 +1,132 @@ +/* + * 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 WEBRTC_MODULES_VIDEO_CODING_ENCODED_FRAME_H_ +#define WEBRTC_MODULES_VIDEO_CODING_ENCODED_FRAME_H_ + +#include <vector> + +#include "webrtc/common_types.h" +#include "webrtc/common_video/include/video_image.h" +#include "webrtc/modules/include/module_common_types.h" +#include "webrtc/modules/video_coding/include/video_codec_interface.h" +#include "webrtc/modules/video_coding/include/video_coding_defines.h" + +namespace webrtc { + +class VCMEncodedFrame : protected EncodedImage { + public: + VCMEncodedFrame(); + explicit VCMEncodedFrame(const webrtc::EncodedImage& rhs); + VCMEncodedFrame(const VCMEncodedFrame& rhs); + + ~VCMEncodedFrame(); + /** + * Delete VideoFrame and resets members to zero + */ + void Free(); + /** + * Set render time in milliseconds + */ + void SetRenderTime(const int64_t renderTimeMs) { + _renderTimeMs = renderTimeMs; + } + + /** + * Set the encoded frame size + */ + void SetEncodedSize(uint32_t width, uint32_t height) { + _encodedWidth = width; + _encodedHeight = height; + } + /** + * Get the encoded image + */ + const webrtc::EncodedImage& EncodedImage() const { + return static_cast<const webrtc::EncodedImage&>(*this); + } + /** + * Get pointer to frame buffer + */ + const uint8_t* Buffer() const { return _buffer; } + /** + * Get frame length + */ + size_t Length() const { return _length; } + /** + * Get frame timestamp (90kHz) + */ + uint32_t TimeStamp() const { return _timeStamp; } + /** + * Get render time in milliseconds + */ + int64_t RenderTimeMs() const { return _renderTimeMs; } + /** + * Get frame type + */ + webrtc::FrameType FrameType() const { return _frameType; } + /** + * Get frame rotation + */ + VideoRotation rotation() const { return _rotation; } + /** + * True if this frame is complete, false otherwise + */ + bool Complete() const { return _completeFrame; } + /** + * 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; } + + const RTPFragmentationHeader* FragmentationHeader() const; + + protected: + /** + * Verifies that current allocated buffer size is larger than or equal to the + * input size. + * If the current buffer size is smaller, a new allocation is made and the old + * buffer data + * is copied to the new buffer. + * Buffer size is updated to minimumSize. + */ + void VerifyAndAllocate(size_t minimumSize); + + void Reset(); + + void CopyCodecSpecific(const RTPVideoHeader* header); + + int64_t _renderTimeMs; + uint8_t _payloadType; + bool _missingFrame; + CodecSpecificInfo _codecSpecificInfo; + webrtc::VideoCodecType _codec; + RTPFragmentationHeader _fragmentation; + VideoRotation _rotation; + + // Video rotation is only set along with the last packet for each frame + // (same as marker bit). This |_rotation_set| is only for debugging purpose + // to ensure we don't set it twice for a frame. + bool _rotation_set; +}; + +} // namespace webrtc + +#endif // WEBRTC_MODULES_VIDEO_CODING_ENCODED_FRAME_H_ |