161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan/*--------------------------------------------------------------------------
216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen ChavanCopyright (c) 2013 - 2016, 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
298767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifndef __VIDC_DEBUG_H__
308767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define __VIDC_DEBUG_H__
3161a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
328767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#ifdef _ANDROID_
338767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#include <cstdio>
3497e3ddfad60bf0417cbbc93dda97d2b887589fc0Praveen Chavan#include <pthread.h>
3561a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
368767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanenum {
378767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan   PRIO_ERROR=0x1,
388767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan   PRIO_INFO=0x1,
398767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan   PRIO_HIGH=0x2,
408767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan   PRIO_LOW=0x4
418767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan};
4261a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
438767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavanextern int debug_level;
4461a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
458767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#undef DEBUG_PRINT_ERROR
468767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define DEBUG_PRINT_ERROR(fmt, args...) \
478767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan      if (debug_level & PRIO_ERROR) \
488767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan          ALOGE(fmt,##args)
498767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#undef DEBUG_PRINT_INFO
508767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define DEBUG_PRINT_INFO(fmt, args...) \
518767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan      if (debug_level & PRIO_INFO) \
528767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan          ALOGI(fmt,##args)
538767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#undef DEBUG_PRINT_LOW
548767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define DEBUG_PRINT_LOW(fmt, args...) \
558767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan      if (debug_level & PRIO_LOW) \
568767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan          ALOGD(fmt,##args)
578767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#undef DEBUG_PRINT_HIGH
588767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define DEBUG_PRINT_HIGH(fmt, args...) \
598767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan      if (debug_level & PRIO_HIGH) \
608767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan          ALOGD(fmt,##args)
618767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#else
628767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define DEBUG_PRINT_ERROR printf
638767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define DEBUG_PRINT_INFO printf
648767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define DEBUG_PRINT_LOW printf
658767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#define DEBUG_PRINT_HIGH printf
668767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif
6761a2c6a19dbd06a317a419623020e02056661876Praveen Chavan
6816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan#define VALIDATE_OMX_PARAM_DATA(ptr, paramType)                                \
6916ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan    {                                                                          \
7016ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan        if (ptr == NULL) { return OMX_ErrorBadParameter; }                     \
7116ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan        paramType *p = reinterpret_cast<paramType *>(ptr);                     \
7216ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan        if (p->nSize < sizeof(paramType)) {                                    \
7316ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan            ALOGE("Insufficient object size(%u) v/s expected(%zu) for type %s",\
7416ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan                    (unsigned int)p->nSize, sizeof(paramType), #paramType);    \
7516ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan            return OMX_ErrorBadParameter;                                      \
7616ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan        }                                                                      \
7716ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan    }                                                                          \
7816ee85d1d456a4b694fd32baa5f52341e638b5d8Praveen Chavan
7997e3ddfad60bf0417cbbc93dda97d2b887589fc0Praveen Chavanclass auto_lock {
8097e3ddfad60bf0417cbbc93dda97d2b887589fc0Praveen Chavan    public:
8197e3ddfad60bf0417cbbc93dda97d2b887589fc0Praveen Chavan        auto_lock(pthread_mutex_t &lock)
8297e3ddfad60bf0417cbbc93dda97d2b887589fc0Praveen Chavan            : mLock(lock) {
8397e3ddfad60bf0417cbbc93dda97d2b887589fc0Praveen Chavan                pthread_mutex_lock(&mLock);
8497e3ddfad60bf0417cbbc93dda97d2b887589fc0Praveen Chavan            }
8597e3ddfad60bf0417cbbc93dda97d2b887589fc0Praveen Chavan        ~auto_lock() {
8697e3ddfad60bf0417cbbc93dda97d2b887589fc0Praveen Chavan            pthread_mutex_unlock(&mLock);
8797e3ddfad60bf0417cbbc93dda97d2b887589fc0Praveen Chavan        }
8897e3ddfad60bf0417cbbc93dda97d2b887589fc0Praveen Chavan    private:
8997e3ddfad60bf0417cbbc93dda97d2b887589fc0Praveen Chavan        pthread_mutex_t &mLock;
9097e3ddfad60bf0417cbbc93dda97d2b887589fc0Praveen Chavan};
9197e3ddfad60bf0417cbbc93dda97d2b887589fc0Praveen Chavan
928767726b6d6b2194cbb3704d7d82f0c7ef34eeb3Praveen Chavan#endif
93