/*
 * Copyright (C) 2007-2008 ARM Limited
 *
 * 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.
 *
 */
/**
 * 
 * File Name:  armVCM4P2_ZigZag_Tables.h
 * OpenMAX DL: v1.0.2
 * Revision:   9641
 * Date:       Thursday, February 7, 2008
 * 
 * 
 * 
 *
 *
 * File:        armVCM4P2_Zigzag_Tables.h
 * Description: Declares Tables used for Zigzag scan in MP4P2 codec.
 *
 */
 
#ifndef _OMXZIGZAGTAB_H
#define _OMXZIGZAGTAB_H

extern const OMX_U8 armVCM4P2_aClassicalZigzagScan [192];
//extern const OMX_U8 armVCM4P2_aHorizontalZigzagScan [64];
//extern const OMX_U8 armVCM4P2_aVerticalZigzagScan [64];

#endif /* _OMXZIGZAGTAB_H_ */
