aboutsummaryrefslogtreecommitdiff
path: root/videodecoder/securevideo/merrplus/VideoDecoderAVCSecure.h
diff options
context:
space:
mode:
Diffstat (limited to 'videodecoder/securevideo/merrplus/VideoDecoderAVCSecure.h')
-rw-r--r--videodecoder/securevideo/merrplus/VideoDecoderAVCSecure.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/videodecoder/securevideo/merrplus/VideoDecoderAVCSecure.h b/videodecoder/securevideo/merrplus/VideoDecoderAVCSecure.h
new file mode 100644
index 0000000..ee16073
--- /dev/null
+++ b/videodecoder/securevideo/merrplus/VideoDecoderAVCSecure.h
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2009-2011 Intel Corporation. All rights reserved.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#ifndef VIDEO_DECODER_AVC_SECURE_H_
+#define VIDEO_DECODER_AVC_SECURE_H_
+
+#include "VideoDecoderAVC.h"
+
+
+class VideoDecoderAVCSecure : public VideoDecoderAVC {
+public:
+ VideoDecoderAVCSecure(const char *mimeType);
+ virtual ~VideoDecoderAVCSecure();
+
+ virtual Decode_Status start(VideoConfigBuffer *buffer);
+ virtual void stop(void);
+
+ // data in the decoded buffer is all encrypted.
+ virtual Decode_Status decode(VideoDecodeBuffer *buffer);
+
+private:
+ enum {
+ MAX_SLICE_HEADER_SIZE = 30,
+ MAX_NALU_HEADER_BUFFER = 8192,
+ MAX_NALU_NUMBER = 400, // > 4096/12
+ };
+
+ // Information of Network Abstraction Layer Unit
+ struct NaluInfo {
+ int32_t naluOffset; // offset of NAL unit in the firewalled buffer
+ int32_t naluLen; // length of NAL unit
+ int32_t naluHeaderLen; // length of NAL unit header
+ };
+
+ struct NaluMetadata {
+ NaluInfo *naluInfo;
+ int32_t naluNumber; // number of NAL units
+ };
+
+ struct NaluByteStream {
+ int32_t naluOffset;
+ int32_t naluLen;
+ int32_t streamPos;
+ uint8_t *byteStream; // 4 bytes of naluCount, 4 bytes of naluOffset, 4 bytes of naulLen, 4 bytes of naluHeaderLen, followed by naluHeaderData
+ int32_t naluCount;
+ };
+
+ virtual Decode_Status decodeSlice(vbp_data_h264 *data, uint32_t picIndex, uint32_t sliceIndex);
+ int32_t findNalUnitOffset(uint8_t *stream, int32_t offset, int32_t length);
+ Decode_Status copyNaluHeader(uint8_t *stream, NaluByteStream *naluStream);
+ Decode_Status parseAnnexBStream(uint8_t *stream, int32_t length, NaluByteStream *naluStream);
+
+private:
+ NaluMetadata mMetadata;
+ NaluByteStream mByteStream;
+ uint8_t *mNaluHeaderBuffer;
+ uint8_t *mInputBuffer;
+};
+
+
+
+#endif /* VIDEO_DECODER_AVC_SECURE_H_ */