diff options
author | pbos@webrtc.org <pbos@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2013-03-19 11:39:03 +0000 |
---|---|---|
committer | pbos@webrtc.org <pbos@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2013-03-19 11:39:03 +0000 |
commit | 8685090060a2b565b5a0dd90df74a52f3de6e127 (patch) | |
tree | 5edfa35368dedd95138c5589196d5985a8257a93 /webrtc/modules/video_coding/codecs/i420 | |
parent | 3d0b0d6902ad541fc5246832991435371f1a8c4c (diff) | |
download | webrtc-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.h | 2 | ||||
-rw-r--r-- | webrtc/modules/video_coding/codecs/i420/main/source/i420.cc | 14 |
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. |