/* ------------------------------------------------------------------
 * 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.
 * -------------------------------------------------------------------
 */
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

//     MP4 C O N F I G   ( O P E N  C O R E  C O N F I G   I N F O )

// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

#ifndef PV_MP4FFPARSER_CONFIG_H_INCLUDED
#define PV_MP4FFPARSER_CONFIG_H_INCLUDED

#ifndef PVMF_MP4_FF_PARSER_HAS_IMOTION_SUPPORT
#define PVMF_MP4_FF_PARSER_HAS_IMOTION_SUPPORT 0
#endif

#ifndef PVMF_MP4_FF_PARSER_HAS_IMOTION_SUPPORT
#define PVMF_MP4_FF_PARSER_HAS_ITUNE_SUPPORT 0
#endif

#ifndef PVMF_MP4_FF_HAS_OMA2_DRM_SUPPORT
#define PVMF_MP4_FF_HAS_OMA2_DRM_SUPPORT 0
#endif

#ifndef PVMF_MP4_FF_PARSER_HAS_TIMED_TEXT_SUPPORT
#define PVMF_MP4_FF_PARSER_HAS_TIMED_TEXT_SUPPORT 0
#endif

#ifndef PVMF_MP4_FF_PARSER_HAS_MOOF_SUPPORT
#define PVMF_MP4_FF_PARSER_HAS_MOOF_SUPPORT 0
#endif

#ifndef PVMF_MP4_FF_PARSER_HAS_BFRAME_SUPPORT
#define PVMF_MP4_FF_PARSER_HAS_BFRAME_SUPPORT 0
#endif

#ifndef PV_MP4_FF_PARSER_HAS_PPACK_SUPPORT
#define PV_MP4_FF_PARSER_HAS_PPACK_SUPPORT 0
#endif

#endif // PV_MP4FFPARSER_CONFIG_H_INCLUDED

