diff options
Diffstat (limited to 'media/libstagefright/codecs/avc/dec/include/avcdec_api.h')
-rw-r--r-- | media/libstagefright/codecs/avc/dec/include/avcdec_api.h | 200 |
1 files changed, 200 insertions, 0 deletions
diff --git a/media/libstagefright/codecs/avc/dec/include/avcdec_api.h b/media/libstagefright/codecs/avc/dec/include/avcdec_api.h new file mode 100644 index 0000000..f6a14b7 --- /dev/null +++ b/media/libstagefright/codecs/avc/dec/include/avcdec_api.h @@ -0,0 +1,200 @@ +/* ------------------------------------------------------------------ + * Copyright (C) 1998-2009 PacketVideo + * + * 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. + * ------------------------------------------------------------------- + */ +/** +This file contains application function interfaces to the AVC decoder library +and necessary type defitionitions and enumerations. +@publishedAll +*/ + +#ifndef _AVCDEC_API_H_ +#define _AVCDEC_API_H_ + +#include "avcapi_common.h" + +/** + This enumeration is used for the status returned from the library interface. +*/ +typedef enum +{ + /** + The followings are fail with details. Their values are negative. + */ + AVCDEC_NO_DATA = -4, + AVCDEC_PACKET_LOSS = -3, + /** + Fail information + */ + AVCDEC_NO_BUFFER = -2, /* no output picture buffer available */ + AVCDEC_MEMORY_FAIL = -1, /* memory allocation failed */ + AVCDEC_FAIL = 0, + /** + Generic success value + */ + AVCDEC_SUCCESS = 1, + AVCDEC_PICTURE_OUTPUT_READY = 2, + AVCDEC_PICTURE_READY = 3, + + /** + The followings are success with warnings. Their values are positive integers. + */ + AVCDEC_NO_NEXT_SC = 4, + AVCDEC_REDUNDANT_FRAME = 5, + AVCDEC_CONCEALED_FRAME = 6 /* detect and conceal the error */ +} AVCDec_Status; + + +/** +This structure contains sequence parameters information. +*/ +typedef struct tagAVCDecSPSInfo +{ + int FrameWidth; + int FrameHeight; + uint frame_only_flag; + int frame_crop_left; + int frame_crop_right; + int frame_crop_top; + int frame_crop_bottom; + +} AVCDecSPSInfo; + + +#ifdef __cplusplus +extern "C" +{ +#endif + /** THE FOLLOWINGS ARE APIS */ + /** + This function parses one NAL unit from byte stream format input according to Annex B. + \param "bitstream" "Pointer to the bitstream buffer." + \param "nal_unit" "Point to pointer and the location of the start of the first NAL unit + found in bitstream." + \param "size" "As input, the pointer to the size of bitstream in bytes. As output, + the value is changed to be the size of the found NAL unit." + \return "AVCDEC_SUCCESS if success, AVCDEC_FAIL if no first start code is found, AVCDEC_NO_NEX_SC if + the first start code is found, but the second start code is missing (potential partial NAL)." + */ + OSCL_IMPORT_REF AVCDec_Status PVAVCAnnexBGetNALUnit(uint8 *bitstream, uint8 **nal_unit, int *size); + + /** + This function sniffs the nal_unit_type such that users can call corresponding APIs. + \param "bitstream" "Pointer to the beginning of a NAL unit (start with forbidden_zero_bit, etc.)." + \param "size" "size of the bitstream (NumBytesInNALunit + 1)." + \param "nal_unit_type" "Pointer to the return value of nal unit type." + \return "AVCDEC_SUCCESS if success, AVCDEC_FAIL otherwise." + */ + OSCL_IMPORT_REF AVCDec_Status PVAVCDecGetNALType(uint8 *bitstream, int size, int *nal_type, int *nal_ref_idc); + + /** + This function decodes the sequence parameters set, initializes related parameters and + allocates memory (reference frames list), must also be compliant with Annex A. + It is equivalent to decode VOL header of MPEG4. + \param "avcHandle" "Handle to the AVC decoder library object." + \param "nal_unit" "Pointer to the buffer containing single NAL unit. + The content will change due to EBSP-to-RBSP conversion." + \param "nal_size" "size of the bitstream NumBytesInNALunit." + \return "AVCDEC_SUCCESS if success, + AVCDEC_FAIL if profile and level is not supported, + AVCDEC_MEMORY_FAIL if memory allocations return null." + */ + OSCL_IMPORT_REF AVCDec_Status PVAVCDecSeqParamSet(AVCHandle *avcHandle, uint8 *nal_unit, int nal_size); + + /** + This function returns sequence parameters such as dimension and field flag of the most recently + decoded SPS. More can be added later or grouped together into a structure. This API can be called + after PVAVCInitSequence. If no sequence parameter has been decoded yet, it will return AVCDEC_FAIL. + + \param "avcHandle" "Handle to the AVC decoder library object." + \param "seqInfo" "Pointer to the AVCDecSeqParamInfo structure." + \return "AVCDEC_SUCCESS if success and AVCDEC_FAIL if fail." + \note "This API can be combined with PVAVCInitSequence if wanted to be consistent with m4vdec lib." + */ + OSCL_IMPORT_REF AVCDec_Status PVAVCDecGetSeqInfo(AVCHandle *avcHandle, AVCDecSPSInfo *seqInfo); + + /** + This function decodes the picture parameters set and initializes related parameters. Note thate + the PPS may not be present for every picture. + \param "avcHandle" "Handle to the AVC decoder library object." + \param "nal_unit" "Pointer to the buffer containing single NAL unit. + The content will change due to EBSP-to-RBSP conversion." + \param "nal_size" "size of the bitstream NumBytesInNALunit." + \return "AVCDEC_SUCCESS if success, AVCDEC_FAIL if profile and level is not supported." + */ + OSCL_IMPORT_REF AVCDec_Status PVAVCDecPicParamSet(AVCHandle *avcHandle, uint8 *nal_unit, int nal_size); + + /** + This function decodes one NAL unit of bitstream. The type of nal unit is one of the + followings, 1, 5. (for now, no data partitioning, type 2,3,4). + \param "avcHandle" "Handle to the AVC decoder library object." + \param "nal_unit" "Pointer to the buffer containing a single or partial NAL unit. + The content will change due to EBSP-to-RBSP conversion." + \param "buf_size" "Size of the buffer (less than or equal nal_size)." + \param "nal_size" "size of the current NAL unit NumBytesInNALunit." + \return "AVCDEC_PICTURE_READY for success and an output is ready, + AVCDEC_SUCCESS for success but no output is ready, + AVCDEC_PACKET_LOSS is GetData returns AVCDEC_PACKET_LOSS, + AVCDEC_FAIL if syntax error is detected, + AVCDEC_MEMORY_FAIL if memory is corrupted. + AVCDEC_NO_PICTURE if no frame memory to write to (users need to get output and/or return picture). + AVCDEC_REDUNDANT_PICTURE if error has been detected in the primary picture and redundant picture is available, + AVCDEC_CONCEALED_PICTURE if error has been detected and decoder has concealed it." + */ + OSCL_IMPORT_REF AVCDec_Status PVAVCDecSEI(AVCHandle *avcHandle, uint8 *nal_unit, int nal_size); + + OSCL_IMPORT_REF AVCDec_Status PVAVCDecodeSlice(AVCHandle *avcHandle, uint8 *buffer, int buf_size); + + /** + Check the availability of the decoded picture in decoding order (frame_num). + The AVCFrameIO also provide displaying order information such that the application + can re-order the frame for display. A picture can be retrieved only once. + \param "avcHandle" "Handle to the AVC decoder library object." + \param "output" "Pointer to the AVCOutput structure. Note that decoder library will + not re-used the pixel memory in this structure until it has been returned + thru PVAVCReleaseOutput API." + \return "AVCDEC_SUCCESS for success, AVCDEC_FAIL if no picture is available to be displayed, + AVCDEC_PICTURE_READY if there is another picture to be displayed." + */ + OSCL_IMPORT_REF AVCDec_Status PVAVCDecGetOutput(AVCHandle *avcHandle, int *indx, int *release_flag, AVCFrameIO *output); + + /** + This function resets the decoder and expects to see the next IDR slice. + \param "avcHandle" "Handle to the AVC decoder library object." + */ + OSCL_IMPORT_REF void PVAVCDecReset(AVCHandle *avcHandle); + + /** + This function performs clean up operation including memory deallocation. + \param "avcHandle" "Handle to the AVC decoder library object." + */ + OSCL_IMPORT_REF void PVAVCCleanUpDecoder(AVCHandle *avcHandle); +//AVCDec_Status EBSPtoRBSP(uint8 *nal_unit,int *size); + + + + /** CALLBACK FUNCTION TO BE IMPLEMENTED BY APPLICATION */ + /** In AVCHandle structure, userData is a pointer to an object with the following + member functions. + */ + AVCDec_Status CBAVCDec_GetData(uint32 *userData, unsigned char **buffer, unsigned int *size); + +#ifdef __cplusplus +} +#endif + +#endif /* _AVCDEC_API_H_ */ + |