1/*
2* Copyright (c) 2009-2011 Intel Corporation.  All rights reserved.
3*
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7*
8* http://www.apache.org/licenses/LICENSE-2.0
9*
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15*/
16
17#ifndef __VIDEO_ENCODER_AVC_H__
18#define __VIDEO_ENCODER_AVC_H__
19
20#include "VideoEncoderBase.h"
21
22class VideoEncoderAVC : public VideoEncoderBase {
23
24public:
25    VideoEncoderAVC();
26    ~VideoEncoderAVC() {};
27
28    virtual Encode_Status start();
29
30    virtual Encode_Status derivedSetParams(VideoParamConfigSet *videoEncParams);
31    virtual Encode_Status derivedGetParams(VideoParamConfigSet *videoEncParams);
32    virtual Encode_Status derivedGetConfig(VideoParamConfigSet *videoEncConfig);
33    virtual Encode_Status derivedSetConfig(VideoParamConfigSet *videoEncConfig);
34
35protected:
36
37    virtual Encode_Status sendEncodeCommand(EncodeTask *task);
38    virtual Encode_Status getExtFormatOutput(VideoEncOutputBuffer *outBuffer);
39    virtual Encode_Status updateFrameInfo(EncodeTask* task);
40private:
41    // Local Methods
42
43    Encode_Status getOneNALUnit(uint8_t *inBuffer, uint32_t bufSize, uint32_t *nalSize, uint32_t *nalType, uint32_t *nalOffset, uint32_t status);
44    Encode_Status getHeader(uint8_t *inBuffer, uint32_t bufSize, uint32_t *headerSize, uint32_t status);
45    Encode_Status outputCodecData(VideoEncOutputBuffer *outBuffer);
46    Encode_Status outputOneNALU(VideoEncOutputBuffer *outBuffer, bool startCode);
47    Encode_Status outputLengthPrefixed(VideoEncOutputBuffer *outBuffer);
48    Encode_Status outputNaluLengthsPrefixed(VideoEncOutputBuffer *outBuffer);
49
50    Encode_Status renderMaxSliceSize();
51    Encode_Status renderAIR();
52    Encode_Status renderCIR();
53    Encode_Status renderSequenceParams(EncodeTask *task);
54    Encode_Status renderPictureParams(EncodeTask *task);
55    Encode_Status renderSliceParams(EncodeTask *task);
56    int calcLevel(int numMbs);
57    Encode_Status renderPackedSequenceParams(EncodeTask *task);
58    Encode_Status renderPackedPictureParams(EncodeTask *task);
59
60public:
61
62    VideoParamsAVC mVideoParamsAVC;
63    uint32_t mSliceNum;
64    VABufferID packed_seq_header_param_buf_id;
65    VABufferID packed_seq_buf_id;
66    VABufferID packed_pic_header_param_buf_id;
67    VABufferID packed_pic_buf_id;
68    VABufferID packed_sei_header_param_buf_id;   /* the SEI buffer */
69    VABufferID packed_sei_buf_id;
70
71};
72
73#endif /* __VIDEO_ENCODER_AVC_H__ */
74