161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan/*--------------------------------------------------------------------------
2f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen ChavanCopyright (c) 2010-2015, The Linux Foundation. All rights reserved.
361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
461a2c6a19dbd06a317a419623020e02056661876Praveen ChavanRedistribution and use in source and binary forms, with or without
561a2c6a19dbd06a317a419623020e02056661876Praveen Chavanmodification, are permitted provided that the following conditions are met:
661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    * Redistributions of source code must retain the above copyright
761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan      notice, this list of conditions and the following disclaimer.
861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    * Redistributions in binary form must reproduce the above copyright
961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan      notice, this list of conditions and the following disclaimer in the
1061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan      documentation and/or other materials provided with the distribution.
1161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    * Neither the name of The Linux Foundation nor
1261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan      the names of its contributors may be used to endorse or promote
1361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan      products derived from this software without specific prior written
1461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan      permission.
1561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
1661a2c6a19dbd06a317a419623020e02056661876Praveen ChavanTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
1761a2c6a19dbd06a317a419623020e02056661876Praveen ChavanAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1861a2c6a19dbd06a317a419623020e02056661876Praveen ChavanIMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
1961a2c6a19dbd06a317a419623020e02056661876Praveen ChavanNON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
2061a2c6a19dbd06a317a419623020e02056661876Praveen ChavanCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
2161a2c6a19dbd06a317a419623020e02056661876Praveen ChavanEXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
2261a2c6a19dbd06a317a419623020e02056661876Praveen ChavanPROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
2361a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
2461a2c6a19dbd06a317a419623020e02056661876Praveen ChavanWHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
2561a2c6a19dbd06a317a419623020e02056661876Praveen ChavanOTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
2661a2c6a19dbd06a317a419623020e02056661876Praveen ChavanADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan--------------------------------------------------------------------------*/
2861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifndef __DTSPARSER_H
2961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define __DTSPARSER_H
3061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
3161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include "OMX_Core.h"
3261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include "OMX_QCOMExtns.h"
3361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include "qc_omx_component.h"
3461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
3561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include<stdlib.h>
3661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
3761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include <stdio.h>
3861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include <inttypes.h>
3919e3295cbf157f235796d9f3a844a032e5e25bb0Steven Moreland#include <pthread.h>
4061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
4161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#ifdef _ANDROID_
4261a2c6a19dbd06a317a419623020e02056661876Praveen Chavanextern "C" {
4361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#include<utils/Log.h>
4461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan}
4561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#else
4661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define ALOGE(fmt, args...) fprintf(stderr, fmt, ##args)
4761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif /* _ANDROID_ */
4861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
4961a2c6a19dbd06a317a419623020e02056661876Praveen Chavanclass omx_time_stamp_reorder
5061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan{
51f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    class auto_lock {
52f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        public:
53f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            auto_lock(pthread_mutex_t *lock)
54f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                : mLock(lock) {
55f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    if (mLock)
56f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                        pthread_mutex_lock(mLock);
57f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                }
58f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            ~auto_lock() {
59f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                if (mLock)
60f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan                    pthread_mutex_unlock(mLock);
61f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            }
62f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        private:
63f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan            pthread_mutex_t *mLock;
64f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan    };
65f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan
6661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    public:
6761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        omx_time_stamp_reorder();
6861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        ~omx_time_stamp_reorder();
6961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void set_timestamp_reorder_mode(bool flag);
7061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void enable_debug_print(bool flag);
7161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool insert_timestamp(OMX_BUFFERHEADERTYPE *header);
7261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool get_next_timestamp(OMX_BUFFERHEADERTYPE *header, bool is_interlaced);
7361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool remove_time_stamp(OMX_TICKS ts, bool is_interlaced);
7461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void flush_timestamp();
7561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
7661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan    private:
7761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#define TIME_SZ 64
7861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        typedef struct timestamp {
7961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            OMX_TICKS timestamps;
8061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            bool in_use;
8161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } timestamp;
8261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        typedef struct time_stamp_list {
8361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            timestamp input_timestamps[TIME_SZ];
8461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            time_stamp_list *next;
8561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            time_stamp_list *prev;
8661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            unsigned int entries_filled;
8761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        } time_stamp_list;
8861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool error;
8961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        time_stamp_list *phead,*pcurrent;
9061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool get_current_list();
9161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool add_new_list();
9261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool update_head();
9361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void delete_list();
9461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        void handle_error() {
9561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            ALOGE("Error handler called for TS Parser");
9661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
9761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            if (error)
9861a2c6a19dbd06a317a419623020e02056661876Praveen Chavan                return;
9961a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
10061a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            error = true;
10161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan            delete_list();
10261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        }
10361a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool reorder_ts;
10461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan        bool print_debug;
105f3ca23b5bd0c3d78d321ccf5c5af5eb0d461ff1aPraveen Chavan        pthread_mutex_t m_lock;
10661a2c6a19dbd06a317a419623020e02056661876Praveen Chavan};
10761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan#endif
108