aboutsummaryrefslogtreecommitdiff
path: root/webrtc/modules/video_coding/codecs/i420
diff options
context:
space:
mode:
authorpbos@webrtc.org <pbos@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2013-03-19 11:39:03 +0000
committerpbos@webrtc.org <pbos@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2013-03-19 11:39:03 +0000
commit8685090060a2b565b5a0dd90df74a52f3de6e127 (patch)
tree5edfa35368dedd95138c5589196d5985a8257a93 /webrtc/modules/video_coding/codecs/i420
parent3d0b0d6902ad541fc5246832991435371f1a8c4c (diff)
downloadwebrtc-8685090060a2b565b5a0dd90df74a52f3de6e127.tar.gz
Account for header inside I420Encoder::InitEncode.
Also verify that the header is part of the received payload inside I420Decoder::Decode. BUG= Review URL: https://webrtc-codereview.appspot.com/1211005 git-svn-id: http://webrtc.googlecode.com/svn/trunk@3690 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'webrtc/modules/video_coding/codecs/i420')
-rw-r--r--webrtc/modules/video_coding/codecs/i420/main/interface/i420.h2
-rw-r--r--webrtc/modules/video_coding/codecs/i420/main/source/i420.cc14
2 files changed, 12 insertions, 4 deletions
diff --git a/webrtc/modules/video_coding/codecs/i420/main/interface/i420.h b/webrtc/modules/video_coding/codecs/i420/main/interface/i420.h
index 705643f2b6..4e75086145 100644
--- a/webrtc/modules/video_coding/codecs/i420/main/interface/i420.h
+++ b/webrtc/modules/video_coding/codecs/i420/main/interface/i420.h
@@ -18,6 +18,8 @@
namespace webrtc {
+enum { kI420HeaderSize = 4 };
+
class I420Encoder : public VideoEncoder {
public:
I420Encoder();
diff --git a/webrtc/modules/video_coding/codecs/i420/main/source/i420.cc b/webrtc/modules/video_coding/codecs/i420/main/source/i420.cc
index 589536144a..44603b4654 100644
--- a/webrtc/modules/video_coding/codecs/i420/main/source/i420.cc
+++ b/webrtc/modules/video_coding/codecs/i420/main/source/i420.cc
@@ -55,7 +55,8 @@ int I420Encoder::InitEncode(const VideoCodec* codecSettings,
}
const uint32_t newSize = CalcBufferSize(kI420,
codecSettings->width,
- codecSettings->height);
+ codecSettings->height)
+ + kI420HeaderSize;
uint8_t* newBuffer = new uint8_t[newSize];
if (newBuffer == NULL) {
return WEBRTC_VIDEO_CODEC_MEMORY;
@@ -94,7 +95,6 @@ int I420Encoder::Encode(const I420VideoFrame& inputImage,
return WEBRTC_VIDEO_CODEC_ERR_SIZE;
}
- const size_t kI420HeaderSize = 4;
int req_length = CalcBufferSize(kI420, inputImage.width(),
inputImage.height()) + kI420HeaderSize;
if (_encodedImage._size > static_cast<unsigned int>(req_length)) {
@@ -182,6 +182,10 @@ int I420Decoder::Decode(const EncodedImage& inputImage, bool /*missingFrames*/,
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;
@@ -190,8 +194,10 @@ int I420Decoder::Decode(const EncodedImage& inputImage, bool /*missingFrames*/,
_height = height;
// Verify that the available length is sufficient:
- int req_length = CalcBufferSize(kI420, _width, _height);
- if (req_length > static_cast<int>(inputImage._length)) {
+ uint32_t req_length = CalcBufferSize(kI420, _width, _height)
+ + kI420HeaderSize;
+
+ if (req_length > inputImage._length) {
return WEBRTC_VIDEO_CODEC_ERROR;
}
// Set decoded image parameters.