| /* |
| * Copyright 2017 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. |
| */ |
| |
| #import "WebRTC/RTCVideoCodec.h" |
| |
| #import "RTCVideoCodec+Private.h" |
| |
| #include "rtc_base/safe_conversions.h" |
| |
| @implementation RTCEncodedImage |
| |
| @synthesize buffer = _buffer; |
| @synthesize encodedWidth = _encodedWidth; |
| @synthesize encodedHeight = _encodedHeight; |
| @synthesize timeStamp = _timeStamp; |
| @synthesize captureTimeMs = _captureTimeMs; |
| @synthesize ntpTimeMs = _ntpTimeMs; |
| @synthesize flags = _flags; |
| @synthesize encodeStartMs = _encodeStartMs; |
| @synthesize encodeFinishMs = _encodeFinishMs; |
| @synthesize frameType = _frameType; |
| @synthesize rotation = _rotation; |
| @synthesize completeFrame = _completeFrame; |
| @synthesize qp = _qp; |
| @synthesize contentType = _contentType; |
| |
| - (instancetype)initWithNativeEncodedImage:(webrtc::EncodedImage)encodedImage { |
| if (self = [super init]) { |
| // Wrap the buffer in NSData without copying, do not take ownership. |
| _buffer = [NSData dataWithBytesNoCopy:encodedImage._buffer |
| length:encodedImage._length |
| freeWhenDone:NO]; |
| _encodedWidth = rtc::dchecked_cast<int32_t>(encodedImage._encodedWidth); |
| _encodedHeight = rtc::dchecked_cast<int32_t>(encodedImage._encodedHeight); |
| _timeStamp = encodedImage._timeStamp; |
| _captureTimeMs = encodedImage.capture_time_ms_; |
| _ntpTimeMs = encodedImage.ntp_time_ms_; |
| _flags = encodedImage.timing_.flags; |
| _encodeStartMs = encodedImage.timing_.encode_start_ms; |
| _encodeFinishMs = encodedImage.timing_.encode_finish_ms; |
| _frameType = static_cast<RTCFrameType>(encodedImage._frameType); |
| _rotation = static_cast<RTCVideoRotation>(encodedImage.rotation_); |
| _completeFrame = encodedImage._completeFrame; |
| _qp = encodedImage.qp_ == -1 ? nil : @(encodedImage.qp_); |
| _contentType = (encodedImage.content_type_ == webrtc::VideoContentType::SCREENSHARE) ? |
| RTCVideoContentTypeScreenshare : |
| RTCVideoContentTypeUnspecified; |
| } |
| |
| return self; |
| } |
| |
| - (webrtc::EncodedImage)nativeEncodedImage { |
| // Return the pointer without copying. |
| webrtc::EncodedImage encodedImage( |
| (uint8_t *)_buffer.bytes, (size_t)_buffer.length, (size_t)_buffer.length); |
| encodedImage._encodedWidth = rtc::dchecked_cast<uint32_t>(_encodedWidth); |
| encodedImage._encodedHeight = rtc::dchecked_cast<uint32_t>(_encodedHeight); |
| encodedImage._timeStamp = _timeStamp; |
| encodedImage.capture_time_ms_ = _captureTimeMs; |
| encodedImage.ntp_time_ms_ = _ntpTimeMs; |
| encodedImage.timing_.flags = _flags; |
| encodedImage.timing_.encode_start_ms = _encodeStartMs; |
| encodedImage.timing_.encode_finish_ms = _encodeFinishMs; |
| encodedImage._frameType = webrtc::FrameType(_frameType); |
| encodedImage.rotation_ = webrtc::VideoRotation(_rotation); |
| encodedImage._completeFrame = _completeFrame; |
| encodedImage.qp_ = _qp ? _qp.intValue : -1; |
| encodedImage.content_type_ = (_contentType == RTCVideoContentTypeScreenshare) ? |
| webrtc::VideoContentType::SCREENSHARE : |
| webrtc::VideoContentType::UNSPECIFIED; |
| |
| return encodedImage; |
| } |
| |
| @end |