summaryrefslogtreecommitdiff
Diffstat
-rw-r--r--[-rwxr-xr-x]Media.mk1
-rw-r--r--drivers/amvdec_ports/Makefile1
-rw-r--r--drivers/amvdec_ports/aml_vcodec_adapt.c112
-rw-r--r--drivers/amvdec_ports/aml_vcodec_adapt.h5
-rw-r--r--drivers/amvdec_ports/aml_vcodec_dec.c992
-rw-r--r--drivers/amvdec_ports/aml_vcodec_dec.h2
-rw-r--r--drivers/amvdec_ports/aml_vcodec_dec_drv.c122
-rw-r--r--drivers/amvdec_ports/aml_vcodec_dec_pm.c206
-rw-r--r--drivers/amvdec_ports/aml_vcodec_dec_pm.h34
-rw-r--r--drivers/amvdec_ports/aml_vcodec_drv.h188
-rw-r--r--drivers/amvdec_ports/aml_vcodec_util.c34
-rw-r--r--drivers/amvdec_ports/aml_vcodec_util.h90
-rw-r--r--drivers/amvdec_ports/aml_vcodec_vfm.c28
-rw-r--r--drivers/amvdec_ports/decoder/aml_h264_parser.c81
-rw-r--r--drivers/amvdec_ports/decoder/aml_h264_parser.h1
-rw-r--r--drivers/amvdec_ports/decoder/aml_hevc_parser.c133
-rw-r--r--drivers/amvdec_ports/decoder/aml_hevc_parser.h1
-rw-r--r--drivers/amvdec_ports/decoder/aml_mjpeg_parser.c34
-rw-r--r--drivers/amvdec_ports/decoder/aml_mjpeg_parser.h1
-rw-r--r--drivers/amvdec_ports/decoder/aml_mpeg12_parser.h1
-rw-r--r--drivers/amvdec_ports/decoder/aml_mpeg4_parser.c178
-rw-r--r--drivers/amvdec_ports/decoder/aml_mpeg4_parser.h1
-rw-r--r--drivers/amvdec_ports/decoder/aml_vp9_parser.c26
-rw-r--r--drivers/amvdec_ports/decoder/aml_vp9_parser.h1
-rw-r--r--drivers/amvdec_ports/decoder/vdec_h264_if.c223
-rw-r--r--drivers/amvdec_ports/decoder/vdec_hevc_if.c194
-rw-r--r--drivers/amvdec_ports/decoder/vdec_mjpeg_if.c210
-rw-r--r--drivers/amvdec_ports/decoder/vdec_mpeg12_if.c304
-rw-r--r--drivers/amvdec_ports/decoder/vdec_mpeg4_if.c209
-rw-r--r--drivers/amvdec_ports/decoder/vdec_vp9_if.c195
-rw-r--r--drivers/amvdec_ports/vdec_drv_if.c6
-rw-r--r--drivers/amvdec_ports/vdec_drv_if.h21
-rw-r--r--drivers/common/chips/chips.c1
-rw-r--r--drivers/common/chips/decoder_cpu_ver_info.c8
-rw-r--r--drivers/common/chips/decoder_cpu_ver_info.h1
-rw-r--r--drivers/common/firmware/firmware_drv.c9
-rw-r--r--drivers/common/firmware/firmware_type.c1
-rw-r--r--drivers/common/firmware/firmware_type.h1
-rw-r--r--drivers/common/media_clock/clk/clk.c3
-rw-r--r--drivers/common/media_clock/clk/clkg12.c5
-rw-r--r--drivers/frame_provider/decoder/Makefile1
-rw-r--r--drivers/frame_provider/decoder/avs/avs.c60
-rw-r--r--drivers/frame_provider/decoder/avs2/avs2_bufmgr.c12
-rw-r--r--drivers/frame_provider/decoder/avs2/avs2_global.h3
-rw-r--r--drivers/frame_provider/decoder/avs2/vavs2.c115
-rw-r--r--drivers/frame_provider/decoder/avs_multi/Makefile2
-rw-r--r--drivers/frame_provider/decoder/avs_multi/avs_multi.c1633
-rw-r--r--drivers/frame_provider/decoder/avs_multi/avsp_trans_multi.c5065
-rw-r--r--drivers/frame_provider/decoder/h264/vh264.c58
-rw-r--r--drivers/frame_provider/decoder/h264_multi/h264_dpb.c50
-rw-r--r--drivers/frame_provider/decoder/h264_multi/h264_dpb.h34
-rw-r--r--drivers/frame_provider/decoder/h264_multi/vmh264.c1043
-rw-r--r--drivers/frame_provider/decoder/h265/vh265.c707
-rw-r--r--drivers/frame_provider/decoder/mjpeg/vmjpeg_multi.c60
-rw-r--r--drivers/frame_provider/decoder/mpeg12/vmpeg12_multi.c595
-rw-r--r--drivers/frame_provider/decoder/mpeg4/vmpeg4.c5
-rw-r--r--drivers/frame_provider/decoder/mpeg4/vmpeg4_multi.c80
-rw-r--r--drivers/frame_provider/decoder/utils/amvdec.c5
-rw-r--r--drivers/frame_provider/decoder/utils/frame_check.c178
-rw-r--r--drivers/frame_provider/decoder/utils/frame_check.h4
-rw-r--r--drivers/frame_provider/decoder/utils/vdec.c530
-rw-r--r--drivers/frame_provider/decoder/utils/vdec.h18
-rw-r--r--drivers/frame_provider/decoder/utils/vdec_input.c12
-rw-r--r--drivers/frame_provider/decoder/utils/vdec_input.h3
-rw-r--r--drivers/frame_provider/decoder/utils/vdec_v4l2_buffer_ops.c92
-rw-r--r--drivers/frame_provider/decoder/utils/vdec_v4l2_buffer_ops.h7
-rw-r--r--drivers/frame_provider/decoder/vav1/Makefile2
-rw-r--r--drivers/frame_provider/decoder/vav1/aom_av1_define.h171
-rw-r--r--drivers/frame_provider/decoder/vav1/av1_bufmgr.c3392
-rw-r--r--drivers/frame_provider/decoder/vav1/av1_global.h2310
-rw-r--r--drivers/frame_provider/decoder/vav1/vav1.c9946
-rw-r--r--drivers/frame_provider/decoder/vav1/vav1.h22
-rw-r--r--drivers/frame_provider/decoder/vc1/vvc1.c46
-rw-r--r--drivers/frame_provider/decoder/vp9/vvp9.c449
-rw-r--r--drivers/frame_sink/encoder/h264/encoder.c2
-rw-r--r--drivers/stream_input/Makefile5
-rw-r--r--drivers/stream_input/amports/amstream.c263
-rw-r--r--drivers/stream_input/parser/demux/aml_dvb.h5
-rw-r--r--drivers/stream_input/parser/demux/hw_demux/demod_gt.h62
-rw-r--r--drivers/stream_input/parser/demux/hw_demux/frontend.c293
-rw-r--r--drivers/stream_input/parser/dvb_common.c17
-rw-r--r--drivers/stream_input/parser/dvb_common.h26
-rw-r--r--drivers/stream_input/parser/esparser.c15
-rw-r--r--drivers/stream_input/parser/hw_demux/aml_demod_gt.h87
-rw-r--r--drivers/stream_input/parser/hw_demux/aml_dmx.c270
-rw-r--r--drivers/stream_input/parser/hw_demux/aml_dvb.c445
-rw-r--r--drivers/stream_input/parser/hw_demux/aml_dvb.h32
-rw-r--r--drivers/stream_input/parser/streambuf.c9
-rw-r--r--drivers/stream_input/parser/tsdemux.c14
-rw-r--r--drivers/stream_input/parser/tsdemux.h1
-rw-r--r--drivers/stream_input/tv_frontend/Makefile16
-rw-r--r--drivers/stream_input/tv_frontend/aml_fe.c1372
-rw-r--r--drivers/stream_input/tv_frontend/aml_fe.h213
-rw-r--r--drivers/stream_input/tv_frontend/atv_demod/atvdemod_frontend.c791
-rw-r--r--drivers/stream_input/tv_frontend/atv_demod/atvdemod_func.c2163
-rw-r--r--drivers/stream_input/tv_frontend/atv_demod/atvdemod_func.h323
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/aml_demod.c725
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/amlfrontend.c1402
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/demod_func.c2996
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/dvbc_func.c1331
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/dvbt_func.c2188
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/i2c_func.c42
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/acf_filter_coefficient.h414
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/addr_dtmb_che.h77
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/addr_dtmb_che_bit.h266
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/addr_dtmb_front.h70
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/addr_dtmb_front_bit.h331
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/addr_dtmb_sync.h53
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/addr_dtmb_sync_bit.h110
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/addr_dtmb_top.h90
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/addr_dtmb_top_bit.h178
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/aml_dtv_demod_reg.h28
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/amlfrontend.h86
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/include/demod_func.h626
-rw-r--r--drivers/stream_input/tv_frontend/dtv_demod/tuner_func.c189
-rw-r--r--firmware/video_ucode.bin14148
116 files changed, 25845 insertions, 36303 deletions
diff --git a/drivers/frame_provider/decoder/avs_multi/avsp_trans_multi.c b/drivers/frame_provider/decoder/avs_multi/avsp_trans_multi.c
deleted file mode 100644
index 89ff844..0000000
--- a/drivers/frame_provider/decoder/avs_multi/avsp_trans_multi.c
+++ b/dev/null
@@ -1,5065 +0,0 @@
-/*
-* Copyright (C) 2017 Amlogic, Inc. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify
-* it under the terms of the GNU General Public License as published by
-* the Free Software Foundation; either version 2 of the License, or
-* (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT
-* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-* more details.
-*
-* You should have received a copy of the GNU General Public License along
-* with this program; if not, write to the Free Software Foundation, Inc.,
-* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*
-* Description:
-*/
-#include <linux/kernel.h>
-#include <linux/types.h>
-#include <linux/errno.h>
-#include <linux/interrupt.h>
-#include <linux/timer.h>
-#include <linux/platform_device.h>
-#include <linux/amlogic/media/utils/amstream.h>
-#include <linux/amlogic/media/frame_sync/ptsserv.h>
-#include <linux/amlogic/media/canvas/canvas.h>
-#include <linux/amlogic/media/vfm/vframe.h>
-#include <linux/amlogic/media/vfm/vframe_provider.h>
-#include <linux/amlogic/media/vfm/vframe_receiver.h>
-#include <linux/amlogic/media/utils/vformat.h>
-#include <linux/dma-mapping.h>
-#include <linux/amlogic/media/codec_mm/codec_mm.h>
-#include <linux/slab.h>
-/* #include <mach/am_regs.h> */
-#include <linux/module.h>
-#include <linux/amlogic/media/utils/vdec_reg.h>
-#include "../../../stream_input/parser/streambuf_reg.h"
-#include "../utils/amvdec.h"
-#include <linux/amlogic/media/registers/register.h>
-#include "../../../stream_input/amports/amports_priv.h"
-
-#include "avs_multi.h"
-#ifdef AVSP_LONG_CABAC
-
-#define DECODING_SANITY_CHECK
-
-#define TRACE 0
-#define LIWR_FIX 0
-#define pow2(a, b) (1<<b)
-#define io_printf pr_info
-
-static unsigned char *local_heap_adr;
-static int local_heap_size;
-static int local_heap_pos;
-static int transcoding_error_flag;
-
-unsigned char *local_alloc(int num, int size)
-{
- unsigned char *ret_buf = NULL;
- int alloc_size = num * size;
-
- if ((local_heap_pos + alloc_size) <= local_heap_size) {
- ret_buf = local_heap_adr + local_heap_pos;
- local_heap_pos += alloc_size;
- } else {
- pr_info(
- "!!!local_alloc(%d) error, local_heap (size %d) is not enough\r\n",
- alloc_size, local_heap_size);
- }
- return ret_buf;
-}
-
-int local_heap_init(int size)
-{
- /*local_heap_adr = &local_heap[0];*/
- local_heap_adr = (unsigned char *)(avsp_heap_adr +
- MAX_CODED_FRAME_SIZE);
- memset(local_heap_adr, 0, LOCAL_HEAP_SIZE);
-
- local_heap_size = LOCAL_HEAP_SIZE;
- local_heap_pos = 0;
- return 0;
-}
-
-void local_heap_uninit(void)
-{
- local_heap_adr = NULL;
- local_heap_size = 0;
- local_heap_pos = 0;
-}
-
-#define CODE2D_ESCAPE_SYMBOL 59
-
-const int vlc_golomb_order[3][7][2] =
-
-{{{2, 9}, {2, 9}, {2, 9}, {2, 9}, {2, 9}, {2, 9}, {2, 9}, }, {{3, 9}, {2, 9}, {
- 2, 9}, {2, 9}, {2, 9}, {2, 9}, {2, 9}, }, {{2, 9}, {0, 9},
- {1, 9}, {1, 9}, {0, 9}, {-1, -1}, {-1, -1}, }, };
-
-const int MaxRun[3][7] = {{22, 14, 9, 6, 4, 2, 1}, {25, 18, 13, 9, 6, 4, 3}, {
- 24, 19, 10, 7, 4, -1, -1} };
-
-const int refabslevel[19][26] = {{4, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, -1, -1, -1}, {7, 4, 4, 3, 3, 3, 3, 3, 2,
- 2, 2, 2, 2, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- 10, 6, 4, 4, 3, 3, 3, 2, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1}, {13, 7, 5, 4, 3, 2, 2, -1, -1,
- -1 - 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {18, 8, 4, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {22, 7, 3, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {27, 4, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4,
- 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2}, {5, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, -1, -1, -1, -1, -1, -1, -1}, {7, 5, 4, 4, 3, 3, 3, 2, 2,
- 2, 2, 2, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
- {10, 6, 5, 4, 3, 3, 2, 2, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1}, {13, 7, 5, 4,
- 3, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {17, 8, 4,
- 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- 22, 6, 3, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {5, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -1}, {6, 4, 3,
- 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, -1, -1, -1, -1, -1, -1}, {10, 6, 4, 4, 3, 3,
- 2, 2, 2, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {14, 7, 4, 3, 3, 2,
- 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1}, {20, 7, 3, 2,
- 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1} };
-
-static const int incvlc_intra[7] = {0, 1, 2, 4, 7, 10, 3000};
-static const int incvlc_chroma[5] = {0, 1, 2, 4, 3000};
-
-const int AVS_2DVLC_INTRA[7][26][27] = {{{0, 22, 38, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {2, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, 44, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {6, 50, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {8, 54, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {10, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {12, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {14, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {18, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {20, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {24, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {26, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {28, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {30, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {34, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {36, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {40, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {42, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {46, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {52, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {56, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, }, {{8, 0, 4, 15, 27, 41,
- 55, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {-1, 2, 17, 35, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
- {-1, 6, 25, 53, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, 9, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, 11, 39, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, 13, 45, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, 19, 49, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, 21, 51, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, 23, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, 29, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, 31, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, 37, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, 43, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, 47, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, 57, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, }, {{8, 0, 2, 6,
- 13, 17, 27, 35, 45, 55, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, 4, 11, 21, 33, 49, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, 9, 23, 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, 15,
- 29, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, 19, 39, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {-1, 25, 43, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {-1, 31, 53, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, 41,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, 47, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {-1, 57, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, }, {{8, 0, 2, 4, 9, 11, 17, 21, 25, 33, 39, 45, 55, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, 6, 13, 19,
- 29, 35, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, 15, 27, 41, 57, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, 23, 37, 53, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, 31, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, 43, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, 49, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, }, {{6, 0, 2, 4, 7, 9, 11, 15, 17,
- 21, 23, 29, 33, 35, 43, 47, 49, 57, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, 13, 19, 27, 31, 37, 45, 55, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- 25, 41, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, 39, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, 53, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, }, {{0,
- 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 23, 25, 27, 31, 33, 37, 41,
- 45, 49, 51, 55, -1, -1, -1, -1, -1}, {-1, 21, 29, 35, 43, 47,
- 53, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {-1, 39, 57, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, }, {{0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19,
- 21, 23, 25, 27, 29, 31, 35, 37, 39, 41, 43, 47, 49, 51, 53, 57},
- {-1, 33, 45, 55, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1} } };
-
-const int AVS_2DVLC_CHROMA[5][26][27] = {{{0, 14, 32, 56, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {2, 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {4, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1}, {6, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {8, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {10,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {12, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {16, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {18, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {20,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {22, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {24, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {26, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {28,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {30, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {34, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {36, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {38,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {40, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {42, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {46,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {50, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {52, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {54, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, }, {{0, 1, 5, 15, 29,
- 43, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, 3, 21, 45, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1}, {-1, 7, 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, 9, 41, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, 11, 53, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, 17, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, 19, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, 23, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, 25, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, 31, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, 33, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, 39, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, 47, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, 49, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, 55, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, 57, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, },
- {{2, 0, 3, 7, 11, 17, 27, 33, 47, 53, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {
- -1, 5, 13, 21, 37, 55, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, 9, 23, 41, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, 15, 31, 57, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- 19, 43, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, 25, 45, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, 29, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- 35, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, 39, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, 49, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- 51, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, }, {{0, 1, 3, 5, 7, 11, 15, 19, 23, 29,
- 35, 43, 47, 53, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1}, {-1, 9, 13, 21, 31, 39, 51,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1}, {-1, 17, 27,
- 37, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
- {-1, 25, 41, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {
- -1, 33, 55, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, 45, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {
- -1, 49, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, 57, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, {
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1}, {-1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1}, },
- {{0, 1, 3, 5, 7, 9, 11, 13, 15, 19, 21, 23, 27, 29, 33, 37, 41,
- 43, 51, 55, -1, -1, -1, -1, -1, -1, -1}, {-1,
- 17, 25, 31, 39, 45, 53, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, 35, 49, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, 47, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- 57, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, {-1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1}, {-1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, {-1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1}, } };
-
-const int UE[64][2] = {{1, 1}, {2, 3}, {3, 3}, {4, 5}, {5, 5}, {6, 5}, {7, 5}, {
- 8, 7}, {9, 7}, {10, 7}, {11, 7}, {12, 7}, {13, 7}, {14, 7}, {15,
- 7}, {16, 9}, {17, 9}, {18, 9}, {19, 9}, {20, 9}, {21, 9},
- {22, 9}, {23, 9}, {24, 9}, {25, 9}, {26, 9}, {27, 9}, {28, 9}, {
- 29, 9}, {30, 9}, {31, 9}, {32, 11}, {33, 11}, {
- 34, 11}, {35, 11}, {36, 11}, {37, 11}, {38, 11},
- {39, 11}, {40, 11}, {41, 11}, {42, 11}, {43, 11}, {44, 11}, {45,
- 11}, {46, 11}, {47, 11}, {48, 11}, {49, 11}, {
- 50, 11}, {51, 11}, {52, 11}, {53, 11}, {54, 11},
- {55, 11}, {56, 11}, {57, 11}, {58, 11}, {59, 11}, {60, 11}, {61,
- 11}, {62, 11}, {63, 11}, {64, 13} };
-
-unsigned int src_start;
-unsigned int des_start;
-
-#ifdef AVSP_LONG_CABAC
-
-unsigned char *es_buf;
-unsigned int es_buf_ptr;
-unsigned int es_buf_is_overflow;
-
-#else
-FILE *f_es;
-#endif
-unsigned int es_ptr;
-unsigned int es_res;
-unsigned int es_res_ptr;
-unsigned int previous_es;
-
-void init_es(void)
-{
-
-#ifdef AVSP_LONG_CABAC
- es_buf_is_overflow = 0;
-
- es_buf[0] = 0x00;
- es_buf[1] = 0x00;
- es_buf[2] = 0x01;
- es_buf_ptr = 3;
- es_ptr = 3;
-#else
- f_es = fopen("es.out", "wb");
- if (f_es == NULL)
- io_printf(" ERROR : Can not open es.out for write\n");
- putc(0x00, f_es);
- putc(0x00, f_es);
- putc(0x01, f_es);
-
- es_ptr = 3;
-#endif
- es_res = 0;
- es_res_ptr = 0;
- previous_es = 0xff;
-
-}
-
-void push_es(int value, int num)
-{
- unsigned char wr_es_data;
- int push_num;
- int push_value;
-
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & ES_DUMP)
- io_printf(" push_es : value : 0x%x, num : %d\n", value, num);
-#endif
- while (num > 0) {
- if (num >= 8)
- push_num = 8;
- else
- push_num = num;
-
- num = num - push_num;
- push_value = (value >> num);
-
- es_res = (es_res << push_num) | push_value;
- es_res_ptr = es_res_ptr + push_num;
-
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & ES_DUMP)
- io_printf(" #### es_res : 0x%X, es_res_ptr : %d\n",
- es_res, es_res_ptr);
-#endif
-
- while (es_res_ptr >= 8) {
- es_res_ptr = es_res_ptr & 7;
- wr_es_data = (es_res >> es_res_ptr) & 0xff;
- if ((previous_es == 0) & (wr_es_data < 4)) {
- io_printf(
- " Insert 2'b10 for emu at position : %d\n",
- es_ptr);
-
- es_res_ptr = es_res_ptr + 2;
- wr_es_data = 2;
- }
-#ifdef AVSP_LONG_CABAC
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & ES_DUMP)
- pr_info("es_buf[%d] = 0x%02x\r\n",
- es_buf_ptr, wr_es_data);
-#endif
- if (!es_buf_is_overflow) {
- es_buf[es_buf_ptr++] = wr_es_data;
- if (es_buf_ptr >= MAX_CODED_FRAME_SIZE)
- es_buf_is_overflow = 1;
- }
-#else
- putc(wr_es_data, f_es);
-#endif
- es_ptr++;
- previous_es = ((previous_es << 8) | wr_es_data)
- & 0xffff;
- }
-
- }
-}
-
-#ifdef BLOCK_SIZE
-#undef BLOCK_SIZE
-#endif
-
-#define MIN_QP 0
-#define MAX_QP 63
-
-#define BLOCK_SIZE 4
-#define B8_SIZE 8
-#define MB_BLOCK_SIZE 16
-
-#define BLOCK_MULTIPLE (MB_BLOCK_SIZE/(BLOCK_SIZE*2))
-
-#define DECODE_COPY_MB 0
-#define DECODE_MB 1
-
-#define NO_INTRA_PMODE 5
-#define INTRA_PMODE_4x4 10
-#define NO_INTRA_PMODE_4x4 19
-/* 8x8 intra prediction modes */
-#define VERT_PRED 0
-#define HOR_PRED 1
-#define DC_PRED 2
-#define DOWN_LEFT_PRED 3
-#define DOWN_RIGHT_PRED 4
-
-#define VERT_PRED_4x4 0
-#define HOR_PRED_4x4 1
-#define DC_PRED_4x4 2
-#define DOWN_LEFT_PRED_4x4 3
-#define DOWN_RIGHT_PRED_4x4 4
-
-#define HOR_DOWN_PRED_4x4 5
-#define VERT_LEFT_PRED_4x4 6
-#define HOR_UP_PRED_4x4 7
-#define VERT_RIGHT_PRED_4x4 8
-
-#define DC_PRED_8 0
-#define HOR_PRED_8 1
-#define VERT_PRED_8 2
-#define PLANE_8 3
-
-#define LUMA_16DC 0
-#define LUMA_16AC 1
-#define LUMA_8x8 2
-#define LUMA_8x4 3
-#define LUMA_4x8 4
-#define LUMA_4x4 5
-#define CHROMA_DC 6
-#define CHROMA_AC 7
-#define NUM_BLOCK_TYPES 8
-
-#define I_PICTURE_START_CODE 0xB3
-#define PB_PICTURE_START_CODE 0xB6
-#define SLICE_START_CODE_MIN 0x00
-#define SLICE_START_CODE_MAX 0xAF
-#define USER_DATA_START_CODE 0xB2
-#define SEQUENCE_HEADER_CODE 0xB0
-#define EXTENSION_START_CODE 0xB5
-#define SEQUENCE_END_CODE 0xB1
-#define VIDEO_EDIT_CODE 0xB7
-
-#define EOS 1
-#define SOP 2
-#define SOS 3
-#define P8x8 8
-#define I8MB 9
-#define I4MB 10
-#define IBLOCK 11
-#define SI4MB 12
-#define MAXMODE 13
-
-#define IS_INTRA(MB) ((MB)->mb_type == I8MB || (MB)->mb_type == I4MB)
-#define IS_NEWINTRA(MB) ((MB)->mb_type == I4MB)
-#define IS_OLDINTRA(MB) ((MB)->mb_type == I8MB)
-#define IS_INTER(MB) ((MB)->mb_type != I8MB && (MB)->mb_type != I4MB)
-#define IS_INTERMV(MB) ((MB)->mb_type != I8MB && (MB)->mb_type != I4MB\
- && (MB)->mb_type != 0)
-
-#define IS_DIRECT(MB) ((MB)->mb_type == 0 && (img->type == B_IMG))
-#define IS_COPY(MB) ((MB)->mb_type == 0 && (img->type == P_IMG))
-#define IS_P8x8(MB) ((MB)->mb_type == P8x8)
-
-#define P_IMG 0
-#define B_IMG 1
-#define I_IMG 2
-
-#define FIELD 0
-#define FRAME 1
-
-#define SE_CABP 21
-struct decoding_environment_s {
- unsigned int dbuffer;
- int dbits_to_go;
- unsigned char *dcodestrm;
- int *dcodestrm_len;
-};
-
-struct bi_context_type_s {
- unsigned char MPS;
- unsigned int LG_PMPS;
- unsigned char cycno;
-};
-
-
-/**********************************************************************
- * C O N T E X T S F O R R M S Y N T A X E L E M E N T S
- **********************************************************************
- */
-
-#define NUM_MB_TYPE_CTX 11
-#define NUM_B8_TYPE_CTX 9
-#define NUM_MV_RES_CTX 10
-#define NUM_REF_NO_CTX 6
-#define NUM_DELTA_QP_CTX 4
-#define NUM_MB_AFF_CTX 4
-
-struct motion_info_contexts_s {
- struct bi_context_type_s mb_type_contexts[4][NUM_MB_TYPE_CTX];
- struct bi_context_type_s b8_type_contexts[2][NUM_B8_TYPE_CTX];
- struct bi_context_type_s mv_res_contexts[2][NUM_MV_RES_CTX];
- struct bi_context_type_s ref_no_contexts[2][NUM_REF_NO_CTX];
- struct bi_context_type_s delta_qp_contexts[NUM_DELTA_QP_CTX];
- struct bi_context_type_s mb_aff_contexts[NUM_MB_AFF_CTX];
-#ifdef TEST_WEIGHTING_AEC
-struct bi_context_type_s mb_weighting_pred;
-#endif
-};
-
-#define NUM_IPR_CTX 2
-#define NUM_CIPR_CTX 4
-#define NUM_CBP_CTX 4
-#define NUM_BCBP_CTX 4
-#define NUM_MAP_CTX 16
-#define NUM_LAST_CTX 16
-
-#define NUM_ONE_CTX 5
-#define NUM_ABS_CTX 5
-
-struct texture_info_contexts {
- struct bi_context_type_s ipr_contexts[NUM_IPR_CTX];
- struct bi_context_type_s cipr_contexts[NUM_CIPR_CTX];
- struct bi_context_type_s cbp_contexts[3][NUM_CBP_CTX];
- struct bi_context_type_s bcbp_contexts[NUM_BLOCK_TYPES][NUM_BCBP_CTX];
- struct bi_context_type_s one_contexts[NUM_BLOCK_TYPES][NUM_ONE_CTX];
- struct bi_context_type_s abs_contexts[NUM_BLOCK_TYPES][NUM_ABS_CTX];
- struct bi_context_type_s fld_map_contexts[NUM_BLOCK_TYPES][NUM_MAP_CTX];
- struct bi_context_type_s fld_last_contexts
- [NUM_BLOCK_TYPES][NUM_LAST_CTX];
- struct bi_context_type_s map_contexts[NUM_BLOCK_TYPES][NUM_MAP_CTX];
- struct bi_context_type_s last_contexts[NUM_BLOCK_TYPES][NUM_LAST_CTX];
-};
-struct img_par;
-
-struct syntaxelement {
- int type;
- int value1;
- int value2;
- int len;
- int inf;
- unsigned int bitpattern;
- int context;
- int k;
- int golomb_grad;
- int golomb_maxlevels;
-#if TRACE
-#define TRACESTRING_SIZE 100
- char tracestring[TRACESTRING_SIZE];
-#endif
-
- void (*mapping)(int len, int info, int *value1, int *value2);
-
- void (*reading)(struct syntaxelement *, struct img_par *,
- struct decoding_environment_s *);
-
-};
-
-struct bitstream_s {
-
- int read_len;
- int code_len;
-
- int frame_bitoffset;
- int bitstream_length;
-
- unsigned char *stream_buffer;
-};
-
-struct datapartition {
-
- struct bitstream_s *bitstream;
- struct decoding_environment_s de_aec;
-
- int (*read_syntax_element)(struct syntaxelement *, struct img_par *,
- struct datapartition *);
-/*!< virtual function;
- * actual method depends on chosen data partition and
- * entropy coding method
- */
-};
-
-struct slice_s {
- int picture_id;
- int qp;
- int picture_type;
- int start_mb_nr;
- int max_part_nr;
- int num_mb;
-
- struct datapartition *part_arr;
- struct motion_info_contexts_s *mot_ctx;
- struct texture_info_contexts *tex_ctx;
- int field_ctx[3][2];
-};
-
-struct img_par {
- int number;
- int current_mb_nr;
- int max_mb_nr;
- int current_slice_nr;
- int tr;
- int qp;
- int type;
-
- int typeb;
-
- int width;
- int height;
- int width_cr;
- int height_cr;
- int source_bitdepth;
- int mb_y;
- int mb_x;
- int block_y;
- int pix_y;
- int pix_x;
- int pix_c_y;
- int block_x;
- int pix_c_x;
-
- int ***mv;
- int mpr[16][16];
-
- int m7[16][16];
- int m8[/*2*/4][8][8];
- int cof[4][/*6*/8][4][4];
- int cofu[4];
- int **ipredmode;
- int quad[256];
- int cod_counter;
-
- int ***dfmv;
- int ***dbmv;
- int **fw_reffrarr;
- int **bw_reffrarr;
-
- int ***mv_frm;
- int **fw_reffrarr_frm;
- int **bw_reffrarr_frm;
- int imgtr_next_p;
- int imgtr_last_p;
- int tr_frm;
- int tr_fld;
- int imgtr_last_prev_p;
-
- int no_forward_reference;
- int seq_header_indicate;
- int b_discard_flag;
-
- int ***fw_mv;
- int ***bw_mv;
- int subblock_x;
- int subblock_y;
-
- int buf_cycle;
-
- int direct_type;
-
- int ***mv_top;
- int ***mv_bot;
- int **fw_reffrarr_top;
- int **bw_reffrarr_top;
- int **fw_reffrarr_bot;
- int **bw_reffrarr_bot;
-
- int **ipredmode_top;
- int **ipredmode_bot;
- int ***fw_mv_top;
- int ***fw_mv_bot;
- int ***bw_mv_top;
- int ***bw_mv_bot;
- int ***dfmv_top;
- int ***dbmv_top;
- int ***dfmv_bot;
- int ***dbm_bot;
-
- int toppoc;
- int bottompoc;
- int framepoc;
- unsigned int frame_num;
-
- unsigned int pic_distance;
- int delta_pic_order_cnt_bottom;
-
- signed int pic_distance_msb;
- unsigned int prev_pic_distance_lsb;
- signed int curr_pic_distance_msb;
- unsigned int this_poc;
-
- int pic_width_inmbs;
- int pic_height_inmbs;
- int pic_size_inmbs;
-
- int block8_x, block8_y;
- int structure;
- int pn;
- int buf_used;
- int buf_size;
- int picture_structure;
- int advanced_pred_mode_disable;
- int types;
- int current_mb_nr_fld;
-
- int p_field_enhanced;
- int b_field_enhanced;
-
- int slice_weighting_flag;
- int lum_scale[4];
- int lum_shift[4];
- int chroma_scale[4];
- int chroma_shift[4];
- int mb_weighting_flag;
- int weighting_prediction;
- int mpr_weight[16][16];
- int top_bot;
- int bframe_number;
-
- int auto_crop_right;
- int auto_crop_bottom;
-
- struct slice_s *current_slice;
- int is_v_block;
- int is_intra_block;
-
- int new_seq_header_flag;
- int new_sequence_flag;
- int last_pic_bbv_delay;
-
- int sequence_end_flag;
- int is_top_field;
-
- int abt_flag;
- int qp_shift;
-
-#ifdef EIGHTH
-int eighth_subpixel_flag;
-int subpixel_precision;
-int unit_length;
-int subpixel_mask;
-
-int max_mvd;
-int min_mvd;
-#endif
-
-};
-
-struct macroblock {
- int qp;
- int slice_nr;
- int delta_quant;
- struct macroblock *mb_available[3][3];
- /*!< pointer to neighboring MBs in a 3x3 window of current MB,
- *which is located at [1][1]
- * NULL pointer identifies neighboring MBs which are unavailable
- */
-
- int mb_type;
- int mvd[2][BLOCK_MULTIPLE][BLOCK_MULTIPLE][2];
- int cbp, cbp_blk, cbp01;
- unsigned long cbp_bits;
-
- int b8mode[4];
- int b8pdir[4];
- int mb_type_2;
- int c_ipred_mode_2;
- int dct_mode;
-
- int c_ipred_mode;
- int lf_disable;
- int lf_alpha_c0_offset;
- int lf_beta_offset;
-
- int CABT[4];
- int CABP[4];
- int cbp_4x4[4];
-
- int skip_flag;
-
- struct macroblock *mb_available_up;
- struct macroblock *mb_available_left;
- unsigned int mbaddr_a, mbaddr_b, mbaddr_c, mbaddr_d;
- unsigned int mbavail_a, mbavail_b, mbavail_c, mbavail_d;
-
-};
-
-struct macroblock *mb_data;
-
-struct img_par *img;
-
-struct bitstream_s *curr_stream;
-
-struct datapartition *alloc_partition(int n);
-
-unsigned int vld_mem_start_addr;
-unsigned int vld_mem_end_addr;
-
-int marker_bit;
-
-int progressive_sequence;
-int horizontal_size;
-int vertical_size;
-
-int second_ifield;
-int pre_img_type;
-
-/* slice_header() */
-int slice_vertical_position;
-int slice_vertical_position_extension;
-int fixed_picture_qp;
-int fixed_slice_qp;
-int slice_qp;
-
-/*
- *************************************************************************
- * Function:ue_v, reads an u(v) syntax element, the length in bits is stored in
- the global UsedBits variable
- * Input:
- tracestring
- the string for the trace file
- bitstream
- the stream to be read from
- * Output:
- * Return: the value of the coded syntax element
- * Attention:
- *************************************************************************
- */
-/*!
- * definition of AVS syntaxelements
- * order of elements follow dependencies for picture reconstruction
- */
-/*!
- * \brief Assignment of old TYPE partition elements to new
- * elements
- *
- * old element | new elements
- * TYPE_HEADER | SE_HEADER, SE_PTYPE
- * TYPE_MBHEADER | SE_MBTYPE, SE_REFFRAME, SE_INTRAPREDMODE
- * TYPE_MVD | SE_MVD
- * TYPE_CBP | SE_CBP_INTRA, SE_CBP_INTER * SE_DELTA_QUANT_INTER
- * SE_DELTA_QUANT_INTRA
- * TYPE_COEFF_Y | SE_LUM_DC_INTRA, SE_LUM_AC_INTRA,
- SE_LUM_DC_INTER, SE_LUM_AC_INTER
- * TYPE_2x2DC | SE_CHR_DC_INTRA, SE_CHR_DC_INTER
- * TYPE_COEFF_C | SE_CHR_AC_INTRA, SE_CHR_AC_INTER
- * TYPE_EOS | SE_EOS
- */
-
-#define SE_HEADER 0
-#define SE_PTYPE 1
-#define SE_MBTYPE 2
-#define SE_REFFRAME 3
-#define SE_INTRAPREDMODE 4
-#define SE_MVD 5
-#define SE_CBP_INTRA 6
-#define SE_LUM_DC_INTRA 7
-#define SE_CHR_DC_INTRA 8
-#define SE_LUM_AC_INTRA 9
-#define SE_CHR_AC_INTRA 10
-#define SE_CBP_INTER 11
-#define SE_LUM_DC_INTER 12
-#define SE_CHR_DC_INTER 13
-#define SE_LUM_AC_INTER 14
-#define SE_CHR_AC_INTER 15
-#define SE_DELTA_QUANT_INTER 16
-#define SE_DELTA_QUANT_INTRA 17
-#define SE_BFRAME 18
-#define SE_EOS 19
-#define SE_MAX_ELEMENTS 20
-#define SE_CBP01 21
-int chroma_format;
-/*
- *************************************************************************
- * Function:Reads bits from the bitstream buffer
- * Input:
- byte buffer[]
- containing VLC-coded data bits
- int totbitoffset
- bit offset from start of partition
- int bytecount
- total bytes in bitstream
- int numbits
- number of bits to read
- * Output:
- * Return:
- * Attention:
- *************************************************************************
- */
-
-int get_bits(unsigned char buffer[], int totbitoffset, int *info, int bytecount,
- int numbits)
-{
- register int inf;
- long byteoffset;
- int bitoffset;
-
- int bitcounter = numbits;
-
- byteoffset = totbitoffset / 8;
- bitoffset = 7 - (totbitoffset % 8);
-
- inf = 0;
- while (numbits) {
- inf <<= 1;
- inf |= (buffer[byteoffset] & (0x01 << bitoffset)) >> bitoffset;
- numbits--;
- bitoffset--;
- if (bitoffset < 0) {
- byteoffset++;
- bitoffset += 8;
- if (byteoffset > bytecount)
- return -1;
- }
- }
-
- *info = inf;
-
-
- return bitcounter;
-}
-
-/*
- *************************************************************************
- * Function:read FLC codeword from UVLC-partition
- * Input:
- * Output:
- * Return:
- * Attention:
- *************************************************************************
- */
-
-int read_syntaxelement_flc(struct syntaxelement *sym)
-{
- int frame_bitoffset = curr_stream->frame_bitoffset;
- unsigned char *buf = curr_stream->stream_buffer;
- int bitstreamlengthinbytes = curr_stream->bitstream_length;
-
- if ((get_bits(buf, frame_bitoffset, &(sym->inf), bitstreamlengthinbytes,
- sym->len)) < 0)
- return -1;
-
- curr_stream->frame_bitoffset += sym->len;
- sym->value1 = sym->inf;
-
-#if TRACE
- tracebits2(sym->tracestring, sym->len, sym->inf);
-#endif
-
- return 1;
-}
-
-/*
- *************************************************************************
- * Function:ue_v, reads an u(1) syntax element, the length in bits is stored in
- the global UsedBits variable
- * Input:
- tracestring
- the string for the trace file
- bitstream
- the stream to be read from
- * Output:
- * Return: the value of the coded syntax element
- * Attention:
- *************************************************************************
- */
-int u_1(char *tracestring)
-{
- return u_v(1, tracestring);
-}
-
-/*
- *************************************************************************
- * Function:mapping rule for ue(v) syntax elements
- * Input:length and info
- * Output:number in the code table
- * Return:
- * Attention:
- *************************************************************************
- */
-void linfo_ue(int len, int info, int *value1, int *dummy)
-{
- *value1 = (int)pow2(2, (len / 2)) + info - 1;
-}
-
-int u_v(int leninbits, char *tracestring)
-{
- struct syntaxelement symbol, *sym = &symbol;
-
-#ifdef AVSP_LONG_CABAC
-#else
- assert(curr_stream->stream_buffer != NULL);
-#endif
- sym->type = SE_HEADER;
- sym->mapping = linfo_ue;
- sym->len = leninbits;
- read_syntaxelement_flc(sym);
-
- return sym->inf;
-}
-
-/*
- *************************************************************************
- * Function:mapping rule for se(v) syntax elements
- * Input:length and info
- * Output:signed mvd
- * Return:
- * Attention:
- *************************************************************************
- */
-
-void linfo_se(int len, int info, int *value1, int *dummy)
-{
- int n;
-
- n = (int)pow2(2, (len / 2)) + info - 1;
- *value1 = (n + 1) / 2;
- if ((n & 0x01) == 0)
- *value1 = -*value1;
-
-}
-
-/*
- *************************************************************************
- * Function:length and info
- * Input:
- * Output:cbp (intra)
- * Return:
- * Attention:
- *************************************************************************
- */
-
-void linfo_cbp_intra(int len, int info, int *cbp, int *dummy)
-{
-}
-
-const int NCBP[64][2] = {{4, 0}, {16, 19}, {17, 16}, {19, 15}, {14, 18},
- {9, 11}, {22, 31}, {8, 13}, {11, 17}, {21, 30}, {10, 12},
- {7, 9}, {12, 10}, {6, 7}, {5, 8}, {1, 1}, {35, 4}, {47, 42}, {
- 48, 38}, {38, 27}, {46, 39}, {36, 33}, {50, 59},
- {26, 26}, {45, 40}, {52, 58}, {41, 35}, {28, 25}, {37, 29}, {23,
- 24}, {31, 28}, {2, 3}, {43, 5}, {51, 51}, {56,
- 52}, {39, 37}, {55, 50}, {33, 43}, {62, 63}, {
- 27, 44}, {54, 53}, {60, 62}, {40, 48}, {32, 47},
- {42, 34}, {24, 45}, {29, 49}, {3, 6}, {49, 14}, {53, 55}, {57,
- 56}, {25, 36}, {58, 54}, {30, 41}, {59, 60}, {
- 15, 21}, {61, 57}, {63, 61}, {44, 46}, {18, 22},
- {34, 32}, {13, 20}, {20, 23}, {0, 2} };
-
-unsigned int s1, t1, value_s, value_t;
-unsigned char dec_bypass, dec_final;
-
-#define get_byte() { \
- dbuffer = dcodestrm[(*dcodestrm_len)++];\
- dbits_to_go = 7; \
-}
-
-#define dbuffer (dep->dbuffer)
-#define dbits_to_go (dep->dbits_to_go)
-#define dcodestrm (dep->dcodestrm)
-#define dcodestrm_len (dep->dcodestrm_len)
-
-#define B_BITS 10
-
-#define LG_PMPS_SHIFTNO 2
-
-#define HALF (1 << (B_BITS-1))
-#define QUARTER (1 << (B_BITS-2))
-
-unsigned int biari_decode_symbol(struct decoding_environment_s *dep,
- struct bi_context_type_s *bi_ct)
-{
- register unsigned char bit;
- register unsigned char s_flag;
- register unsigned char is_lps = 0;
- register unsigned char cwr;
- register unsigned char cycno = bi_ct->cycno;
- register unsigned int lg_pmps = bi_ct->LG_PMPS;
- register unsigned int t_rlps;
- register unsigned int s2, t2;
-
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & AEC_DUMP)
- io_printf("LG_PMPS : %03X, MPS : %d, cycno : %d -- %p\n",
- bi_ct->LG_PMPS, bi_ct->MPS, bi_ct->cycno, bi_ct);
-#endif
-
- bit = bi_ct->MPS;
-
- cwr = (cycno <= 1) ? 3 : (cycno == 2) ? 4 : 5;
-
- if (t1 >= (lg_pmps >> LG_PMPS_SHIFTNO)) {
- s2 = s1;
- t2 = t1 - (lg_pmps >> LG_PMPS_SHIFTNO);
- s_flag = 0;
- } else {
- s2 = s1 + 1;
- t2 = 256 + t1 - (lg_pmps >> LG_PMPS_SHIFTNO);
- s_flag = 1;
- }
-
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & AEC_DUMP)
- io_printf(" s2 : %d, t2 : %03X\n", s2, t2);
-#endif
-
- if (s2 > value_s || (s2 == value_s && value_t >= t2)) {
- is_lps = 1;
- bit = !bit;
-
- t_rlps = (s_flag == 0) ?
- (lg_pmps >> LG_PMPS_SHIFTNO) :
- (t1 + (lg_pmps >> LG_PMPS_SHIFTNO));
-
- if (s2 == value_s)
- value_t = (value_t - t2);
- else {
- if (--dbits_to_go < 0)
- get_byte();
-
- value_t = (value_t << 1)
- | ((dbuffer >> dbits_to_go) & 0x01);
- value_t = 256 + value_t - t2;
-
- }
-
- while (t_rlps < QUARTER) {
- t_rlps = t_rlps << 1;
- if (--dbits_to_go < 0)
- get_byte();
-
- value_t = (value_t << 1)
- | ((dbuffer >> dbits_to_go) & 0x01);
- }
-
- s1 = 0;
- t1 = t_rlps & 0xff;
-
- value_s = 0;
- while (value_t < QUARTER) {
- int j;
-
- if (--dbits_to_go < 0)
- get_byte();
- j = (dbuffer >> dbits_to_go) & 0x01;
-
- value_t = (value_t << 1) | j;
- value_s++;
- }
- value_t = value_t & 0xff;
- } else {
-
- s1 = s2;
- t1 = t2;
- }
-
- if (dec_bypass)
- return bit;
-
- if (is_lps)
- cycno = (cycno <= 2) ? (cycno + 1) : 3;
- else if (cycno == 0)
- cycno = 1;
- bi_ct->cycno = cycno;
-
- if (is_lps) {
- switch (cwr) {
- case 3:
- lg_pmps = lg_pmps + 197;
- break;
- case 4:
- lg_pmps = lg_pmps + 95;
- break;
- default:
- lg_pmps = lg_pmps + 46;
- }
-
- if (lg_pmps >= (256 << LG_PMPS_SHIFTNO)) {
- lg_pmps = (512 << LG_PMPS_SHIFTNO) - 1 - lg_pmps;
- bi_ct->MPS = !(bi_ct->MPS);
- }
- } else {
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & AEC_DUMP)
- io_printf(" - lg_pmps_MPS : %X (%X - %X - %X)\n",
- lg_pmps - (unsigned int)(lg_pmps>>cwr)
- - (unsigned int)(lg_pmps>>(cwr+2)),
- lg_pmps,
- (unsigned int)(lg_pmps>>cwr),
- (unsigned int)(lg_pmps>>(cwr+2))
- );
-#endif
- lg_pmps = lg_pmps - (unsigned int)(lg_pmps >> cwr)
- - (unsigned int)(lg_pmps >> (cwr + 2));
- }
-
- bi_ct->LG_PMPS = lg_pmps;
-
- return bit;
-}
-
-unsigned int biari_decode_symbolw(struct decoding_environment_s *dep,
- struct bi_context_type_s *bi_ct1,
- struct bi_context_type_s *bi_ct2)
-{
- register unsigned char bit1, bit2;
- register unsigned char pred_mps, bit;
- register unsigned int lg_pmps;
- register unsigned char cwr1, cycno1 = bi_ct1->cycno;
- register unsigned char cwr2, cycno2 = bi_ct2->cycno;
- register unsigned int lg_pmps1 = bi_ct1->LG_PMPS;
- register unsigned int lg_pmps2 =
- bi_ct2->LG_PMPS;
- register unsigned int t_rlps;
- register unsigned char s_flag, is_lps = 0;
- register unsigned int s2, t2;
-
-
- bit1 = bi_ct1->MPS;
- bit2 = bi_ct2->MPS;
-
- cwr1 = (cycno1 <= 1) ? 3 : (cycno1 == 2) ? 4 : 5;
- cwr2 = (cycno2 <= 1) ? 3 : (cycno2 == 2) ? 4 : 5;
-
- if (bit1 == bit2) {
- pred_mps = bit1;
- lg_pmps = (lg_pmps1 + lg_pmps2) / 2;
- } else {
- if (lg_pmps1 < lg_pmps2) {
- pred_mps = bit1;
- lg_pmps = (256 << LG_PMPS_SHIFTNO) - 1
- - ((lg_pmps2 - lg_pmps1) >> 1);
- } else {
- pred_mps = bit2;
- lg_pmps = (256 << LG_PMPS_SHIFTNO) - 1
- - ((lg_pmps1 - lg_pmps2) >> 1);
- }
- }
-
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & AEC_DUMP)
- io_printf(" - Begin - LG_PMPS : %03X, MPS : %d\n",
- lg_pmps, pred_mps);
-#endif
- if (t1 >= (lg_pmps >> LG_PMPS_SHIFTNO)) {
- s2 = s1;
- t2 = t1 - (lg_pmps >> LG_PMPS_SHIFTNO);
- s_flag = 0;
- } else {
- s2 = s1 + 1;
- t2 = 256 + t1 - (lg_pmps >> LG_PMPS_SHIFTNO);
- s_flag = 1;
- }
-
- bit = pred_mps;
- if (s2 > value_s || (s2 == value_s && value_t >= t2)) {
- is_lps = 1;
- bit = !bit;
- t_rlps = (s_flag == 0) ?
- (lg_pmps >> LG_PMPS_SHIFTNO) :
- (t1 + (lg_pmps >> LG_PMPS_SHIFTNO));
-
- if (s2 == value_s)
- value_t = (value_t - t2);
- else {
- if (--dbits_to_go < 0)
- get_byte();
-
- value_t = (value_t << 1)
- | ((dbuffer >> dbits_to_go) & 0x01);
- value_t = 256 + value_t - t2;
- }
-
- while (t_rlps < QUARTER) {
- t_rlps = t_rlps << 1;
- if (--dbits_to_go < 0)
- get_byte();
-
- value_t = (value_t << 1)
- | ((dbuffer >> dbits_to_go) & 0x01);
- }
- s1 = 0;
- t1 = t_rlps & 0xff;
-
- value_s = 0;
- while (value_t < QUARTER) {
- int j;
-
- if (--dbits_to_go < 0)
- get_byte();
- j = (dbuffer >> dbits_to_go) & 0x01;
-
- value_t = (value_t << 1) | j;
- value_s++;
- }
- value_t = value_t & 0xff;
- } else {
- s1 = s2;
- t1 = t2;
- }
-
- if (bit != bit1) {
- cycno1 = (cycno1 <= 2) ? (cycno1 + 1) : 3;
- } else {
- if (cycno1 == 0)
- cycno1 = 1;
- }
-
- if (bit != bit2) {
- cycno2 = (cycno2 <= 2) ? (cycno2 + 1) : 3;
- } else {
- if (cycno2 == 0)
- cycno2 = 1;
- }
- bi_ct1->cycno = cycno1;
- bi_ct2->cycno = cycno2;
-
- {
-
- if (bit == bit1) {
- lg_pmps1 =
- lg_pmps1
- - (unsigned int)(lg_pmps1
- >> cwr1)
- - (unsigned int)(lg_pmps1
- >> (cwr1
- + 2));
- } else {
- switch (cwr1) {
- case 3:
- lg_pmps1 = lg_pmps1 + 197;
- break;
- case 4:
- lg_pmps1 = lg_pmps1 + 95;
- break;
- default:
- lg_pmps1 = lg_pmps1 + 46;
- }
-
- if (lg_pmps1 >= (256 << LG_PMPS_SHIFTNO)) {
- lg_pmps1 = (512 << LG_PMPS_SHIFTNO) - 1
- - lg_pmps1;
- bi_ct1->MPS = !(bi_ct1->MPS);
- }
- }
- bi_ct1->LG_PMPS = lg_pmps1;
-
- if (bit == bit2) {
- lg_pmps2 =
- lg_pmps2
- - (unsigned int)(lg_pmps2
- >> cwr2)
- - (unsigned int)(lg_pmps2
- >> (cwr2
- + 2));
- } else {
- switch (cwr2) {
- case 3:
- lg_pmps2 = lg_pmps2 + 197;
- break;
- case 4:
- lg_pmps2 = lg_pmps2 + 95;
- break;
- default:
- lg_pmps2 = lg_pmps2 + 46;
- }
-
- if (lg_pmps2 >= (256 << LG_PMPS_SHIFTNO)) {
- lg_pmps2 = (512 << LG_PMPS_SHIFTNO) - 1
- - lg_pmps2;
- bi_ct2->MPS = !(bi_ct2->MPS);
- }
- }
- bi_ct2->LG_PMPS = lg_pmps2;
- }
-
-
- return bit;
-}
-
-/*!
- ************************************************************************
- * \brief
- * biari_decode_symbol_eq_prob():
- * \return
- * the decoded symbol
- ************************************************************************
- */
-unsigned int biari_decode_symbol_eq_prob(struct decoding_environment_s *dep)
-{
- unsigned char bit;
- struct bi_context_type_s octx;
- struct bi_context_type_s *ctx = &octx;
-
- ctx->LG_PMPS = (QUARTER << LG_PMPS_SHIFTNO) - 1;
- ctx->MPS = 0;
- ctx->cycno = 0xfe;
- dec_bypass = 1;
- bit = biari_decode_symbol(dep, ctx);
- dec_bypass = 0;
- return bit;
-}
-
-unsigned int biari_decode_final(struct decoding_environment_s *dep)
-{
- unsigned char bit;
- struct bi_context_type_s octx;
- struct bi_context_type_s *ctx = &octx;
-
- ctx->LG_PMPS = 1 << LG_PMPS_SHIFTNO;
- ctx->MPS = 0;
- ctx->cycno = 0xff;
- dec_final = 1;
- bit = biari_decode_symbol(dep, ctx);
- dec_final = 0;
- return bit;
-}
-
-int i_8(char *tracestring)
-{
- int frame_bitoffset = curr_stream->frame_bitoffset;
- unsigned char *buf = curr_stream->stream_buffer;
- int bitstreamlengthinbytes = curr_stream->bitstream_length;
- struct syntaxelement symbol, *sym = &symbol;
-#ifdef AVSP_LONG_CABAC
-#else
- assert(curr_stream->stream_buffer != NULL);
-#endif
-
- sym->len = 8;
- sym->type = SE_HEADER;
- sym->mapping = linfo_ue;
-
- if ((get_bits(buf, frame_bitoffset, &(sym->inf), bitstreamlengthinbytes,
- sym->len)) < 0)
- return -1;
- curr_stream->frame_bitoffset += sym->len;
- sym->value1 = sym->inf;
- if (sym->inf & 0x80)
- sym->inf = -(~((int)0xffffff00 | sym->inf) + 1);
-#if TRACE
- tracebits2(sym->tracestring, sym->len, sym->inf);
-#endif
- return sym->inf;
-}
-
-/*!
- ************************************************************************
- * \brief
- * arideco_bits_read
- ************************************************************************
- */
-int arideco_bits_read(struct decoding_environment_s *dep)
-{
-
- return 8 * ((*dcodestrm_len) - 1) + (8 - dbits_to_go);
-}
-
-/*!
- ************************************************************************
- * \brief
- * arithmetic decoding
- ************************************************************************
- */
-int read_syntaxelement_aec(struct syntaxelement *se, struct img_par *img,
- struct datapartition *this_data_part)
-{
- int curr_len;
- struct decoding_environment_s *dep_dp = &(this_data_part->de_aec);
-
- curr_len = arideco_bits_read(dep_dp);
-
- se->reading(se, img, dep_dp);
-
- se->len = (arideco_bits_read(dep_dp) - curr_len);
- return se->len;
-}
-
-/*!
- ************************************************************************
- * \brief
- * This function is used to arithmetically decode the
- * run length info of the skip mb
- ************************************************************************
- */
-void readrunlenghtfrombuffer_aec(struct syntaxelement *se, struct img_par *img,
- struct decoding_environment_s *dep_dp)
-{
- struct bi_context_type_s *pctx;
- int ctx, symbol;
-
- pctx = img->current_slice->tex_ctx->one_contexts[0];
- symbol = 0;
- ctx = 0;
- while (biari_decode_symbol(dep_dp, pctx + ctx) == 0) {
- symbol += 1;
- ctx++;
- if (ctx >= 3)
- ctx = 3;
- }
- se->value1 = symbol;
-#if TRACE
- fprintf(p_trace, "@%d%s\t\t\t%d\n",
- symbol_count++, se->tracestring, se->value1);
- fflush(p_trace);
-#endif
-}
-
-/*!
- ************************************************************************
- * \brief
- * This function is used to arithmetically decode a pair of
- * intra prediction modes of a given MB.
- ************************************************************************
- */
-int mapd_intrap[5] = {0, 2, 3, 4, 1};
-void read_intrapredmode_aec(struct syntaxelement *se, struct img_par *img,
- struct decoding_environment_s *dep_dp)
-{
- struct bi_context_type_s *pctx;
- int ctx, symbol;
-
- pctx = img->current_slice->tex_ctx->one_contexts[1];
- symbol = 0;
- ctx = 0;
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & AEC_DUMP)
- io_printf(" -- read_intrapredmode_aec ctx : %d\n", ctx);
-#endif
- while (biari_decode_symbol(dep_dp, pctx + ctx) == 0) {
- symbol += 1;
- ctx++;
- if (ctx >= 3)
- ctx = 3;
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & AEC_DUMP)
- io_printf(" -- read_intrapredmode_aec ctx : %d\n", ctx);
-#endif
- if (symbol == 4)
- break;
- }
- se->value1 = mapd_intrap[symbol] - 1;
-
-#if TRACE
- fprintf(p_trace, "@%d %s\t\t\t%d\n",
- symbol_count++, se->tracestring, se->value1);
- fflush(p_trace);
-#endif
-}
-
-/*!
- ************************************************************************
- * \brief
- * decoding of unary binarization using one or 2 distinct
- * models for the first and all remaining bins; no terminating
- * "0" for max_symbol
- ***********************************************************************
- */
-unsigned int unary_bin_max_decode(struct decoding_environment_s *dep_dp,
- struct bi_context_type_s *ctx,
- int ctx_offset, unsigned int max_symbol)
-{
- unsigned int l;
- unsigned int symbol;
- struct bi_context_type_s *ictx;
-
- symbol = biari_decode_symbol(dep_dp, ctx);
-
- if (symbol == 0)
- return 0;
-
- if (max_symbol == 1)
- return symbol;
- symbol = 0;
- ictx = ctx + ctx_offset;
- do {
- l = biari_decode_symbol(dep_dp, ictx);
- symbol++;
- } while ((l != 0) && (symbol < max_symbol - 1));
- if ((l != 0) && (symbol == max_symbol - 1))
- symbol++;
- return symbol;
-}
-
-/*!
- ************************************************************************
- * \brief
- * decoding of unary binarization using one or 2 distinct
- * models for the first and all remaining bins
- ***********************************************************************
- */
-unsigned int unary_bin_decode(struct decoding_environment_s *dep_dp,
- struct bi_context_type_s *ctx, int ctx_offset)
-{
- unsigned int l;
- unsigned int symbol;
- struct bi_context_type_s *ictx;
-
- symbol = 1 - biari_decode_symbol(dep_dp, ctx);
-
- if (symbol == 0)
- return 0;
- symbol = 0;
- ictx = ctx + ctx_offset;
- do {
- l = 1 - biari_decode_symbol(dep_dp, ictx);
- symbol++;
- } while (l != 0);
- return symbol;
-}
-
-/*!
- ************************************************************************
- * \brief
- * This function is used to arithmetically decode the chroma
- * intra prediction mode of a given MB.
- ************************************************************************
- */
-void read_cipredmode_aec(struct syntaxelement *se,
- struct img_par *img,
- struct decoding_environment_s *dep_dp)
-{
- struct texture_info_contexts *ctx = img->current_slice->tex_ctx;
- struct macroblock *curr_mb = &mb_data[img->current_mb_nr];
- int act_ctx, a, b;
- int act_sym = se->value1;
-
- if (curr_mb->mb_available_up == NULL)
- b = 0;
- else {
- /*if ( (curr_mb->mb_available_up)->mb_type==IPCM)
- * b=0;
- * else
- */
- b = (((curr_mb->mb_available_up)->c_ipred_mode != 0) ? 1 : 0);
- }
-
- if (curr_mb->mb_available_left == NULL)
- a = 0;
- else {
- /* if ( (curr_mb->mb_available_left)->mb_type==IPCM)
- * a=0;
- * else
- */
- a = (((curr_mb->mb_available_left)->c_ipred_mode != 0) ? 1 : 0);
- }
-
- act_ctx = a + b;
-
-
- act_sym = biari_decode_symbol(dep_dp, ctx->cipr_contexts + act_ctx);
-
- if (act_sym != 0)
- act_sym = unary_bin_max_decode(dep_dp, ctx->cipr_contexts + 3,
- 0, 2) + 1;
-
- se->value1 = act_sym;
-
-#if TRACE
- fprintf(p_trace, "@%d %s\t\t%d\n",
- symbol_count++, se->tracestring, se->value1);
- fflush(p_trace);
-#endif
-
-}
-
-int slice_header(char *buf, int startcodepos, int length)
-{
- int i;
-
- int weight_para_num = 0;
- int mb_row;
- int mb_column;
- int mb_index;
- int mb_width, mb_height;
-
- mb_column = 0;
-
- memcpy(curr_stream->stream_buffer, buf, length);
- curr_stream->code_len = curr_stream->bitstream_length = length;
-
- curr_stream->read_len =
- curr_stream->frame_bitoffset = (startcodepos) * 8;
- slice_vertical_position = u_v(8, "slice vertical position");
-
- push_es(slice_vertical_position, 8);
-
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & SLICE_INFO_DUMP)
- io_printf(" * 8-bits slice_vertical_position : %d\n",
- slice_vertical_position);
-#endif
-
- if (vertical_size > 2800) {
- slice_vertical_position_extension = u_v(3,
- "slice vertical position extension");
- push_es(slice_vertical_position_extension, 3);
-
- }
-
- if (vertical_size > 2800)
- mb_row = (slice_vertical_position_extension << 7)
- + slice_vertical_position;
- else
- mb_row = slice_vertical_position;
-
- mb_width = (horizontal_size + 15) / 16;
- if (!progressive_sequence)
- mb_height = 2 * ((vertical_size + 31) / 32);
- else
- mb_height = (vertical_size + 15) / 16;
-
-
- mb_index = mb_row * mb_width + mb_column;
-
- if (!img->picture_structure && img->type == I_IMG
- && (mb_index >= mb_width * mb_height / 2)) {
- second_ifield = 1;
- img->type = P_IMG;
- pre_img_type = P_IMG;
- }
-
- {
- if (!fixed_picture_qp) {
- fixed_slice_qp = u_v(1, "fixed_slice_qp");
- push_es(fixed_slice_qp, 1);
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & SLICE_INFO_DUMP)
- io_printf(" * 1-bit fixed_slice_qp : %d\n",
- fixed_slice_qp);
-#endif
- slice_qp = u_v(6, "slice_qp");
- push_es(slice_qp, 6);
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & SLICE_INFO_DUMP)
- io_printf(" * 6-bits slice_qp : %d\n",
- slice_qp);
-#endif
-
- img->qp = slice_qp;
- }
-
- if (img->type != I_IMG) {
- img->slice_weighting_flag = u_v(1,
- "slice weighting flag");
-
- if (img->slice_weighting_flag) {
-
- if (second_ifield && !img->picture_structure)
- weight_para_num = 1;
- else if (img->type == P_IMG
- && img->picture_structure)
- weight_para_num = 2;
- else if (img->type == P_IMG
- && !img->picture_structure)
- weight_para_num = 4;
- else if (img->type == B_IMG
- && img->picture_structure)
- weight_para_num = 2;
- else if (img->type == B_IMG
- && !img->picture_structure)
- weight_para_num = 4;
-
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & SLICE_INFO_DUMP)
- io_printf(" - weight_para_num : %d\n",
- weight_para_num);
-#endif
- for (i = 0; i < weight_para_num; i++) {
- img->lum_scale[i] = u_v(8,
- "luma scale");
-
- img->lum_shift[i] = i_8("luma shift");
-
- marker_bit = u_1("insert bit");
-
-
- {
- img->chroma_scale[i] = u_v(8,
- "chroma scale");
-
- img->chroma_shift[i] = i_8(
- "chroma shift");
-
- marker_bit = u_1("insert bit");
-
- }
- }
- img->mb_weighting_flag = u_v(1,
- "MB weighting flag");
-
- }
- }
- }
-
-
-#if 1
- return mb_index;
-#endif
-}
-
-void no_mem_exit(char *where)
-{
- io_printf("%s\r\n", where);
-}
-
-unsigned char bit[8] = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
-
-struct inputstream_s {
- /*FILE *f;*/
- unsigned char buf[SVA_STREAM_BUF_SIZE];
- unsigned int uclear_bits;
- unsigned int upre_3bytes;
- int ibyte_position;
- int ibuf_bytesnum;
- int iclear_bitsnum;
- int istuff_bitsnum;
- int ibits_count;
-};
-
-struct inputstream_s IRABS;
-struct inputstream_s *p_irabs = &IRABS;
-
-struct stat_bits {
- int curr_frame_bits;
- int prev_frame_bits;
- int emulate_bits;
- int prev_emulate_bits;
- int last_unit_bits;
- int bitrate;
- int total_bitrate[1000];
- int coded_pic_num;
- int time_s;
-};
-
-struct stat_bits *stat_bits_ptr;
-
-unsigned char *temp_slice_buf;
-int start_codeposition;
-int first_slice_length;
-int first_slice_startpos;
-
-int bitstream_buf_used;
-int startcode_offset;
-
-int bitstream_read_ptr;
-
-int demulate_enable;
-
-int last_dquant;
-
-int total_mb_count;
-
-int current_mb_skip;
-
-int skip_mode_flag;
-
-int current_mb_intra;
-
-/*
- *************************************************************************
- * Function: Check start code's type
- * Input:
- * Output:
- * Return:
- * Author: XZHENG, 20080515
- *************************************************************************
- */
-void check_type(int startcode)
-{
- startcode = startcode & 0x000000ff;
- switch (startcode) {
- case 0xb0:
- case 0xb2:
- case 0xb5:
- demulate_enable = 0;
- break;
- default:
- demulate_enable = 1;
- break;
- }
-
-}
-/*
- *************************************************************************
- * Function:
- * Input:
- * Output:
- * Return: 0 : OK
- -1 : arrive at stream end
- -2 : meet another start code
- * Attention:
- *************************************************************************
- */
-int clear_nextbyte(struct inputstream_s *p)
-{
- int i, k, j;
- unsigned char temp[3];
-
- i = p->ibyte_position;
- k = p->ibuf_bytesnum - i;
- if (k < 3) {
- for (j = 0; j < k; j++)
- temp[j] = p->buf[i + j];
-
- p->ibuf_bytesnum = read_bitstream(p->buf + k,
- SVA_STREAM_BUF_SIZE - k);
- bitstream_buf_used++;
- if (p->ibuf_bytesnum == 0) {
- if (k > 0) {
- while (k > 0) {
- p->upre_3bytes = ((p->upre_3bytes << 8)
- | p->buf[i])
- & 0x00ffffff;
- if (p->upre_3bytes < 4
- && demulate_enable) {
- p->uclear_bits =
- (p->uclear_bits
- << 6)
- | (p->buf[i]
- >> 2);
- p->iclear_bitsnum += 6;
- stat_bits_ptr->emulate_bits
- += 2;
- } else {
- p->uclear_bits = (p->uclear_bits
- << 8)
- | p->buf[i];
- p->iclear_bitsnum += 8;
- }
- p->ibyte_position++;
- k--;
- i++;
- }
- return 0;
- } else {
- return -1;
- }
- } else {
- for (j = 0; j < k; j++)
- p->buf[j] = temp[j];
- p->ibuf_bytesnum += k;
- i = p->ibyte_position = 0;
- }
- }
- if (p->buf[i] == 0 && p->buf[i + 1] == 0 && p->buf[i + 2] == 1)
- return -2;
- p->upre_3bytes = ((p->upre_3bytes << 8) | p->buf[i]) & 0x00ffffff;
- if (p->upre_3bytes < 4 && demulate_enable) {
- p->uclear_bits = (p->uclear_bits << 6) | (p->buf[i] >> 2);
- p->iclear_bitsnum += 6;
- stat_bits_ptr->emulate_bits += 2;
- } else {
- p->uclear_bits = (p->uclear_bits << 8) | p->buf[i];
- p->iclear_bitsnum += 8;
- }
- p->ibyte_position++;
- return 0;
-}
-
-/*
- *************************************************************************
- * Function:
- * Input:
- * Output:
- * Return: 0 : OK
- -1 : arrive at stream end
- -2 : meet another start code
- * Attention:
- *************************************************************************
- */
-int read_n_bit(struct inputstream_s *p, int n, int *v)
-{
- int r;
- unsigned int t;
-
- while (n > p->iclear_bitsnum) {
- r = clear_nextbyte(p);
- if (r) {
- if (r == -1) {
- if (p->ibuf_bytesnum - p->ibyte_position > 0)
- break;
- }
- return r;
- }
- }
- t = p->uclear_bits;
- r = 32 - p->iclear_bitsnum;
- *v = (t << r) >> (32 - n);
- p->iclear_bitsnum -= n;
- return 0;
-}
-
-#ifdef AVSP_LONG_CABAC
-unsigned char TMP_BUF[2 * SVA_STREAM_BUF_SIZE];
-int tmp_buf_wr_ptr;
-int tmp_buf_rd_ptr;
-int tmp_buf_count;
-#endif
-void open_irabs(struct inputstream_s *p)
-{
- p->uclear_bits = 0xffffffff;
- p->ibyte_position = 0;
- p->ibuf_bytesnum = 0;
- p->iclear_bitsnum = 0;
- p->istuff_bitsnum = 0;
- p->ibits_count = 0;
- p->upre_3bytes = 0;
-
- bitstream_buf_used = 0;
- bitstream_read_ptr = (src_start - 16) & 0xfffffff0;
-
-#ifdef AVSP_LONG_CABAC
- tmp_buf_count = 0;
- tmp_buf_wr_ptr = 0;
- tmp_buf_rd_ptr = 0;
-#endif
-
-}
-
-void move_bitstream(unsigned int move_from_addr, unsigned int move_to_addr,
- int move_size)
-{
- int move_bytes_left = move_size;
- unsigned int move_read_addr;
- unsigned int move_write_addr = move_to_addr;
-
- int move_byte;
- unsigned int data32;
-
- while (move_from_addr > vld_mem_end_addr) {
- move_from_addr = move_from_addr + vld_mem_start_addr
- - vld_mem_end_addr - 8;
- }
- move_read_addr = move_from_addr;
- while (move_bytes_left > 0) {
- move_byte = move_bytes_left;
- if (move_byte > 512)
- move_byte = 512;
- if ((move_read_addr + move_byte) > vld_mem_end_addr)
- move_byte = (vld_mem_end_addr + 8) - move_read_addr;
-
- WRITE_VREG(LMEM_DMA_ADR, move_read_addr);
- WRITE_VREG(LMEM_DMA_COUNT, move_byte / 2);
- WRITE_VREG(LMEM_DMA_CTRL, 0xc200);
-
- data32 = 0x8000;
- while (data32 & 0x8000)
- data32 = READ_VREG(LMEM_DMA_CTRL);
-
- WRITE_VREG(LMEM_DMA_ADR, move_write_addr);
- WRITE_VREG(LMEM_DMA_COUNT, move_byte / 2);
- WRITE_VREG(LMEM_DMA_CTRL, 0x8200);
-
- data32 = 0x8000;
- while (data32 & 0x8000)
- data32 = READ_VREG(LMEM_DMA_CTRL);
-
- data32 = 0x0fff;
- while (data32 & 0x0fff)
- data32 = READ_VREG(WRRSP_LMEM);
-
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & STREAM_INFO_DUMP)
- io_printf(" 2 MOVE %d Bytes from 0x%x to 0x%x\n",
- move_byte, move_read_addr, move_write_addr);
-#endif
-
- move_read_addr = move_read_addr + move_byte;
- if (move_read_addr > vld_mem_end_addr)
- move_read_addr = vld_mem_start_addr;
- move_write_addr = move_write_addr + move_byte;
- move_bytes_left = move_bytes_left - move_byte;
- }
-
-}
-
-int read_bitstream(unsigned char *buf, int size)
-{
- int i;
-
-#ifdef AVSP_LONG_CABAC
-
- unsigned int *TMP_BUF_32 = (unsigned int *)bitstream_read_tmp;
-
- if (tmp_buf_count < size) {
- dma_sync_single_for_cpu(amports_get_dma_device(),
- bitstream_read_tmp_phy, SVA_STREAM_BUF_SIZE,
- DMA_FROM_DEVICE);
-
- move_bitstream(bitstream_read_ptr, bitstream_read_tmp_phy,
- SVA_STREAM_BUF_SIZE);
-
- for (i = 0; i < SVA_STREAM_BUF_SIZE / 8; i++) {
- TMP_BUF[tmp_buf_wr_ptr++] =
- (TMP_BUF_32[2 * i + 1] >> 24) & 0xff;
- if (tmp_buf_wr_ptr >= (2 * SVA_STREAM_BUF_SIZE))
- tmp_buf_wr_ptr = 0;
- TMP_BUF[tmp_buf_wr_ptr++] =
- (TMP_BUF_32[2 * i + 1] >> 16) & 0xff;
- if (tmp_buf_wr_ptr >= (2 * SVA_STREAM_BUF_SIZE))
- tmp_buf_wr_ptr = 0;
- TMP_BUF[tmp_buf_wr_ptr++] = (TMP_BUF_32[2 * i + 1] >> 8)
- & 0xff;
- if (tmp_buf_wr_ptr >= (2 * SVA_STREAM_BUF_SIZE))
- tmp_buf_wr_ptr = 0;
- TMP_BUF[tmp_buf_wr_ptr++] = (TMP_BUF_32[2 * i + 1] >> 0)
- & 0xff;
- if (tmp_buf_wr_ptr >= (2 * SVA_STREAM_BUF_SIZE))
- tmp_buf_wr_ptr = 0;
- TMP_BUF[tmp_buf_wr_ptr++] =
- (TMP_BUF_32[2 * i + 0] >> 24) & 0xff;
- if (tmp_buf_wr_ptr >= (2 * SVA_STREAM_BUF_SIZE))
- tmp_buf_wr_ptr = 0;
- TMP_BUF[tmp_buf_wr_ptr++] =
- (TMP_BUF_32[2 * i + 0] >> 16) & 0xff;
- if (tmp_buf_wr_ptr >= (2 * SVA_STREAM_BUF_SIZE))
- tmp_buf_wr_ptr = 0;
- TMP_BUF[tmp_buf_wr_ptr++] = (TMP_BUF_32[2 * i + 0] >> 8)
- & 0xff;
- if (tmp_buf_wr_ptr >= (2 * SVA_STREAM_BUF_SIZE))
- tmp_buf_wr_ptr = 0;
- TMP_BUF[tmp_buf_wr_ptr++] = (TMP_BUF_32[2 * i + 0] >> 0)
- & 0xff;
- if (tmp_buf_wr_ptr >= (2 * SVA_STREAM_BUF_SIZE))
- tmp_buf_wr_ptr = 0;
- }
- tmp_buf_count = tmp_buf_count + SVA_STREAM_BUF_SIZE;
- bitstream_read_ptr = bitstream_read_ptr + SVA_STREAM_BUF_SIZE;
- }
-
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & STREAM_INFO_DUMP)
- io_printf(" Read %d bytes from %d, size left : %d\n",
- size, tmp_buf_rd_ptr, tmp_buf_count);
-#endif
- for (i = 0; i < size; i++) {
- buf[i] = TMP_BUF[tmp_buf_rd_ptr++];
- if (tmp_buf_rd_ptr >= (2 * SVA_STREAM_BUF_SIZE))
- tmp_buf_rd_ptr = 0;
- }
- tmp_buf_count = tmp_buf_count - size;
-
-#else
- for (i = 0; i < size; i++)
- buf[i] = tmp_stream[bitstream_read_ptr + i];
- bitstream_read_ptr = bitstream_read_ptr + size;
-#endif
-
- return size;
-}
-
-int next_startcode(struct inputstream_s *p)
-{
- int i, m;
- unsigned char a = 0, b = 0;
-
- m = 0;
-
- while (1) {
- if (p->ibyte_position >= p->ibuf_bytesnum - 2) {
- m = p->ibuf_bytesnum - p->ibyte_position;
- if (m < 0)
- return -2;
- if (m == 1)
- b = p->buf[p->ibyte_position + 1];
- if (m == 2) {
- b = p->buf[p->ibyte_position + 1];
- a = p->buf[p->ibyte_position];
- }
- p->ibuf_bytesnum = read_bitstream(p->buf,
- SVA_STREAM_BUF_SIZE);
- p->ibyte_position = 0;
- bitstream_buf_used++;
- }
-
- if (p->ibuf_bytesnum + m < 3)
- return -1;
-
- if (m == 1 && b == 0 && p->buf[0] == 0 && p->buf[1] == 1) {
- p->ibyte_position = 2;
- p->iclear_bitsnum = 0;
- p->istuff_bitsnum = 0;
- p->ibits_count += 24;
- p->upre_3bytes = 1;
- return 0;
- }
-
- if (m == 2 && b == 0 && a == 0 && p->buf[0] == 1) {
- p->ibyte_position = 1;
- p->iclear_bitsnum = 0;
- p->istuff_bitsnum = 0;
- p->ibits_count += 24;
- p->upre_3bytes = 1;
- return 0;
- }
-
- if (m == 2 && b == 0 && p->buf[0] == 0 && p->buf[1] == 1) {
- p->ibyte_position = 2;
- p->iclear_bitsnum = 0;
- p->istuff_bitsnum = 0;
- p->ibits_count += 24;
- p->upre_3bytes = 1;
- return 0;
- }
-
- for (i = p->ibyte_position; i < p->ibuf_bytesnum - 2; i++) {
- if (p->buf[i] == 0 && p->buf[i + 1] == 0
- && p->buf[i + 2] == 1) {
- p->ibyte_position = i + 3;
- p->iclear_bitsnum = 0;
- p->istuff_bitsnum = 0;
- p->ibits_count += 24;
- p->upre_3bytes = 1;
- return 0;
- }
- p->ibits_count += 8;
- }
- p->ibyte_position = i;
- }
-}
-
-int get_oneunit(char *buf, int *startcodepos, int *length)
-{
- int i, j, k;
-
- i = next_startcode(p_irabs);
-
- if (i != 0) {
- if (i == -1)
- io_printf(
- "\narrive at stream end and start code is not found!");
- if (i == -2)
- io_printf("\np->ibyte_position error!");
-
- }
- startcode_offset =
- p_irabs->ibyte_position
- - 3 + (bitstream_buf_used-1)
- * SVA_STREAM_BUF_SIZE;
- buf[0] = 0;
- buf[1] = 0;
- buf[2] = 1;
- *startcodepos = 3;
- i = read_n_bit(p_irabs, 8, &j);
- buf[3] = (char)j;
-
- check_type(buf[3]);
- if (buf[3] == SEQUENCE_END_CODE) {
- *length = 4;
- return -1;
- }
- k = 4;
- while (1) {
- i = read_n_bit(p_irabs, 8, &j);
- if (i < 0)
- break;
- buf[k++] = (char)j;
- if (k >= (MAX_CODED_FRAME_SIZE - 1))
- break;
- }
- if (p_irabs->iclear_bitsnum > 0) {
- int shift;
-
- shift = 8 - p_irabs->iclear_bitsnum;
- i = read_n_bit(p_irabs, p_irabs->iclear_bitsnum, &j);
-
- if (j != 0)
- buf[k++] = (char)(j << shift);
- stat_bits_ptr->last_unit_bits += shift;
- }
- *length = k;
- return k;
-}
-
-/*unsigned char tmp_buf[MAX_CODED_FRAME_SIZE] __attribute__ ((aligned(64)));*/
-/*unsigned char tmp_buf[MAX_CODED_FRAME_SIZE] __aligned(64);*/
-int header(void)
-{
- unsigned char *buf;
- int startcodepos, length;
-
- unsigned char *tmp_buf;
-
- tmp_buf = (unsigned char *)avsp_heap_adr;
-
- buf = &tmp_buf[0];
- while (1) {
- start_codeposition = get_oneunit(buf, &startcodepos, &length);
-
- switch (buf[startcodepos]) {
- case SEQUENCE_HEADER_CODE:
- io_printf(
- "# SEQUENCE_HEADER_CODE (0x%02x) found at offset %d (0x%x)\n",
- buf[startcodepos], startcode_offset,
- startcode_offset);
- break;
- case EXTENSION_START_CODE:
- io_printf(
- "# EXTENSION_START_CODE (0x%02x) found at offset %d (0x%x)\n",
- buf[startcodepos], startcode_offset,
- startcode_offset);
- break;
- case USER_DATA_START_CODE:
- io_printf(
- "# USER_DATA_START_CODE (0x%02x) found at offset %d (0x%x)\n",
- buf[startcodepos], startcode_offset,
- startcode_offset);
- break;
- case VIDEO_EDIT_CODE:
- io_printf(
- "# VIDEO_EDIT_CODE (0x%02x) found at offset %d (0x%x)\n",
- buf[startcodepos], startcode_offset,
- startcode_offset);
- break;
- case I_PICTURE_START_CODE:
- io_printf(
- "# I_PICTURE_START_CODE (0x%02x) found at offset %d (0x%x)\n",
- buf[startcodepos], startcode_offset,
- startcode_offset);
- break;
- case PB_PICTURE_START_CODE:
- io_printf(
- "# PB_PICTURE_START_CODE (0x%02x) found at offset %d (0x%x)\n",
- buf[startcodepos], startcode_offset,
- startcode_offset);
- break;
- case SEQUENCE_END_CODE:
- io_printf(
- "# SEQUENCE_END_CODE (0x%02x) found at offset %d (0x%x)\n",
- buf[startcodepos], startcode_offset,
- startcode_offset);
- break;
- default:
- io_printf(
- "# SLICE_START_CODE (0x%02x) found at offset %d (0x%x)\n",
- buf[startcodepos], startcode_offset,
- startcode_offset);
-#if 0
- io_printf("VLD_MEM_VIFIFO_START_PTR %x\r\n",
- READ_VREG(VLD_MEM_VIFIFO_START_PTR));
- io_printf("VLD_MEM_VIFIFO_CURR_PTR %x\r\n",
- READ_VREG(VLD_MEM_VIFIFO_CURR_PTR));
- io_printf("VLD_MEM_VIFIFO_END_PTR %x\r\n",
- READ_VREG(VLD_MEM_VIFIFO_END_PTR));
- io_printf("VLD_MEM_VIFIFO_WP %x\r\n"
- READ_VREG(VLD_MEM_VIFIFO_WP));
- io_printf("VLD_MEM_VIFIFO_RP %x\r\n",
- READ_VREG(VLD_MEM_VIFIFO_RP));
- io_printf("VLD_MEM_VBUF_RD_PTR %x\r\n"
- READ_VREG(VLD_MEM_VBUF_RD_PTR));
- io_printf("VLD_MEM_VIFIFO_BUF_CNTL %x\r\n",
- READ_VREG(VLD_MEM_VIFIFO_BUF_CNTL));
- io_printf("PARSER_VIDEO_HOLE %x\r\n",
- READ_MPEG_REG(PARSER_VIDEO_HOLE));
-#endif
- if ((buf[startcodepos] >= SLICE_START_CODE_MIN
- && buf[startcodepos]
- <= SLICE_START_CODE_MAX)
- && ((!img->seq_header_indicate)
- || (img->type == B_IMG
- && img->b_discard_flag
- == 1
- && !img->no_forward_reference))) {
- break;
- } else if (buf[startcodepos] >= SLICE_START_CODE_MIN) {
-
- first_slice_length = length;
- first_slice_startpos = startcodepos;
-
- temp_slice_buf = &tmp_buf[0];
- return SOP;
- } else {
- io_printf("Can't find start code");
- return -EOS;
- }
- }
- }
-
-}
-
-/*
- *************************************************************************
- * Function:Allocates a Bitstream
- * Input:
- * Output:allocated Bitstream point
- * Return:
- * Attention:
- *************************************************************************
- */
-struct bitstream_s *alloc_bitstream(void)
-{
- struct bitstream_s *bitstream;
-
- bitstream = (struct bitstream_s *)local_alloc(1,
- sizeof(struct bitstream_s));
- if (bitstream == NULL) {
- io_printf(
- "AllocBitstream: Memory allocation for Bitstream failed");
- return NULL;
- }
- bitstream->stream_buffer = (unsigned char *)local_alloc(
- MAX_CODED_FRAME_SIZE,
- sizeof(unsigned char));
- if (bitstream->stream_buffer == NULL) {
- io_printf(
- "AllocBitstream: Memory allocation for streamBuffer failed");
- return NULL;
- }
-
- return bitstream;
-}
-
-void biari_init_context_logac(struct bi_context_type_s *ctx)
-{
- ctx->LG_PMPS = (QUARTER << LG_PMPS_SHIFTNO) - 1;
- ctx->MPS = 0;
- ctx->cycno = 0;
-}
-
-#define BIARI_CTX_INIT1_LOG(jj, ctx)\
-{\
- for (j = 0; j < jj; j++)\
- biari_init_context_logac(&(ctx[j]));\
-}
-
-#define BIARI_CTX_INIT2_LOG(ii, jj, ctx)\
-{\
- for (i = 0; i < ii; i++)\
- for (j = 0; j < jj; j++)\
- biari_init_context_logac(&(ctx[i][j]));\
-}
-
-#define BIARI_CTX_INIT3_LOG(ii, jj, kk, ctx)\
-{\
- for (i = 0; i < ii; i++)\
- for (j = 0; j < jj; j++)\
- for (k = 0; k < kk; k++)\
- biari_init_context_logac(&(ctx[i][j][k]));\
-}
-
-#define BIARI_CTX_INIT4_LOG(ii, jj, kk, ll, ctx)\
-{\
- for (i = 0; i < ii; i++)\
- for (j = 0; j < jj; j++)\
- for (k = 0; k < kk; k++)\
- for (l = 0; l < ll; l++)\
- biari_init_context_logac\
- (&(ctx[i][j][k][l]));\
-}
-
-void init_contexts(struct img_par *img)
-{
- struct motion_info_contexts_s *mc = img->current_slice->mot_ctx;
- struct texture_info_contexts *tc = img->current_slice->tex_ctx;
- int i, j;
-
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & SLICE_INFO_DUMP)
- io_printf(" ---- init_contexts ----\n");
-#endif
-
- BIARI_CTX_INIT2_LOG(3, NUM_MB_TYPE_CTX, mc->mb_type_contexts);
- BIARI_CTX_INIT2_LOG(2, NUM_B8_TYPE_CTX, mc->b8_type_contexts);
- BIARI_CTX_INIT2_LOG(2, NUM_MV_RES_CTX, mc->mv_res_contexts);
- BIARI_CTX_INIT2_LOG(2, NUM_REF_NO_CTX, mc->ref_no_contexts);
- BIARI_CTX_INIT1_LOG(NUM_DELTA_QP_CTX, mc->delta_qp_contexts);
- BIARI_CTX_INIT1_LOG(NUM_MB_AFF_CTX, mc->mb_aff_contexts);
-
- BIARI_CTX_INIT1_LOG(NUM_IPR_CTX, tc->ipr_contexts);
- BIARI_CTX_INIT1_LOG(NUM_CIPR_CTX, tc->cipr_contexts);
- BIARI_CTX_INIT2_LOG(3, NUM_CBP_CTX, tc->cbp_contexts);
- BIARI_CTX_INIT2_LOG(NUM_BLOCK_TYPES, NUM_BCBP_CTX, tc->bcbp_contexts);
- BIARI_CTX_INIT2_LOG(NUM_BLOCK_TYPES, NUM_ONE_CTX, tc->one_contexts);
- BIARI_CTX_INIT2_LOG(NUM_BLOCK_TYPES, NUM_ABS_CTX, tc->abs_contexts);
- BIARI_CTX_INIT2_LOG(NUM_BLOCK_TYPES, NUM_MAP_CTX, tc->fld_map_contexts);
- BIARI_CTX_INIT2_LOG(NUM_BLOCK_TYPES, NUM_LAST_CTX,
- tc->fld_last_contexts);
- BIARI_CTX_INIT2_LOG(NUM_BLOCK_TYPES, NUM_MAP_CTX, tc->map_contexts);
- BIARI_CTX_INIT2_LOG(NUM_BLOCK_TYPES, NUM_LAST_CTX, tc->last_contexts);
-#ifdef TEST_WEIGHTING_AEC
- biari_init_context_logac(&mc->mb_weighting_pred);
-#endif
-}
-
-/*!
- ************************************************************************
- * \brief
- * Allocation of contexts models for the motion info
- * used for arithmetic decoding
- *
- ************************************************************************
- */
-struct motion_info_contexts_s *create_contexts_motioninfo(void)
-{
- struct motion_info_contexts_s *deco_ctx;
-
- deco_ctx = (struct motion_info_contexts_s *)local_alloc(1,
- sizeof(struct motion_info_contexts_s));
- if (deco_ctx == NULL)
- no_mem_exit("create_contexts_motioninfo: deco_ctx");
-
- return deco_ctx;
-}
-
-/*!
- ************************************************************************
- * \brief
- * Allocates of contexts models for the texture info
- * used for arithmetic decoding
- ************************************************************************
- */
-struct texture_info_contexts *create_contexts_textureinfo(void)
-{
- struct texture_info_contexts *deco_ctx;
-
- deco_ctx = (struct texture_info_contexts *)local_alloc(1,
- sizeof(struct texture_info_contexts));
- if (deco_ctx == NULL)
- no_mem_exit("create_contexts_textureinfo: deco_ctx");
-
- return deco_ctx;
-}
-
-struct datapartition *alloc_partition(int n)
-{
- struct datapartition *part_arr, *datapart;
- int i;
-
- part_arr =
- (struct datapartition *)local_alloc(n, sizeof(struct datapartition));
- if (part_arr == NULL) {
- no_mem_exit(
- "alloc_partition: Memory allocation for Data Partition failed");
- return NULL;
- }
-
-#if LIWR_FIX
- part_arr[0].bitstream = NULL;
-#else
- for (i = 0; i < n; i++) {
- datapart = &(part_arr[i]);
- datapart->bitstream = (struct bitstream_s *)local_alloc(1,
- sizeof(struct bitstream_s));
- if (datapart->bitstream == NULL) {
- no_mem_exit(
- "alloc_partition: Memory allocation for Bitstream failed");
- return NULL;
- }
- }
-#endif
- return part_arr;
-}
-
-int malloc_slice(struct img_par *img)
-{
- struct slice_s *currslice;
-
- img->current_slice =
- (struct slice_s *)local_alloc(1, sizeof(struct slice_s));
- currslice = img->current_slice;
- if (currslice == NULL) {
- no_mem_exit(
- "Memory allocation for struct slice_s datastruct Failed"
- );
- return 0;
- }
- if (1) {
-
- currslice->mot_ctx = create_contexts_motioninfo();
- if (currslice->mot_ctx == NULL)
- return 0;
-
- currslice->tex_ctx = create_contexts_textureinfo();
- if (currslice->tex_ctx == NULL)
- return 0;
- }
-#if LIWR_FIX
- currslice->max_part_nr = 1;
-#else
- currslice->max_part_nr = 3;
-#endif
- currslice->part_arr = alloc_partition(currslice->max_part_nr);
- if (currslice->part_arr == NULL)
- return 0;
- return 1;
-}
-
-void init(struct img_par *img)
-{
- int i;
-
- for (i = 0; i < 256; i++)
- img->quad[i] = i * i;
-}
-
-/*
- *************************************************************************
- * Function:Allocate 2D memory array -> int array2D[rows][columns]
- * Input:
- * Output: memory size in bytes
- * Return:
- * Attention:
- *************************************************************************
- */
-
-int get_mem2Dint(int ***array2D, int rows, int columns)
-{
- int i;
-
- *array2D = (int **)local_alloc(rows, sizeof(int *));
- if (*array2D == NULL) {
- no_mem_exit("get_mem2Dint: array2D");
- return -1;
- }
- (*array2D)[0] = (int *)local_alloc(rows * columns, sizeof(int));
- if ((*array2D)[0] == NULL) {
- no_mem_exit("get_mem2Dint: array2D");
- return -1;
- }
-
- for (i = 1; i < rows; i++)
- (*array2D)[i] = (*array2D)[i - 1] + columns;
-
- return rows * columns * sizeof(int);
-}
-
-int initial_decode(void)
-{
- int i, j;
- int ret;
- int img_height = (vertical_size + img->auto_crop_bottom);
- int memory_size = 0;
-
- ret = malloc_slice(img);
- if (ret == 0)
- return 0;
-
- mb_data = (struct macroblock *)local_alloc(
- (img->width / MB_BLOCK_SIZE)
- * (img_height /*vertical_size*/
- / MB_BLOCK_SIZE), sizeof(struct macroblock));
- if (mb_data == NULL) {
- no_mem_exit("init_global_buffers: mb_data");
- return 0;
- }
-
- if (progressive_sequence) {
- int size;
- size = get_mem2Dint(&(img->ipredmode),
- img->width / B8_SIZE * 2 + 4,
- vertical_size / B8_SIZE * 2 + 4);
- if (size == -1)
- return 0;
-
- memory_size += size;
- } else {
- int size;
- size = get_mem2Dint(&(img->ipredmode),
- img->width / B8_SIZE * 2 + 4,
- (vertical_size + 32) / (2 * B8_SIZE) * 4 + 4);
- if (size == -1)
- return 0;
-
- memory_size += size;
- }
-
- for (i = 0; i < img->width / (B8_SIZE) * 2 + 4; i++) {
- for (j = 0; j < img->height / (B8_SIZE) * 2 + 4; j++)
- img->ipredmode[i][j] = -1;
- }
-
- init(img);
- img->number = 0;
- img->type = I_IMG;
- img->imgtr_last_p = 0;
- img->imgtr_next_p = 0;
-
- img->new_seq_header_flag = 1;
- img->new_sequence_flag = 1;
-
- return 1;
-}
-
-void aec_new_slice(void)
-{
- last_dquant = 0;
-}
-
-/*!
- ************************************************************************
- * \brief
- * Initializes the DecodingEnvironment for the arithmetic coder
- ************************************************************************
- */
-
-void arideco_start_decoding(struct decoding_environment_s *dep,
- unsigned char *cpixcode,
- int firstbyte, int *cpixcode_len, int slice_type)
-{
-
- dcodestrm = cpixcode;
- dcodestrm_len = cpixcode_len;
- *dcodestrm_len = firstbyte;
-
- s1 = 0;
- t1 = QUARTER - 1;
- value_s = 0;
-
- value_t = 0;
-
- {
- int i;
-
- dbits_to_go = 0;
- for (i = 0; i < B_BITS - 1; i++) {
- if (--dbits_to_go < 0)
- get_byte();
-
- value_t = (value_t << 1)
- | ((dbuffer >> dbits_to_go) & 0x01);
- }
- }
-
- while (value_t < QUARTER) {
- if (--dbits_to_go < 0)
- get_byte();
-
- value_t = (value_t << 1) | ((dbuffer >> dbits_to_go) & 0x01);
- value_s++;
- }
- value_t = value_t & 0xff;
-
- dec_final = dec_bypass = 0;
-
-
-
-}
-
-/*
- *************************************************************************
- * Function:Checks the availability of neighboring macroblocks of
- the current macroblock for prediction and context determination;
- marks the unavailable MBs for intra prediction in the
- ipredmode-array by -1. Only neighboring MBs in the causal
- past of the current MB are checked.
- * Input:
- * Output:
- * Return:
- * Attention:
- *************************************************************************
- */
-
-void checkavailabilityofneighbors(struct img_par *img)
-{
- int i, j;
- const int mb_width = img->width / MB_BLOCK_SIZE;
- const int mb_nr = img->current_mb_nr;
- struct macroblock *curr_mb = &mb_data[mb_nr];
- int check_value;
- int remove_prediction;
-
- curr_mb->mb_available_up = NULL;
- curr_mb->mb_available_left = NULL;
-
- for (i = 0; i < 3; i++)
- for (j = 0; j < 3; j++)
- mb_data[mb_nr].mb_available[i][j] = NULL;
-
- mb_data[mb_nr].mb_available[1][1] = curr_mb;
-
- if (img->pix_x >= MB_BLOCK_SIZE) {
- remove_prediction = curr_mb->slice_nr
- != mb_data[mb_nr - 1].slice_nr;
-
- if (remove_prediction)
-
- {
-
- img->ipredmode[(img->block_x + 1) * 2 - 1][(img->block_y
- + 1) * 2] = -1;
- img->ipredmode[(img->block_x + 1) * 2 - 1][(img->block_y
- + 1) * 2 + 1] = -1;
- img->ipredmode[(img->block_x + 1) * 2 - 1][(img->block_y
- + 2) * 2] = -1;
- img->ipredmode[(img->block_x + 1) * 2 - 1][(img->block_y
- + 2) * 2 + 1] = -1;
- }
- if (!remove_prediction)
- curr_mb->mb_available[1][0] = &(mb_data[mb_nr - 1]);
-
- }
-
- check_value = (img->pix_y >= MB_BLOCK_SIZE);
- if (check_value) {
- remove_prediction = curr_mb->slice_nr
- != mb_data[mb_nr - mb_width].slice_nr;
-
- if (remove_prediction) {
- img->ipredmode
- [(img->block_x + 1) * 2][(img->block_y + 1)
- * 2 - 1] = -1;
- img->ipredmode[(img->block_x + 1) * 2 + 1][(img->block_y
- + 1) * 2 - 1] = -1;
- img->ipredmode[(img->block_x + 1) * 2 + 2][(img->block_y
- + 1) * 2 - 1] = -1;
- img->ipredmode[(img->block_x + 1) * 2 + 3][(img->block_y
- + 1) * 2 - 1] = -1;
- }
-
- if (!remove_prediction) {
- curr_mb->mb_available[0][1] =
- &(mb_data[mb_nr - mb_width]);
- }
- }
-
- if (img->pix_y >= MB_BLOCK_SIZE && img->pix_x >= MB_BLOCK_SIZE) {
- remove_prediction = curr_mb->slice_nr
- != mb_data[mb_nr - mb_width - 1].slice_nr;
-
- if (remove_prediction) {
- img->ipredmode[img->block_x * 2 + 1][img->block_y * 2
- + 1] = -1;
- }
- if (!remove_prediction) {
- curr_mb->mb_available[0][0] = &(mb_data[mb_nr - mb_width
- - 1]);
- }
- }
-
- if (img->pix_y >= MB_BLOCK_SIZE
- && img->pix_x < (img->width - MB_BLOCK_SIZE)) {
- if (curr_mb->slice_nr == mb_data[mb_nr - mb_width + 1].slice_nr)
- curr_mb->mb_available[0][2] = &(mb_data[mb_nr - mb_width
- + 1]);
- }
-
- if (1) {
- curr_mb->mbaddr_a = mb_nr - 1;
- curr_mb->mbaddr_b = mb_nr - img->pic_width_inmbs;
- curr_mb->mbaddr_c = mb_nr - img->pic_width_inmbs + 1;
- curr_mb->mbaddr_d = mb_nr - img->pic_width_inmbs - 1;
-
- curr_mb->mbavail_a =
- (curr_mb->mb_available[1][0] != NULL) ? 1 : 0;
- curr_mb->mbavail_b =
- (curr_mb->mb_available[0][1] != NULL) ? 1 : 0;
- curr_mb->mbavail_c =
- (curr_mb->mb_available[0][2] != NULL) ? 1 : 0;
- curr_mb->mbavail_d =
- (curr_mb->mb_available[0][0] != NULL) ? 1 : 0;
-
- }
-
-}
-
-void checkavailabilityofneighborsaec(void)
-{
-
- int i, j;
- const int mb_width = img->width / MB_BLOCK_SIZE;
- const int mb_nr = img->current_mb_nr;
- struct macroblock *curr_mb = &(mb_data[mb_nr]);
- int check_value;
-
- for (i = 0; i < 3; i++)
- for (j = 0; j < 3; j++)
- mb_data[mb_nr].mb_available[i][j] = NULL;
- mb_data[mb_nr].mb_available[1][1] = &(mb_data[mb_nr]);
-
- if (img->pix_x >= MB_BLOCK_SIZE) {
- int remove_prediction = curr_mb->slice_nr
- != mb_data[mb_nr - 1].slice_nr;
- if (!remove_prediction)
- curr_mb->mb_available[1][0] = &(mb_data[mb_nr - 1]);
- }
-
- check_value = (img->pix_y >= MB_BLOCK_SIZE);
- if (check_value) {
- int remove_prediction = curr_mb->slice_nr
- != mb_data[mb_nr - mb_width].slice_nr;
-
- if (!remove_prediction) {
- curr_mb->mb_available[0][1] =
- &(mb_data[mb_nr - mb_width]);
- }
- }
-
- if (img->pix_y >= MB_BLOCK_SIZE && img->pix_x >= MB_BLOCK_SIZE) {
- int remove_prediction = curr_mb->slice_nr
- != mb_data[mb_nr - mb_width - 1].slice_nr;
- if (!remove_prediction) {
- curr_mb->mb_available[0][0] = &(mb_data[mb_nr - mb_width
- - 1]);
- }
- }
-
- if (img->pix_y >= MB_BLOCK_SIZE
- && img->pix_x < (img->width - MB_BLOCK_SIZE)) {
- if (curr_mb->slice_nr == mb_data[mb_nr - mb_width + 1].slice_nr)
- curr_mb->mb_available[0][2] = &(mb_data[mb_nr - mb_width
- + 1]);
- }
- curr_mb->mb_available_left = curr_mb->mb_available[1][0];
- curr_mb->mb_available_up = curr_mb->mb_available[0][1];
- curr_mb->mbaddr_a = mb_nr - 1;
- curr_mb->mbaddr_b = mb_nr - img->pic_width_inmbs;
- curr_mb->mbaddr_c = mb_nr - img->pic_width_inmbs + 1;
- curr_mb->mbaddr_d = mb_nr - img->pic_width_inmbs - 1;
-
- curr_mb->mbavail_a = (curr_mb->mb_available[1][0] != NULL) ? 1 : 0;
- curr_mb->mbavail_b = (curr_mb->mb_available[0][1] != NULL) ? 1 : 0;
- curr_mb->mbavail_c = (curr_mb->mb_available[0][2] != NULL) ? 1 : 0;
- curr_mb->mbavail_d = (curr_mb->mb_available[0][0] != NULL) ? 1 : 0;
-}
-
-/*
- *************************************************************************
- * Function:initializes the current macroblock
- * Input:
- * Output:
- * Return:
- * Attention:
- *************************************************************************
- */
-
-void start_macroblock(struct img_par *img)
-{
- int i, j, k, l;
- struct macroblock *curr_mb;
-
-#ifdef AVSP_LONG_CABAC
-#else
-
-#endif
-
- curr_mb = &mb_data[img->current_mb_nr];
-
- /* Update coordinates of the current macroblock */
- img->mb_x = (img->current_mb_nr) % (img->width / MB_BLOCK_SIZE);
- img->mb_y = (img->current_mb_nr) / (img->width / MB_BLOCK_SIZE);
-
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & MB_NUM_DUMP)
- io_printf(" #Begin MB : %d, (%x, %x) es_ptr %d\n",
- img->current_mb_nr, img->mb_x, img->mb_y, es_ptr);
-#endif
-
-
- total_mb_count = total_mb_count + 1;
-
- /* Define vertical positions */
- img->block_y = img->mb_y * BLOCK_SIZE / 2; /* luma block position */
- img->block8_y = img->mb_y * BLOCK_SIZE / 2;
- img->pix_y = img->mb_y * MB_BLOCK_SIZE; /* luma macroblock position */
- if (chroma_format == 2)
- img->pix_c_y = img->mb_y *
- MB_BLOCK_SIZE; /* chroma macroblock position */
- else
- img->pix_c_y = img->mb_y *
- MB_BLOCK_SIZE / 2; /* chroma macroblock position */
-
- /* Define horizontal positions */
- img->block_x = img->mb_x * BLOCK_SIZE / 2; /* luma block position */
- img->block8_x = img->mb_x * BLOCK_SIZE / 2;
- img->pix_x = img->mb_x * MB_BLOCK_SIZE; /* luma pixel position */
- img->pix_c_x = img->mb_x *
- MB_BLOCK_SIZE / 2; /* chroma pixel position */
-
- checkavailabilityofneighbors(img);
-
- /*<!*******EDIT START BY lzhang ******************/
-
- if (1)
- checkavailabilityofneighborsaec();
- /*<!*******EDIT end BY lzhang ******************/
-
- curr_mb->qp = img->qp;
- curr_mb->mb_type = 0;
- curr_mb->delta_quant = 0;
- curr_mb->cbp = 0;
- curr_mb->cbp_blk = 0;
- curr_mb->c_ipred_mode = DC_PRED_8;
- curr_mb->c_ipred_mode_2 = DC_PRED_8;
-
- for (l = 0; l < 2; l++)
- for (j = 0; j < BLOCK_MULTIPLE; j++)
- for (i = 0; i < BLOCK_MULTIPLE; i++)
- for (k = 0; k < 2; k++)
- curr_mb->mvd[l][j][i][k] = 0;
-
- curr_mb->cbp_bits = 0;
-
- for (j = 0; j < MB_BLOCK_SIZE; j++)
- for (i = 0; i < MB_BLOCK_SIZE; i++)
- img->m7[i][j] = 0;
-
- for (j = 0; j < 2 * BLOCK_SIZE; j++)
- for (i = 0; i < 2 * BLOCK_SIZE; i++) {
- img->m8[0][i][j] = 0;
- img->m8[1][i][j] = 0;
- img->m8[2][i][j] = 0;
- img->m8[3][i][j] = 0;
- }
-
- curr_mb->lf_disable = 1;
-
- img->weighting_prediction = 0;
-}
-
-/*
- *************************************************************************
- * Function:init macroblock I and P frames
- * Input:
- * Output:
- * Return:
- * Attention:
- *************************************************************************
- */
-
-void init_macroblock(struct img_par *img)
-{
- int i, j;
-
-
- for (i = 0; i < 4; i++) {
- for (j = 0; j < 4; j++) {
- img->ipredmode[img->block_x * 2 + i + 2][img->block_y
- * 2 + j + 2] = -1;
- }
- }
-
-}
-
-/*
- *************************************************************************
- * Function:Interpret the mb mode for I-Frames
- * Input:
- * Output:
- * Return:
- * Attention:
- *************************************************************************
- */
-
-void interpret_mb_mode_i(struct img_par *img)
-{
- int i;
-
- struct macroblock *curr_mb = &mb_data[img->current_mb_nr];
- int num = 4;
-
- curr_mb->mb_type = I8MB;
-
-
- current_mb_intra = 1;
-
- for (i = 0; i < 4; i++) {
- curr_mb->b8mode[i] = IBLOCK;
- curr_mb->b8pdir[i] = -1;
- }
-
- for (i = num; i < 4; i++) {
- curr_mb->b8mode[i] =
- curr_mb->mb_type_2 == P8x8 ?
- 4 : curr_mb->mb_type_2;
- curr_mb->b8pdir[i] = 0;
- }
-}
-
-const int pred_4x4[9][9] = {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1, 1,
- 1, 1}, {0, 1, 2, 3, 4, 5, 6, 7, 8}, {0, 0, 0, 3, 3, 3, 3, 3, 3},
- {0, 1, 4, 4, 4, 4, 4, 4, 4}, {0, 1, 5, 5, 5, 5, 5, 5, 5}, {0, 0,
- 0, 0, 0, 0, 6, 0, 0},
- {0, 1, 7, 7, 7, 7, 7, 7, 7}, {0, 0, 0, 0, 4, 5, 6, 7, 8}
-
-};
-
-const int pred_4x4to8x8[9] = {0, 1, 2, 3, 4, 1, 0, 1, 0
-
-};
-
-const int pred_8x8to4x4[5] = {0, 1, 2, 3, 4};
-
-void read_ipred_block_modes(struct img_par *img, int b8)
-{
- int bi, bj, dec;
- struct syntaxelement curr_se;
- struct macroblock *curr_mb;
- int j2;
- int mostprobableintrapredmode;
- int upintrapredmode;
- int uprightintrapredmode;
- int leftintrapredmode;
- int leftdownintrapredmode;
- int intrachromapredmodeflag;
-
- struct slice_s *currslice = img->current_slice;
- struct datapartition *dp;
-
- curr_mb = mb_data + img->current_mb_nr;
- intrachromapredmodeflag = IS_INTRA(curr_mb);
-
- curr_se.type = SE_INTRAPREDMODE;
-#if TRACE
- strncpy(curr_se.tracestring, "Ipred Mode", TRACESTRING_SIZE);
-#endif
-
- if (b8 < 4) {
- if (curr_mb->b8mode[b8] == IBLOCK) {
- intrachromapredmodeflag = 1;
-
- if (1) {
- dp = &(currslice->part_arr[0]);
- curr_se.reading = read_intrapredmode_aec;
- dp->read_syntax_element(&curr_se, img, dp);
-
- if (curr_se.value1 == -1)
- push_es(1, 1);
- else
- push_es(curr_se.value1, 3);
-
-
- }
- bi = img->block_x + (b8 & 1);
- bj = img->block_y + (b8 / 2);
-
- upintrapredmode = img->ipredmode[(bi + 1) * 2][(bj) * 2
- + 1];
- uprightintrapredmode =
- img->ipredmode[(bi + 1) * 2 + 1][(bj)
- * 2 + 1];
- leftintrapredmode =
- img->ipredmode[(bi) * 2 + 1][(bj + 1)
- * 2];
- leftdownintrapredmode = img->ipredmode[(bi) * 2 + 1][(bj
- + 1) * 2 + 1];
-
- if ((upintrapredmode < 0) || (leftintrapredmode < 0)) {
- mostprobableintrapredmode = DC_PRED;
- } else if ((upintrapredmode < NO_INTRA_PMODE)
- && (leftintrapredmode <
- NO_INTRA_PMODE)) {
- mostprobableintrapredmode =
- upintrapredmode
- < leftintrapredmode ?
- upintrapredmode :
- leftintrapredmode;
- } else if (upintrapredmode < NO_INTRA_PMODE) {
- mostprobableintrapredmode = upintrapredmode;
- } else if (leftintrapredmode < NO_INTRA_PMODE) {
- mostprobableintrapredmode = leftintrapredmode;
- } else {
- mostprobableintrapredmode =
- pred_4x4[leftintrapredmode
- - INTRA_PMODE_4x4][upintrapredmode
- - INTRA_PMODE_4x4];
- mostprobableintrapredmode =
- pred_4x4to8x8[mostprobableintrapredmode];
- }
-
-
-
- dec =
- (curr_se.value1 == -1) ?
- mostprobableintrapredmode :
- curr_se.value1
- + (curr_se.value1
- >= mostprobableintrapredmode);
-
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & MB_INFO_DUMP)
- io_printf(" - ipredmode[%d] : %d\n", b8, dec);
-#endif
-
- img->ipredmode[(1 + bi) * 2][(1 + bj) * 2] = dec;
- img->ipredmode[(1 + bi) * 2 + 1][(1 + bj) * 2] = dec;
- img->ipredmode[(1 + bi) * 2][(1 + bj) * 2 + 1] = dec;
- img->ipredmode[(1 + bi) * 2 + 1][(1 + bj) * 2 + 1] =
- dec;
-
- j2 = bj;
- }
- } else if (b8 == 4 && curr_mb->b8mode[b8 - 3] == IBLOCK) {
-
- curr_se.type = SE_INTRAPREDMODE;
-#if TRACE
- strncpy(curr_se.tracestring,
- "Chroma intra pred mode", TRACESTRING_SIZE);
-#endif
-
- if (1) {
- dp = &(currslice->part_arr[0]);
- curr_se.reading = read_cipredmode_aec;
- dp->read_syntax_element(&curr_se, img, dp);
- } else
-
- {
- }
- curr_mb->c_ipred_mode = curr_se.value1;
-
- push_es(UE[curr_se.value1][0], UE[curr_se.value1][1]);
-
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & MB_INFO_DUMP)
- io_printf(" * UE c_ipred_mode read : %d\n",
- curr_mb->c_ipred_mode);
-#endif
-
- if (curr_se.value1 < DC_PRED_8 || curr_se.value1 > PLANE_8) {
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & MB_INFO_DUMP)
- io_printf("%d\n", img->current_mb_nr);
-#endif
- pr_info("illegal chroma intra pred mode!\n");
- }
- }
-}
-
-/*!
- ************************************************************************
- * \brief
- * This function is used to arithmetically decode the coded
- * block pattern of a given MB.
- ************************************************************************
- */
-void readcp_aec(struct syntaxelement *se, struct img_par *img,
- struct decoding_environment_s *dep_dp)
-{
- struct texture_info_contexts *ctx = img->current_slice->tex_ctx;
- struct macroblock *curr_mb = &mb_data[img->current_mb_nr];
-
- int mb_x, mb_y;
- int a, b;
- int curr_cbp_ctx, curr_cbp_idx;
- int cbp = 0;
- int cbp_bit;
- int mask;
-
- for (mb_y = 0; mb_y < 4; mb_y += 2) {
- for (mb_x = 0; mb_x < 4; mb_x += 2) {
- if (curr_mb->b8mode[mb_y + (mb_x / 2)] == IBLOCK)
- curr_cbp_idx = 0;
- else
- curr_cbp_idx = 1;
-
- if (mb_y == 0) {
- if (curr_mb->mb_available_up == NULL)
- b = 0;
- else {
- b = ((((curr_mb->mb_available_up)->cbp
- & (1 << (2 + mb_x / 2)))
- == 0) ? 1 : 0);
- }
-
- } else
- b = (((cbp & (1 << (mb_x / 2))) == 0) ? 1 : 0);
-
- if (mb_x == 0) {
- if (curr_mb->mb_available_left == NULL)
- a = 0;
- else {
- a =
- ((((curr_mb->mb_available_left)->cbp
- & (1
- << (2
- * (mb_y
- / 2)
- + 1)))
- == 0) ?
- 1 : 0);
- }
- } else
- a = (((cbp & (1 << mb_y)) == 0) ? 1 : 0);
- curr_cbp_ctx = a + 2 * b;
- mask = (1 << (mb_y + mb_x / 2));
- cbp_bit = biari_decode_symbol(dep_dp,
- ctx->cbp_contexts[0] + curr_cbp_ctx);
-
- if (cbp_bit)
- cbp += mask;
- }
- }
- curr_cbp_ctx = 0;
- cbp_bit = biari_decode_symbol(dep_dp,
- ctx->cbp_contexts[1] + curr_cbp_ctx);
-
- if (cbp_bit) {
- curr_cbp_ctx = 1;
- cbp_bit = biari_decode_symbol(dep_dp,
- ctx->cbp_contexts[1] + curr_cbp_ctx);
- if (cbp_bit) {
- cbp += 48;
-
- } else {
- curr_cbp_ctx = 1;
- cbp_bit = biari_decode_symbol(dep_dp,
- ctx->cbp_contexts[1] + curr_cbp_ctx);
- cbp += (cbp_bit == 1) ? 32 : 16;
-
- }
- }
-
- se->value1 = cbp;
- if (!cbp)
- last_dquant = 0;
-
-
-
-}
-
-/*!
- ************************************************************************
- * \brief
- * This function is used to arithmetically decode the delta qp
- * of a given MB.
- ************************************************************************
- */
-void readdquant_aec(struct syntaxelement *se, struct img_par *img,
- struct decoding_environment_s *dep_dp)
-{
- struct motion_info_contexts_s *ctx = img->current_slice->mot_ctx;
-
- int act_ctx;
- int act_sym;
- int dquant;
-
-
- act_ctx = ((last_dquant != 0) ? 1 : 0);
-
- act_sym = 1
- - biari_decode_symbol(dep_dp,
- ctx->delta_qp_contexts + act_ctx);
- if (act_sym != 0) {
- act_ctx = 2;
- act_sym = unary_bin_decode(dep_dp,
- ctx->delta_qp_contexts + act_ctx, 1);
- act_sym++;
- }
- act_sym &= 0x3f;
- push_es(UE[act_sym][0], UE[act_sym][1]);
-
- dquant = (act_sym + 1) / 2;
- if ((act_sym & 0x01) == 0)
- dquant = -dquant;
- se->value1 = dquant;
-
- last_dquant = dquant;
-
-}
-
-int csyntax;
-
-#define CHECKDELTAQP {\
- if (img->qp+curr_mb->delta_quant > 63\
- || img->qp+curr_mb->delta_quant < 0) {\
- csyntax = 0;\
- transcoding_error_flag = 1;\
- io_printf("error(0) (%3d|%3d) @ MB%d\n",\
- curr_mb->delta_quant,\
- img->qp+curr_mb->delta_quant,\
- img->picture_structure == 0 \
- ? img->current_mb_nr_fld : img->current_mb_nr);\
- } }
-
-int dct_level[65];
-int dct_run[65];
-int pair_pos;
-int dct_pairs = -1;
-const int t_chr[5] = {0, 1, 2, 4, 3000};
-
-void readrunlevel_aec_ref(struct syntaxelement *se, struct img_par *img,
- struct decoding_environment_s *dep_dp)
-{
- int pairs, rank, pos;
- int run, level, abslevel, symbol;
- int sign;
-
- if (dct_pairs < 0) {
- struct bi_context_type_s (*primary)[NUM_MAP_CTX];
- struct bi_context_type_s *pctx;
- struct bi_context_type_s *pCTX2;
- int ctx, ctx2, offset;
-
- if (se->context == LUMA_8x8) {
- if (img->picture_structure == 0) {
- primary =
- img->current_slice->tex_ctx->fld_map_contexts;
- } else {
- primary =
- img->current_slice->tex_ctx->map_contexts;
- }
- } else {
- if (img->picture_structure == 0) {
- primary =
- img->current_slice->tex_ctx->fld_last_contexts;
- } else {
- primary =
- img->current_slice->tex_ctx->last_contexts;
- }
- }
-
- rank = 0;
- pos = 0;
- for (pairs = 0; pairs < 65; pairs++) {
-#ifdef DECODING_SANITY_CHECK
- /*max index is NUM_BLOCK_TYPES - 1*/
- pctx = primary[rank & 0x7];
-#else
- pctx = primary[rank];
-#endif
- if (rank > 0) {
-#ifdef DECODING_SANITY_CHECK
- /*max index is NUM_BLOCK_TYPES - 1*/
- pCTX2 = primary[(5 + (pos >> 5)) & 0x7];
-#else
- pCTX2 = primary[5 + (pos >> 5)];
-#endif
- ctx2 = (pos >> 1) & 0x0f;
- ctx = 0;
-
-
- if (biari_decode_symbolw(dep_dp, pctx + ctx,
- pCTX2 + ctx2)) {
- break;
- }
- }
-
- ctx = 1;
- symbol = 0;
- while (biari_decode_symbol(dep_dp, pctx + ctx) == 0) {
- symbol += 1;
- ctx++;
- if (ctx >= 2)
- ctx = 2;
- }
- abslevel = symbol + 1;
-
- if (biari_decode_symbol_eq_prob(dep_dp)) {
- level = -abslevel;
- sign = 1;
- } else {
- level = abslevel;
- sign = 0;
- }
-#if TRACE
- tracebits2("level", 1, level);
-#endif
-
- if (abslevel == 1)
- offset = 4;
- else
- offset = 6;
- symbol = 0;
- ctx = 0;
- while (biari_decode_symbol(dep_dp, pctx + ctx + offset)
- == 0) {
- symbol += 1;
- ctx++;
- if (ctx >= 1)
- ctx = 1;
- }
- run = symbol;
-
-#if TRACE
- tracebits2("run", 1, run);
-#endif
- dct_level[pairs] = level;
- dct_run[pairs] = run;
- if (abslevel > t_chr[rank]) {
- if (abslevel <= 2)
- rank = abslevel;
- else if (abslevel <= 4)
- rank = 3;
- else
- rank = 4;
- }
- pos += (run + 1);
- if (pos >= 64)
- pos = 63;
- }
- dct_pairs = pairs;
- pair_pos = dct_pairs;
- }
-
- if (dct_pairs > 0) {
- se->value1 = dct_level[pair_pos - 1];
- se->value2 = dct_run[pair_pos - 1];
- pair_pos--;
- } else {
-
- se->value1 = se->value2 = 0;
- }
-
- if ((dct_pairs--) == 0)
- pair_pos = 0;
-}
-
-int b8_ctr;
-#if 0
-int curr_residual_chroma[4][16][16];
-int curr_residual_luma[16][16];
-#endif
-
-const int SCAN[2][64][2] = {{{0, 0}, {0, 1}, {0, 2}, {1, 0}, {0, 3}, {0, 4}, {1,
- 1}, {1, 2}, {0, 5}, {0, 6}, {1, 3}, {2, 0}, {2, 1}, {0, 7}, {1,
- 4}, {2, 2}, {3, 0}, {1, 5}, {1, 6}, {2, 3}, {3, 1}, {3, 2}, {4,
- 0}, {1, 7}, {2, 4}, {4, 1}, {2, 5}, {3, 3}, {4, 2}, {2, 6}, {3,
- 4}, {4, 3}, {5, 0}, {5, 1}, {2, 7}, {3, 5}, {4, 4}, {5, 2}, {6,
- 0}, {5, 3}, {3, 6}, {4, 5}, {6, 1}, {6, 2}, {5, 4}, {3, 7}, {4,
- 6}, {6, 3}, {5, 5}, {4, 7}, {6, 4}, {5, 6}, {6, 5}, {5, 7}, {6,
- 6}, {7, 0}, {6, 7}, {7, 1}, {7, 2}, {7, 3}, {7, 4}, {7, 5}, {7,
- 6}, {7, 7} }, {{0, 0}, {1, 0}, {0, 1}, {0, 2}, {1, 1}, {2, 0}, {
- 3, 0}, {2, 1}, {1, 2}, {0, 3}, {0, 4}, {1, 3}, {2, 2}, {3, 1}, {
- 4, 0}, {5, 0}, {4, 1}, {3, 2}, {2, 3}, {1, 4}, {0, 5}, {0, 6}, {
- 1, 5}, {2, 4}, {3, 3}, {4, 2}, {5, 1}, {6, 0}, {7, 0}, {6, 1}, {
- 5, 2}, {4, 3}, {3, 4}, {2, 5}, {1, 6}, {0, 7}, {1, 7}, {2, 6}, {
- 3, 5}, {4, 4}, {5, 3}, {6, 2}, {7, 1}, {7, 2}, {6, 3}, {5, 4}, {
- 4, 5}, {3, 6}, {2, 7}, {3, 7}, {4, 6}, {5, 5}, {6, 4}, {7, 3}, {
- 7, 4}, {6, 5}, {5, 6}, {4, 7}, {5, 7}, {6, 6}, {7, 5}, {7, 6}, {
- 6, 7}, {7, 7} } };
-
-const int SCAN_4x4[16][2] = {{0, 0}, {1, 0}, {0, 1}, {0, 2}, {1, 1}, {2, 0}, {3,
- 0}, {2, 1}, {1, 2}, {0, 3}, {1, 3}, {2, 2}, {3, 1}, {3, 2}, {2,
- 3}, {3, 3} };
-
-/*
- *************************************************************************
- * Function:
- * Input:
- * Output:
- * Return:
- * Attention:
- *************************************************************************
- */
-
-void encode_golomb_word(unsigned int symbol, unsigned int grad0,
- unsigned int max_levels, unsigned int *res_bits,
- unsigned int *res_len)
-{
- unsigned int level, res, numbits;
-
- res = 1UL << grad0;
- level = 1UL;
- numbits = 1UL + grad0;
-
- while (symbol >= res && level < max_levels) {
- symbol -= res;
- res = res << 1;
- level++;
- numbits += 2UL;
- }
-
- if (level >= max_levels) {
- if (symbol >= res)
- symbol = res - 1UL;
- }
-
- *res_bits = res | symbol;
- *res_len = numbits;
-}
-
-/*
- *************************************************************************
- * Function:
- * Input:
- * Output:
- * Return:
- * Attention:
- *************************************************************************
- */
-
-void encode_multilayer_golomb_word(unsigned int symbol,
- const unsigned int *grad, const unsigned int *max_levels,
- unsigned int *res_bits, unsigned int *res_len)
-{
- unsigned int accbits, acclen, bits, len, tmp;
-
- accbits = acclen = 0UL;
-
- while (1) {
- encode_golomb_word(symbol, *grad, *max_levels, &bits, &len);
- accbits = (accbits << len) | bits;
- acclen += len;
-#ifdef AVSP_LONG_CABAC
-#else
- assert(acclen <= 32UL);
-#endif
- tmp = *max_levels - 1UL;
-
- if (!((len == (tmp << 1) + (*grad))
- && (bits == (1UL << (tmp + *grad)) - 1UL)))
- break;
-
- tmp = *max_levels;
- symbol -= (((1UL << tmp) - 1UL) << (*grad)) - 1UL;
- grad++;
- max_levels++;
- }
- *res_bits = accbits;
- *res_len = acclen;
-}
-
-/*
- *************************************************************************
- * Function:
- * Input:
- * Output:
- * Return:
- * Attention:
- *************************************************************************
- */
-
-int writesyntaxelement_golomb(struct syntaxelement *se, int write_to_stream)
-{
- unsigned int bits, len, i;
- unsigned int grad[4], max_lev[4];
-
- if (!(se->golomb_maxlevels & ~0xFF))
- encode_golomb_word(se->value1, se->golomb_grad,
- se->golomb_maxlevels, &bits, &len);
- else {
- for (i = 0UL; i < 4UL; i++) {
- grad[i] = (se->golomb_grad >> (i << 3)) & 0xFFUL;
- max_lev[i] = (se->golomb_maxlevels >> (i << 3))
- & 0xFFUL;
- }
- encode_multilayer_golomb_word(se->value1, grad, max_lev, &bits,
- &len);
- }
-
- se->len = len;
- se->bitpattern = bits;
-
- if (write_to_stream)
- push_es(bits, len);
- return se->len;
-}
-
-/*
- *************************************************************************
- * Function:Get coded block pattern and coefficients (run/level)
- from the bitstream
- * Input:
- * Output:
- * Return:
- * Attention:
- *************************************************************************
- */
-
-void read_cbpandcoeffsfrom_nal(struct img_par *img)
-{
-
- int tablenum;
- int inumblk;
- int inumcoeff;
- int symbol2D;
- int escape_level_diff;
- const int (*AVS_2DVLC_table_intra)[26][27];
- const int (*AVS_2DVLC_table_chroma)[26][27];
- int write_to_stream;
- struct syntaxelement currse_enc;
- struct syntaxelement *e_currse = &currse_enc;
-
- int coeff_save[65][2];
- int coeff_ptr;
-
- int ii, jj;
- int mb_nr = img->current_mb_nr;
-
- int m2, jg2;
- struct macroblock *curr_mb = &mb_data[mb_nr];
-
- int block8x8;
-
- int block_x, block_y;
-
- struct slice_s *currslice = img->current_slice;
- int level, run, coef_ctr, len, k, i0, j0, uv, qp;
-
- int boff_x, boff_y, start_scan;
- struct syntaxelement curr_se;
- struct datapartition *dp;
-
- AVS_2DVLC_table_intra = AVS_2DVLC_INTRA;
- AVS_2DVLC_table_chroma = AVS_2DVLC_CHROMA;
- write_to_stream = 1;
-
- dct_pairs = -1;
-
- curr_mb->qp = img->qp;
- qp = curr_mb->qp;
-
-
- for (block_y = 0; block_y < 4; block_y += 2) {/* all modes */
- for (block_x = 0; block_x < 4; block_x += 2) {
- block8x8 = 2 * (block_y / 2) + block_x / 2;
- if (curr_mb->cbp & (1 << block8x8)) {
- tablenum = 0;
- inumblk = 1;
- inumcoeff = 65;
- coeff_save[0][0] = 0;
- coeff_save[0][1] = 0;
- coeff_ptr = 1;
-
- b8_ctr = block8x8;
-
- boff_x = (block8x8 % 2) << 3;
- boff_y = (block8x8 / 2) << 3;
-
- img->subblock_x = boff_x >> 2;
- img->subblock_y = boff_y >> 2;
-
- start_scan = 0;
- coef_ctr = start_scan - 1;
- level = 1;
- img->is_v_block = 0;
- img->is_intra_block = IS_INTRA(curr_mb);
- for (k = start_scan;
- (k < 65) && (level != 0);
- k++) {
-
- curr_se.context = LUMA_8x8;
- curr_se.type =
- (IS_INTRA(curr_mb)) ?
- SE_LUM_AC_INTRA :
- SE_LUM_AC_INTER;
-
- dp = &(currslice->part_arr[0]);
- curr_se.reading =
- readrunlevel_aec_ref;
- dp->
- read_syntax_element(&curr_se,
- img, dp);
- level = curr_se.value1;
- run = curr_se.value2;
- len = curr_se.len;
-
- if (level != 0) {
- coeff_save[coeff_ptr][0] =
- run;
- coeff_save[coeff_ptr][1] =
- level;
- coeff_ptr++;
- }
-
-
-
- if (level != 0) {/* leave if len = 1 */
- coef_ctr += run + 1;
- if ((img->picture_structure
- == FRAME)) {
- ii =
- SCAN[img->picture_structure]
- [coef_ctr][0];
- jj =
- SCAN[img->picture_structure]
- [coef_ctr][1];
- } else {
- ii =
- SCAN[img->picture_structure]
- [coef_ctr][0];
- jj =
- SCAN[img->picture_structure]
- [coef_ctr][1];
- }
-
- }
- }
-
- while (coeff_ptr > 0) {
- run =
- coeff_save[coeff_ptr
- - 1][0];
- level =
- coeff_save[coeff_ptr
- - 1][1];
-
- coeff_ptr--;
-
- symbol2D = CODE2D_ESCAPE_SYMBOL;
- if (level > -27 && level < 27
- && run < 26) {
- if (tablenum == 0)
-
- symbol2D =
- AVS_2DVLC_table_intra
- [tablenum]
- [run][abs(
- level)
- - 1];
- else
-
- symbol2D =
- AVS_2DVLC_table_intra
- [tablenum]
- [run][abs(
- level)];
- if (symbol2D >= 0
- && level
- < 0)
- symbol2D++;
- if (symbol2D < 0)
-
- symbol2D =
- (CODE2D_ESCAPE_SYMBOL
- + (run
- << 1)
- + ((level
- > 0) ?
- 1 :
- 0));
- }
-
- else {
-
- symbol2D =
- (CODE2D_ESCAPE_SYMBOL
- + (run
- << 1)
- + ((level
- > 0) ?
- 1 :
- 0));
- }
-
-
-
- e_currse->type = SE_LUM_AC_INTER;
- e_currse->value1 = symbol2D;
- e_currse->value2 = 0;
-
- e_currse->golomb_grad =
- vlc_golomb_order
- [0][tablenum][0];
- e_currse->golomb_maxlevels =
- vlc_golomb_order
- [0][tablenum][1];
-
- writesyntaxelement_golomb(
- e_currse,
- write_to_stream);
-
- if (symbol2D
- >= CODE2D_ESCAPE_SYMBOL) {
-
- e_currse->type =
- SE_LUM_AC_INTER;
- e_currse->golomb_grad =
- 1;
- e_currse->golomb_maxlevels =
- 11;
- escape_level_diff =
- abs(
- level)
- - ((run
- > MaxRun[0][tablenum]) ?
- 1 :
- refabslevel[tablenum][run]);
- e_currse->value1 =
- escape_level_diff;
-
- writesyntaxelement_golomb(
- e_currse,
- write_to_stream);
-
- }
-
- if (abs(level)
- > incvlc_intra[tablenum]) {
- if (abs(level) <= 2)
- tablenum =
- abs(
- level);
- else if (abs(level) <= 4)
- tablenum = 3;
- else if (abs(level) <= 7)
- tablenum = 4;
- else if (abs(level)
- <= 10)
- tablenum = 5;
- else
- tablenum = 6;
- }
- }
-
-
- }
- }
- }
-
-
-
- m2 = img->mb_x * 2;
- jg2 = img->mb_y * 2;
-
-
- uv = -1;
- block_y = 4;
-#if 0
- qp = QP_SCALE_CR[curr_mb->qp];
-#endif
- for (block_x = 0; block_x < 4; block_x += 2) {
-
- uv++;
-
-
- b8_ctr = (uv + 4);
- if ((curr_mb->cbp >> (uv + 4)) & 0x1) {
-
- tablenum = 0;
- inumblk = 1;
- inumcoeff = 65;
- coeff_save[0][0] = 0;
- coeff_save[0][1] = 0;
- coeff_ptr = 1;
-
- coef_ctr = -1;
- level = 1;
- img->subblock_x = 0;
- img->subblock_y = 0;
- curr_se.context = CHROMA_AC;
- curr_se.type = (IS_INTRA(curr_mb) ?
- SE_CHR_AC_INTRA :
- SE_CHR_AC_INTER);
- dp = &(currslice->part_arr[0]);
- curr_se.reading = readrunlevel_aec_ref;
- img->is_v_block = uv;
- img->is_intra_block = IS_INTRA(curr_mb);
- for (k = 0; (k < 65) && (level != 0); k++) {
-
- dp->read_syntax_element
- (&curr_se, img, dp);
- level = curr_se.value1;
- run = curr_se.value2;
- len = curr_se.len;
-
- if (level != 0) {
- coeff_save[coeff_ptr][0] = run;
- coeff_save[coeff_ptr][1] =
- level;
- coeff_ptr++;
- }
-
-
- if (level != 0) {
- coef_ctr = coef_ctr + run + 1;
- if ((img->picture_structure
- == FRAME)
- /*&& (!curr_mb->mb_field)*/) {
- i0 =
- SCAN[img->picture_structure]
- [coef_ctr][0];
- j0 =
- SCAN[img->picture_structure]
- [coef_ctr][1];
- } else {
- i0 =
- SCAN[img->picture_structure]
- [coef_ctr][0];
- j0 =
- SCAN[img->picture_structure]
- [coef_ctr][1];
- }
-
- }
- }
-
- while (coeff_ptr > 0) {
-
- run = coeff_save[coeff_ptr - 1][0];
- level = coeff_save[coeff_ptr - 1][1];
-
- coeff_ptr--;
-
- symbol2D = CODE2D_ESCAPE_SYMBOL;
- if (level > -27 && level < 27
- && run < 26) {
- if (tablenum == 0)
-
- symbol2D =
- AVS_2DVLC_table_chroma
- [tablenum][run][abs(
- level)
- - 1];
- else
- symbol2D =
- AVS_2DVLC_table_chroma
- [tablenum][run][abs(
- level)];
- if (symbol2D >= 0
- && level < 0)
- symbol2D++;
- if (symbol2D < 0)
- symbol2D =
- (CODE2D_ESCAPE_SYMBOL
- + (run
- << 1)
- + ((level
- > 0) ?
- 1 :
- 0));
- }
-
- else {
- symbol2D =
- (CODE2D_ESCAPE_SYMBOL
- + (run
- << 1)
- + ((level
- > 0) ?
- 1 :
- 0));
- }
-
- e_currse->type = SE_LUM_AC_INTER;
- e_currse->value1 = symbol2D;
- e_currse->value2 = 0;
- e_currse->golomb_grad =
- vlc_golomb_order[2]
- [tablenum][0];
- e_currse->golomb_maxlevels =
- vlc_golomb_order[2]
- [tablenum][1];
-
- writesyntaxelement_golomb(e_currse,
- write_to_stream);
-
- /*
- * if (write_to_stream)
- * {
- * bitCount[BITS_COEFF_UV_MB]+=e_currse->len;
- * e_currse++;
- * curr_mb->currSEnr++;
- * }
- * no_bits+=e_currse->len;
-
-
- * if (icoef == 0) break;
- */
-
- if (symbol2D >= CODE2D_ESCAPE_SYMBOL) {
-
- e_currse->type = SE_LUM_AC_INTER;
- e_currse->golomb_grad = 0;
- e_currse->golomb_maxlevels = 11;
- escape_level_diff =
- abs(level)
- - ((run
- > MaxRun[2][tablenum]) ?
- 1 :
- refabslevel[tablenum
- + 14][run]);
- e_currse->value1 =
- escape_level_diff;
-
- writesyntaxelement_golomb(
- e_currse,
- write_to_stream);
-
- }
-
- if (abs(level)
- > incvlc_chroma[tablenum]) {
- if (abs(level) <= 2)
- tablenum = abs(level);
- else if (abs(level) <= 4)
- tablenum = 3;
- else
- tablenum = 4;
- }
- }
-
- }
- }
-}
-
-/*
- *************************************************************************
- * Function:Get the syntax elements from the NAL
- * Input:
- * Output:
- * Return:
- * Attention:
- *************************************************************************
- */
-
-int read_one_macroblock(struct img_par *img)
-{
- int i, j;
-
- struct syntaxelement curr_se;
- struct macroblock *curr_mb = &mb_data[img->current_mb_nr];
-
- int cabp_flag;
-
- int tempcbp;
- int fixqp;
-
- struct slice_s *currslice = img->current_slice;
- struct datapartition *dp;
-
- fixqp = (fixed_picture_qp || fixed_slice_qp);
-
- for (i = 0; i < 8; i++)
- for (j = 0; j < 8; j++) {
- img->m8[0][i][j] = 0;
- img->m8[1][i][j] = 0;
- img->m8[2][i][j] = 0;
- img->m8[3][i][j] = 0;
- }
-
- current_mb_skip = 0;
-
- curr_mb->qp = img->qp;
- curr_se.type = SE_MBTYPE;
- curr_se.mapping = linfo_ue;
-
- curr_mb->mb_type_2 = 0;
-
- if (img->type == I_IMG)
- curr_mb->mb_type = 0;
-
- interpret_mb_mode_i(img);
-
- init_macroblock(img);
-
- if ((IS_INTRA(curr_mb)) && (img->abt_flag)) {
-
-#if TRACE
- strncpy(curr_se.tracestring, "cabp_flag", TRACESTRING_SIZE);
-#endif
-
- curr_se.len = 1;
- curr_se.type = SE_CABP;
- read_syntaxelement_flc(&curr_se);
- cabp_flag = curr_se.value1;
- if (cabp_flag == 0) {
- curr_mb->CABP[0] = 0;
- curr_mb->CABP[1] = 0;
- curr_mb->CABP[2] = 0;
- curr_mb->CABP[3] = 0;
- } else {
- for (i = 0; i < 4; i++) {
- curr_se.len = 1;
- curr_se.type = SE_CABP;
- read_syntaxelement_flc(&curr_se);
- curr_mb->CABP[i] = curr_se.value1;
- }
- }
-
- } else {
- curr_mb->CABP[0] = 0;
- curr_mb->CABP[1] = 0;
- curr_mb->CABP[2] = 0;
- curr_mb->CABP[3] = 0;
-
- }
-
- if (IS_INTRA(curr_mb)) {
- for (i = 0; i < /*5*/(chroma_format + 4); i++)
-
- read_ipred_block_modes(img, i);
- }
-
- curr_se.type = SE_CBP_INTRA;
- curr_se.mapping = linfo_cbp_intra;
-
-#if TRACE
- snprintf(curr_se.tracestring, TRACESTRING_SIZE, "CBP");
-#endif
-
- if (img->type == I_IMG || IS_INTER(curr_mb)) {
- curr_se.golomb_maxlevels = 0;
-
- if (1) {
- dp = &(currslice->part_arr[0]);
- curr_se.reading = readcp_aec;
- dp->read_syntax_element(&curr_se, img, dp);
- }
-
-
- curr_mb->cbp = curr_se.value1;
- push_es(UE[NCBP[curr_se.value1][0]][0],
- UE[NCBP[curr_se.value1][0]][1]);
-
- }
-
-# if 1
- if (curr_mb->cbp != 0)
- tempcbp = 1;
- else
- tempcbp = 0;
-#else
-
- if (chroma_format == 2) {
-#if TRACE
- snprintf(curr_se.tracestring, TRACESTRING_SIZE, "CBP422");
-#endif
- curr_se.mapping = /*linfo_se*/linfo_ue;
- curr_se.type = SE_CBP_INTRA;
- readsyntaxelement_uvlc(&curr_se, inp);
- curr_mb->cbp01 = curr_se.value1;
- io_printf(" * UE cbp01 read : 0x%02X\n", curr_mb->cbp01);
- }
-
- if (chroma_format == 2) {
- if (curr_mb->cbp != 0 || curr_mb->cbp01 != 0)
- tempcbp = 1;
- else
- tempcbp = 0;
-
- } else {
- if (curr_mb->cbp != 0)
- tempcbp = 1;
- else
- tempcbp = 0;
- }
-
-#endif
-
- if (IS_INTRA(curr_mb) && (img->abt_flag) && (curr_mb->cbp & (0xF))) {
- curr_mb->CABT[0] = curr_mb->CABP[0];
- curr_mb->CABT[1] = curr_mb->CABP[1];
- curr_mb->CABT[2] = curr_mb->CABP[2];
- curr_mb->CABT[3] = curr_mb->CABP[3];
- } else {
-
- curr_mb->CABT[0] = 0;
- curr_mb->CABT[1] = 0;
- curr_mb->CABT[2] = 0;
- curr_mb->CABT[3] = 0;
-
- if (!fixqp && (tempcbp)) {
- if (IS_INTER(curr_mb))
- curr_se.type = SE_DELTA_QUANT_INTER;
- else
- curr_se.type = SE_DELTA_QUANT_INTRA;
-
-#if TRACE
- snprintf(curr_se.tracestring,
- TRACESTRING_SIZE, "Delta quant ");
-#endif
-
- if (1) {
- dp = &(currslice->part_arr[0]);
- curr_se.reading = readdquant_aec;
- dp->read_syntax_element(&curr_se, img, dp);
- }
-
- curr_mb->delta_quant = curr_se.value1;
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & MB_INFO_DUMP) {
- io_printf(" * SE delta_quant read : %d\n",
- curr_mb->delta_quant);
- }
-#endif
- CHECKDELTAQP
-
- if (transcoding_error_flag)
- return -1;
-
- img->qp = (img->qp - MIN_QP + curr_mb->delta_quant
- + (MAX_QP - MIN_QP + 1))
- % (MAX_QP - MIN_QP + 1) + MIN_QP;
- }
-
- if (fixqp) {
- curr_mb->delta_quant = 0;
- img->qp = (img->qp - MIN_QP + curr_mb->delta_quant
- + (MAX_QP - MIN_QP + 1))
- % (MAX_QP - MIN_QP + 1) + MIN_QP;
-
- }
-#ifdef DUMP_DEBUG
- if (avs_get_debug_flag() & MB_INFO_DUMP)
- io_printf(" - img->qp : %d\n", img->qp);
-#endif
- }
-
- read_cbpandcoeffsfrom_nal(img);
- return DECODE_MB;
-}
-
-/*!
- ************************************************************************
- * \brief
- * finding end of a slice in case this is not the end of a frame
- *
- * Unsure whether the "correction" below actually solves an off-by-one
- * problem or whether it introduces one in some cases :-( Anyway,
- * with this change the bit stream format works with AEC again.
- * StW, 8.7.02
- ************************************************************************
- */
-int aec_startcode_follows(struct img_par *img, int eos_bit)
-{
- struct slice_s *currslice = img->current_slice;
- struct datapartition *dp;
- unsigned int bit;
- struct decoding_environment_s *dep_dp;
-
- dp = &(currslice->part_arr[0]);
- dep_dp = &(dp->de_aec);
-
- if (eos_bit)
- bit = biari_decode_final(dep_dp);
- else
- bit = 0;
-
- return bit == 1 ? 1 : 0;
-}
-
-#ifdef AVSP_LONG_CABAC
-int process_long_cabac(void)
-#else
-void main(void)
-#endif
-{
- int data32;
- int current_header;
- int i;
- int tmp;
- int ret;
-
- int byte_startposition;
- int aec_mb_stuffing_bit;
- struct slice_s *currslice;
-#ifdef PERFORMANCE_DEBUG
- pr_info("enter %s\r\n", __func__);
-#endif
- transcoding_error_flag = 0;
- ret = 0;
- es_buf = es_write_addr_virt;
-
- if (local_heap_init(MAX_CODED_FRAME_SIZE * 4) < 0) {
- ret = -1;
- goto End;
- }
-
- img = (struct img_par *)local_alloc(1, sizeof(struct img_par));
- if (img == NULL) {
- no_mem_exit("main: img");
- ret = -1;
- goto End;
- }
- stat_bits_ptr = (struct stat_bits *)local_alloc(1,
- sizeof(struct stat_bits));
- if (stat_bits_ptr == NULL) {
- no_mem_exit("main: stat_bits");
- ret = -1;
- goto End;
- }
-
- curr_stream = alloc_bitstream();
- if (curr_stream == NULL) {
- io_printf("alloc bitstream failed\n");
- ret = -1;
- goto End;
- }
-
- chroma_format = 1;
- demulate_enable = 0;
- img->seq_header_indicate = 1;
-
-#ifdef AVSP_LONG_CABAC
- data32 = READ_VREG(LONG_CABAC_REQ);
- progressive_sequence = (data32 >> 1) & 1;
- fixed_picture_qp = (data32 >> 2) & 1;
- img->picture_structure = (data32 >> 3) & 1;
- img->type = (data32 >> 4) & 3;
- skip_mode_flag = (data32 >> 6) & 1;
-
- src_start = READ_VREG(LONG_CABAC_SRC_ADDR);
- des_start = READ_VREG(LONG_CABAC_DES_ADDR);
-
- data32 = READ_VREG(LONG_CABAC_PIC_SIZE);
- horizontal_size = (data32 >> 0) & 0xffff;
- vertical_size = (data32 >> 16) & 0xffff;
- if (horizontal_size * vertical_size > 1920 * 1080) {
- io_printf("pic size check failed: width = %d, height = %d\n",
- horizontal_size, vertical_size);
- ret = -1;
- goto End;
- }
-
- vld_mem_start_addr = READ_VREG(VLD_MEM_VIFIFO_START_PTR);
- vld_mem_end_addr = READ_VREG(VLD_MEM_VIFIFO_END_PTR);
-
-#else
- progressive_sequence = 0;
- fixed_picture_qp = 0;
- img->picture_structure = 0;
- img->type = I_IMG;
- skip_mode_flag = 1;
- horizontal_size = 1920;
- vertical_size = 1080;
-
- src_start = 0;
-#endif
-
- if (horizontal_size % 16 != 0)
- img->auto_crop_right = 16 - (horizontal_size % 16);
- else
- img->auto_crop_right = 0;
-
- if (!progressive_sequence) {
- if (vertical_size % 32 != 0)
- img->auto_crop_bottom = 32 - (vertical_size % 32);
- else
- img->auto_crop_bottom = 0;
- } else {
- if (vertical_size % 16 != 0)
- img->auto_crop_bottom = 16 - (vertical_size % 16);
- else
- img->auto_crop_bottom = 0;
- }
-
- img->width = (horizontal_size + img->auto_crop_right);
- if (img->picture_structure)
- img->height = (vertical_size + img->auto_crop_bottom);
- else
- img->height = (vertical_size + img->auto_crop_bottom) / 2;
- img->width_cr = (img->width >> 1);
-
- img->pic_width_inmbs = img->width / MB_BLOCK_SIZE;
- img->pic_height_inmbs = img->height / MB_BLOCK_SIZE;
- img->pic_size_inmbs = img->pic_width_inmbs * img->pic_height_inmbs;
-
- io_printf(
- "[LONG CABAC] Start Transcoding from 0x%x to 0x%x Size : %d x %d\r\n",
- src_start, des_start, horizontal_size, vertical_size);
-#if 0
- io_printf("VLD_MEM_VIFIFO_START_PTR %x\r\n",
- READ_VREG(VLD_MEM_VIFIFO_START_PTR));
- io_printf("VLD_MEM_VIFIFO_CURR_PTR %x\r\n",
- READ_VREG(VLD_MEM_VIFIFO_CURR_PTR));
- io_printf("VLD_MEM_VIFIFO_END_PTR %x\r\n",
- READ_VREG(VLD_MEM_VIFIFO_END_PTR));
- io_printf("VLD_MEM_VIFIFO_WP %x\r\n",
- READ_VREG(VLD_MEM_VIFIFO_WP));
- io_printf("VLD_MEM_VIFIFO_RP %x\r\n",
- READ_VREG(VLD_MEM_VIFIFO_RP));
- io_printf("VLD_MEM_VBUF_RD_PTR %x\r\n",
- READ_VREG(VLD_MEM_VBUF_RD_PTR));
- io_printf("VLD_MEM_VIFIFO_BUF_CNTL %x\r\n",
- READ_VREG(VLD_MEM_VIFIFO_BUF_CNTL));
-#endif
- io_printf(
- "[LONG CABAC] progressive_sequence : %d, fixed_picture_qp : %d, skip_mode_flag : %d\r\n",
- progressive_sequence, fixed_picture_qp, skip_mode_flag);
- io_printf("[LONG CABAC] picture_structure : %d, picture_type : %d\r\n",
- img->picture_structure, img->type);
-
- open_irabs(p_irabs);
-
-
- if (initial_decode() == 0) {
- io_printf("initial_decode failed\n");
- ret = -1;
- goto End;
- }
-
- init_es();
-
- current_header = header();
- io_printf("[LONG CABAC] header Return : %d\n", current_header);
-
- tmp = slice_header(temp_slice_buf, first_slice_startpos,
- first_slice_length);
-
- init_contexts(img);
- aec_new_slice();
- byte_startposition = (curr_stream->frame_bitoffset) / 8;
-
- currslice = img->current_slice;
-
- if (1) {
- for (i = 0; i < 1; i++) {
- img->current_slice->part_arr[i].read_syntax_element =
- read_syntaxelement_aec;
- img->current_slice->part_arr[i].bitstream = curr_stream;
- }
- curr_stream = currslice->part_arr[0].bitstream;
- }
- if ((curr_stream->frame_bitoffset) % 8 != 0)
- byte_startposition++;
-
- arideco_start_decoding(&img->current_slice->part_arr[0].de_aec,
- curr_stream->stream_buffer, (byte_startposition),
- &(curr_stream->read_len), img->type);
-
- img->current_mb_nr = 0;
- total_mb_count = 0;
- while (img->current_mb_nr < img->pic_size_inmbs)
-
- {
- start_macroblock(img);
- if (-1 == read_one_macroblock(img)) {
- ret = -1;
- pr_info("macroblock trans failed, exit\n");
- goto End;
- }
- if (img->cod_counter <= 0)
- aec_mb_stuffing_bit = aec_startcode_follows(img, 1);
- img->current_mb_nr++;
- }
-
- push_es(0xff, 8);
- io_printf(" Total ES_LENGTH : %d\n", es_ptr);
-
-#ifdef AVSP_LONG_CABAC
- push_es(0xff, 64);
- if (es_buf_is_overflow) {
- io_printf("fatal error: es_buf_is_overflow\n");
- ret = -1;
- goto End;
- }
-
- if (transcoding_error_flag == 0) {
-#if 1
- dma_sync_single_for_device(amports_get_dma_device(),
- es_write_addr_phy,
- es_ptr, DMA_TO_DEVICE);
-
- wmb(); /**/
-#endif
- }
-#else
- fclose(f_es);
-#endif
-
-End:
-#ifdef AVSP_LONG_CABAC
- WRITE_VREG(LONG_CABAC_REQ, 0);
-#endif
- local_heap_uninit();
-#ifdef PERFORMANCE_DEBUG
- pr_info("exit %s\r\n", __func__);
-#endif
- return ret;
-}
-#endif