18d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/******************************************************************************
28d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
38d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Copyright (C) 2015 The Android Open Source Project
48d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
58d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Licensed under the Apache License, Version 2.0 (the "License");
68d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * you may not use this file except in compliance with the License.
78d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * You may obtain a copy of the License at:
88d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
98d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * http://www.apache.org/licenses/LICENSE-2.0
108d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
118d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Unless required by applicable law or agreed to in writing, software
128d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * distributed under the License is distributed on an "AS IS" BASIS,
138d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
148d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * See the License for the specific language governing permissions and
158d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * limitations under the License.
168d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *
178d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S *****************************************************************************
188d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
198d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
208d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S/**
218d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
228d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @file
238d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  ih264_list.h
248d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
258d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @brief
268d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Contains functions for buf queue
278d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
288d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @author
298d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  Harish
308d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
318d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @par List of Functions:
328d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
338d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S* @remarks
348d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*  None
358d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*
368d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*******************************************************************************
378d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S*/
388d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
398d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#ifndef _IH264_LIST_H_
408d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#define _IH264_LIST_H_
418d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
428d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Stypedef struct
438d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S{
448d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /** Pointer to buffer base which contains the bufs */
458d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    void *pv_buf_base;
468d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
478d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /** Mutex used to keep the functions thread-safe */
488d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    void *pv_mutex;
498d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
508d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /** Current write index */
518d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    volatile WORD32 i4_buf_wr_idx;
528d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
538d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /** Current read index */
548d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    volatile WORD32 i4_buf_rd_idx;
558d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
568d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /** Maximum index */
578d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i4_buf_max_idx;
588d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
598d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /** Log2(buf_max_idx) -
608d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     * To ensure number of entries is power of two
618d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     * This makes it easier to wrap around by using AND with buf_max_idx - 1
628d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     * */
638d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i4_log2_buf_max_idx;
648d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
658d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /** Flag to indicate list has to be terminated */
668d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i4_terminate;
678d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
688d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /** Size of each entry */
698d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i4_entry_size;
708d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
718d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    /** If the list is to be used frequently send this as zero, else send a large value
728d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     * to ensure cores are not loaded unnecessarily.
738d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     * For eg: For picture level queues this can be a large value like 100us
748d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     * but for jobq this will be zero.
758d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S     */
768d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S    WORD32 i4_yeild_interval_us;
778d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
788d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S}list_t;
798d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
808d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SWORD32 ih264_list_size(WORD32 num_entries, WORD32 entry_size);
818d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha Svoid* ih264_list_init(void *pv_buf,
828d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                      WORD32 buf_size,
838d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                      WORD32 num_entries,
848d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                      WORD32 entry_size,
858d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S                      WORD32 yeild_interval_us);
868d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SIH264_ERROR_T ih264_list_free(list_t *ps_list);
878d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SIH264_ERROR_T ih264_list_reset(list_t *ps_list);
888d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SIH264_ERROR_T ih264_list_deinit(list_t *ps_list);
898d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SIH264_ERROR_T ih264_list_terminate(list_t *ps_list);
908d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SIH264_ERROR_T ih264_list_queue(list_t *ps_list, void *pv_buf, WORD32 blocking);
918d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha SIH264_ERROR_T ih264_list_dequeue(list_t *ps_list, void *pv_buf, WORD32 blocking);
928d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S
938d3d303c7942ced6a987a52db8977d768dc3605fHamsalekha S#endif /* _IH264_PROCESS_SLICE_H_ */
94