Index: webrtc/modules/video_coding/codecs/i420/i420.cc |
diff --git a/webrtc/modules/video_coding/codecs/i420/i420.cc b/webrtc/modules/video_coding/codecs/i420/i420.cc |
deleted file mode 100644 |
index 93204dde9ce72f1e04032757def1dae5f902d8a8..0000000000000000000000000000000000000000 |
--- a/webrtc/modules/video_coding/codecs/i420/i420.cc |
+++ /dev/null |
@@ -1,237 +0,0 @@ |
-/* |
- * Copyright (c) 2012 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. |
- */ |
- |
-#include "webrtc/modules/video_coding/codecs/i420/include/i420.h" |
- |
-#include <limits> |
-#include <string> |
- |
-#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" |
- |
-namespace { |
-const size_t kI420HeaderSize = 4; |
-} |
- |
-namespace webrtc { |
- |
-I420Encoder::I420Encoder() |
- : _inited(false), _encodedImage(), _encodedCompleteCallback(NULL) {} |
- |
-I420Encoder::~I420Encoder() { |
- _inited = false; |
- delete[] _encodedImage._buffer; |
-} |
- |
-int I420Encoder::Release() { |
- // Should allocate an encoded frame and then release it here, for that we |
- // actually need an init flag. |
- if (_encodedImage._buffer != NULL) { |
- delete[] _encodedImage._buffer; |
- _encodedImage._buffer = NULL; |
- } |
- _inited = false; |
- return WEBRTC_VIDEO_CODEC_OK; |
-} |
- |
-int I420Encoder::InitEncode(const VideoCodec* codecSettings, |
- int /*numberOfCores*/, |
- size_t /*maxPayloadSize */) { |
- if (codecSettings == NULL) { |
- return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; |
- } |
- if (codecSettings->width < 1 || codecSettings->height < 1) { |
- return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; |
- } |
- |
- // Allocating encoded memory. |
- if (_encodedImage._buffer != NULL) { |
- delete[] _encodedImage._buffer; |
- _encodedImage._buffer = NULL; |
- _encodedImage._size = 0; |
- } |
- const size_t newSize = |
- CalcBufferSize(kI420, codecSettings->width, codecSettings->height) + |
- kI420HeaderSize; |
- uint8_t* newBuffer = new uint8_t[newSize]; |
- if (newBuffer == NULL) { |
- return WEBRTC_VIDEO_CODEC_MEMORY; |
- } |
- _encodedImage._size = newSize; |
- _encodedImage._buffer = newBuffer; |
- |
- // If no memory allocation, no point to init. |
- _inited = true; |
- return WEBRTC_VIDEO_CODEC_OK; |
-} |
- |
-int I420Encoder::Encode(const VideoFrame& inputImage, |
- const CodecSpecificInfo* /*codecSpecificInfo*/, |
- const std::vector<FrameType>* /*frame_types*/) { |
- if (!_inited) { |
- return WEBRTC_VIDEO_CODEC_UNINITIALIZED; |
- } |
- if (_encodedCompleteCallback == NULL) { |
- return WEBRTC_VIDEO_CODEC_UNINITIALIZED; |
- } |
- |
- _encodedImage._frameType = kVideoFrameKey; |
- _encodedImage._timeStamp = inputImage.timestamp(); |
- _encodedImage._encodedHeight = inputImage.height(); |
- _encodedImage._encodedWidth = inputImage.width(); |
- |
- int width = inputImage.width(); |
- if (width > std::numeric_limits<uint16_t>::max()) { |
- return WEBRTC_VIDEO_CODEC_ERR_SIZE; |
- } |
- int height = inputImage.height(); |
- if (height > std::numeric_limits<uint16_t>::max()) { |
- return WEBRTC_VIDEO_CODEC_ERR_SIZE; |
- } |
- |
- size_t req_length = |
- CalcBufferSize(kI420, inputImage.width(), inputImage.height()) + |
- kI420HeaderSize; |
- if (_encodedImage._size > req_length) { |
- // Reallocate buffer. |
- delete[] _encodedImage._buffer; |
- |
- _encodedImage._buffer = new uint8_t[req_length]; |
- _encodedImage._size = req_length; |
- } |
- |
- uint8_t* buffer = _encodedImage._buffer; |
- |
- buffer = InsertHeader(buffer, width, height); |
- |
- int ret_length = |
- ExtractBuffer(inputImage, req_length - kI420HeaderSize, buffer); |
- if (ret_length < 0) |
- return WEBRTC_VIDEO_CODEC_MEMORY; |
- _encodedImage._length = ret_length + kI420HeaderSize; |
- |
- _encodedCompleteCallback->Encoded(_encodedImage, NULL, NULL); |
- return WEBRTC_VIDEO_CODEC_OK; |
-} |
- |
-uint8_t* I420Encoder::InsertHeader(uint8_t* buffer, |
- uint16_t width, |
- uint16_t height) { |
- *buffer++ = static_cast<uint8_t>(width >> 8); |
- *buffer++ = static_cast<uint8_t>(width & 0xFF); |
- *buffer++ = static_cast<uint8_t>(height >> 8); |
- *buffer++ = static_cast<uint8_t>(height & 0xFF); |
- return buffer; |
-} |
- |
-int I420Encoder::RegisterEncodeCompleteCallback( |
- EncodedImageCallback* callback) { |
- _encodedCompleteCallback = callback; |
- return WEBRTC_VIDEO_CODEC_OK; |
-} |
- |
-I420Decoder::I420Decoder() |
- : _decodedImage(), |
- _width(0), |
- _height(0), |
- _inited(false), |
- _decodeCompleteCallback(NULL) {} |
- |
-I420Decoder::~I420Decoder() { |
- Release(); |
-} |
- |
-int I420Decoder::InitDecode(const VideoCodec* codecSettings, |
- int /*numberOfCores */) { |
- if (codecSettings == NULL) { |
- return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; |
- } else if (codecSettings->width < 1 || codecSettings->height < 1) { |
- return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; |
- } |
- _width = codecSettings->width; |
- _height = codecSettings->height; |
- _inited = true; |
- return WEBRTC_VIDEO_CODEC_OK; |
-} |
- |
-int I420Decoder::Decode(const EncodedImage& inputImage, |
- bool /*missingFrames*/, |
- const RTPFragmentationHeader* /*fragmentation*/, |
- const CodecSpecificInfo* /*codecSpecificInfo*/, |
- int64_t /*renderTimeMs*/) { |
- if (inputImage._buffer == NULL) { |
- return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; |
- } |
- if (_decodeCompleteCallback == NULL) { |
- return WEBRTC_VIDEO_CODEC_UNINITIALIZED; |
- } |
- if (inputImage._length <= 0) { |
- return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; |
- } |
- if (inputImage._completeFrame == false) { |
- return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; |
- } |
- if (!_inited) { |
- return WEBRTC_VIDEO_CODEC_UNINITIALIZED; |
- } |
- if (inputImage._length < kI420HeaderSize) { |
- return WEBRTC_VIDEO_CODEC_ERROR; |
- } |
- |
- const uint8_t* buffer = inputImage._buffer; |
- uint16_t width, height; |
- |
- buffer = ExtractHeader(buffer, &width, &height); |
- _width = width; |
- _height = height; |
- |
- // Verify that the available length is sufficient: |
- size_t req_length = CalcBufferSize(kI420, _width, _height) + kI420HeaderSize; |
- |
- if (req_length > inputImage._length) { |
- return WEBRTC_VIDEO_CODEC_ERROR; |
- } |
- // Set decoded image parameters. |
- int half_width = (_width + 1) / 2; |
- _decodedImage.CreateEmptyFrame(_width, _height, _width, half_width, |
- half_width); |
- // Converting from buffer to plane representation. |
- int ret = ConvertToI420(kI420, buffer, 0, 0, _width, _height, 0, |
- kVideoRotation_0, &_decodedImage); |
- if (ret < 0) { |
- return WEBRTC_VIDEO_CODEC_MEMORY; |
- } |
- _decodedImage.set_timestamp(inputImage._timeStamp); |
- |
- _decodeCompleteCallback->Decoded(_decodedImage); |
- return WEBRTC_VIDEO_CODEC_OK; |
-} |
- |
-const uint8_t* I420Decoder::ExtractHeader(const uint8_t* buffer, |
- uint16_t* width, |
- uint16_t* height) { |
- *width = static_cast<uint16_t>(*buffer++) << 8; |
- *width |= *buffer++; |
- *height = static_cast<uint16_t>(*buffer++) << 8; |
- *height |= *buffer++; |
- |
- return buffer; |
-} |
- |
-int I420Decoder::RegisterDecodeCompleteCallback( |
- DecodedImageCallback* callback) { |
- _decodeCompleteCallback = callback; |
- return WEBRTC_VIDEO_CODEC_OK; |
-} |
- |
-int I420Decoder::Release() { |
- _inited = false; |
- return WEBRTC_VIDEO_CODEC_OK; |
-} |
-} // namespace webrtc |