summaryrefslogtreecommitdiffstats
path: root/encoder/ih264e_encode_header.h
diff options
context:
space:
mode:
authorHamsalekha S <hamsalekha.s@ittiam.com>2015-03-13 21:24:58 +0530
committerHamsalekha S <hamsalekha.s@ittiam.com>2015-04-02 15:59:02 +0530
commit8d3d303c7942ced6a987a52db8977d768dc3605f (patch)
treecc806c96794356996b13ba9970941d0aed74a97e /encoder/ih264e_encode_header.h
parent3956d913d37327dcb340f836e604b04bd478b158 (diff)
downloadandroid_external_libavc-8d3d303c7942ced6a987a52db8977d768dc3605f.tar.gz
android_external_libavc-8d3d303c7942ced6a987a52db8977d768dc3605f.tar.bz2
android_external_libavc-8d3d303c7942ced6a987a52db8977d768dc3605f.zip
Initial version
Change-Id: I7efe9a589cd24edf86e8d086b40c27cbbf8b4017
Diffstat (limited to 'encoder/ih264e_encode_header.h')
-rwxr-xr-xencoder/ih264e_encode_header.h278
1 files changed, 278 insertions, 0 deletions
diff --git a/encoder/ih264e_encode_header.h b/encoder/ih264e_encode_header.h
new file mode 100755
index 0000000..acae5b6
--- /dev/null
+++ b/encoder/ih264e_encode_header.h
@@ -0,0 +1,278 @@
+/******************************************************************************
+ *
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * 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.
+ *
+ *****************************************************************************
+ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
+*/
+
+/**
+******************************************************************************
+* @file
+* ih264e_encode_header.h
+*
+* @brief
+* This file contains structures and interface prototypes for h264 bitstream
+* header encoding
+*
+* @author
+* ittiam
+*
+* @remarks
+* None
+*
+*******************************************************************************
+*/
+
+#ifndef IH264E_ENCODE_HEADER_H_
+#define IH264E_ENCODE_HEADER_H_
+
+/*****************************************************************************/
+/* Function Macros */
+/*****************************************************************************/
+
+/**
+******************************************************************************
+ * @brief Macro to put a code with specified number of bits into the
+ * bitstream
+******************************************************************************
+ */
+#define PUT_BITS(ps_bitstrm, code_val, code_len, ret_val, syntax_string) \
+ ENTROPY_TRACE(syntax_string, code_val);\
+ ret_val |= ih264e_put_bits((ps_bitstrm), (code_val), (code_len))
+
+/**
+******************************************************************************
+ * @brief Macro to put a code with specified number of bits into the
+ * bitstream using 0th order exponential Golomb encoding for
+ * signed numbers
+******************************************************************************
+ */
+#define PUT_BITS_UEV(ps_bitstrm, code_val, ret_val, syntax_string) \
+ ENTROPY_TRACE(syntax_string, code_val);\
+ ret_val |= ih264e_put_uev((ps_bitstrm), (code_val))
+
+/**
+******************************************************************************
+ * @brief Macro to put a code with specified number of bits into the
+ * bitstream using 0th order exponential Golomb encoding for
+ * signed numbers
+******************************************************************************
+ */
+#define PUT_BITS_SEV(ps_bitstrm, code_val, ret_val, syntax_string) \
+ ENTROPY_TRACE(syntax_string, code_val);\
+ ret_val |= ih264e_put_sev((ps_bitstrm), (code_val))
+
+
+/*****************************************************************************/
+/* Extern Function Declarations */
+/*****************************************************************************/
+
+/**
+******************************************************************************
+*
+* @brief Generates SPS (Sequence Parameter Set)
+*
+* @par Description
+* This function generates Sequence Parameter Set header as per the spec
+*
+* @param[in] ps_bitstrm
+* pointer to bitstream context (handle)
+*
+* @param[in] ps_sps
+* pointer to structure containing SPS data
+*
+* @return success or failure error code
+*
+******************************************************************************
+*/
+WORD32 ih264e_generate_sps
+ (
+ bitstrm_t *ps_bitstrm,
+ sps_t *ps_sps
+ );
+
+/**
+******************************************************************************
+*
+* @brief Generates PPS (Picture Parameter Set)
+*
+* @par Description
+* Generate Picture Parameter Set as per Section 7.3.2.2
+*
+* @param[in] ps_bitstrm
+* pointer to bitstream context (handle)
+*
+* @param[in] ps_pps
+* pointer to structure containing PPS data
+*
+* @return success or failure error code
+*
+******************************************************************************
+*/
+WORD32 ih264e_generate_pps
+ (
+ bitstrm_t *ps_bitstrm,
+ pps_t *ps_pps,
+ sps_t *ps_sps
+ );
+
+/**
+******************************************************************************
+*
+* @brief Generates Slice Header
+*
+* @par Description
+* Generate Slice Header as per Section 7.3.5.1
+*
+* @param[inout] ps_bitstrm
+* pointer to bitstream context for generating slice header
+*
+* @param[in] ps_slice_hdr
+* pointer to slice header params
+*
+* @param[in] ps_pps
+* pointer to pps params referred by slice
+*
+* @param[in] ps_sps
+* pointer to sps params referred by slice
+*
+* @param[out] ps_dup_bit_strm_ent_offset
+* Bitstream struct to store bitstream state
+*
+* @param[out] pu4_first_slice_start_offset
+* first slice offset is returned
+*
+* @return success or failure error code
+*
+******************************************************************************
+*/
+WORD32 ih264e_generate_slice_header
+ (
+ bitstrm_t *ps_bitstrm,
+ slice_header_t *ps_slice_hdr,
+ pps_t *ps_pps,
+ sps_t *ps_sps
+ );
+
+/**
+******************************************************************************
+*
+* @brief Populates sps structure
+*
+* @par Description
+* Populates sps structure for its use in header generation
+*
+* @param[in] ps_codec
+* pointer to encoder context
+*
+* @param[out] ps_sps
+* pointer to sps params that needs to be populated
+*
+* @return success or failure error code
+*
+******************************************************************************
+*/
+IH264E_ERROR_T ih264e_populate_sps
+ (
+ codec_t *ps_codec,
+ sps_t *ps_sps
+ );
+
+/**
+******************************************************************************
+*
+* @brief Populates pps structure
+*
+* @par Description
+* Populates pps structure for its use in header generation
+*
+* @param[in] ps_codec
+* pointer to encoder context
+*
+* @param[out] ps_pps
+* pointer to pps params that needs to be populated
+*
+* @return success or failure error code
+*
+******************************************************************************
+*/
+IH264E_ERROR_T ih264e_populate_pps
+ (
+ codec_t *ps_codec,
+ pps_t *ps_pps
+ );
+
+
+/**
+******************************************************************************
+*
+* @brief Populates slice header structure
+*
+* @par Description
+* Populates slice header structure for its use in header generation
+*
+* @param[in] ps_proc
+* pointer to proc context
+*
+* @param[out] ps_slice_hdr
+* pointer to slice header structure that needs to be populated
+*
+* @param[in] ps_pps
+* pointer to pps params structure referred by the slice
+*
+* @param[in] ps_sps
+* pointer to sps params referred by the pps
+*
+* @return success or failure error code
+*
+******************************************************************************
+*/
+WORD32 ih264e_populate_slice_header
+ (
+ process_ctxt_t *ps_proc,
+ slice_header_t *ps_slice_hdr,
+ pps_t *ps_pps,
+ sps_t *ps_sps
+ );
+
+
+/**
+******************************************************************************
+*
+* @brief inserts FILLER Nal Unit.
+*
+* @par Description
+* In constant bit rate rc mode, when the bits generated by the codec is
+* underflowing the target bit rate, the encoder library inserts filler nal unit.
+*
+* @param[in] ps_bitstrm
+* pointer to bitstream context (handle)
+*
+* @param[in] insert_fill_bytes
+* Number of fill bytes to be inserted
+*
+* @return success or failure error code
+*
+******************************************************************************
+*/
+IH264E_ERROR_T ih264e_add_filler_nal_unit
+ (
+ bitstrm_t *ps_bitstrm,
+ WORD32 insert_fill_bytes
+ );
+
+
+#endif //IH264E_ENCODE_HEADER_H_