190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber/*
2f71323e297a928af368937089d3ed71239786f86Andreas Huber *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber *
4f71323e297a928af368937089d3ed71239786f86Andreas Huber *  Use of this source code is governed by a BSD-style license
5f71323e297a928af368937089d3ed71239786f86Andreas Huber *  that can be found in the LICENSE file in the root of the source
6f71323e297a928af368937089d3ed71239786f86Andreas Huber *  tree. An additional intellectual property rights grant can be found
7f71323e297a928af368937089d3ed71239786f86Andreas Huber *  in the file PATENTS.  All contributing project authors may
8f71323e297a928af368937089d3ed71239786f86Andreas Huber *  be found in the AUTHORS file in the root of the source tree.
990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber */
1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include <stdio.h>
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber#include "blockd.h"
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervoid vp8_print_modes_and_motion_vectors(MODE_INFO *mi, int rows, int cols, int frame)
1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber{
1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int mb_row;
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int mb_col;
2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    int mb_index = 0;
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    FILE *mvs = fopen("mvs.stt", "a");
2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
24538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* print out the macroblock Y modes */
2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mb_index = 0;
2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fprintf(mvs, "Mb Modes for Frame %d\n", frame);
2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for (mb_row = 0; mb_row < rows; mb_row++)
2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    {
3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        for (mb_col = 0; mb_col < cols; mb_col++)
3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        {
3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fprintf(mvs, "%2d ", mi[mb_index].mbmi.mode);
3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            mb_index++;
3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        }
3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fprintf(mvs, "\n");
3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        mb_index++;
4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    }
4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fprintf(mvs, "\n");
4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mb_index = 0;
4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fprintf(mvs, "Mb mv ref for Frame %d\n", frame);
4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for (mb_row = 0; mb_row < rows; mb_row++)
4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    {
4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        for (mb_col = 0; mb_col < cols; mb_col++)
5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        {
5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fprintf(mvs, "%2d ", mi[mb_index].mbmi.ref_frame);
5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            mb_index++;
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        }
5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fprintf(mvs, "\n");
5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        mb_index++;
5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    }
6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fprintf(mvs, "\n");
6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
63538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* print out the macroblock UV modes */
6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mb_index = 0;
6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fprintf(mvs, "UV Modes for Frame %d\n", frame);
6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for (mb_row = 0; mb_row < rows; mb_row++)
6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    {
6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        for (mb_col = 0; mb_col < cols; mb_col++)
7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        {
7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fprintf(mvs, "%2d ", mi[mb_index].mbmi.uv_mode);
7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            mb_index++;
7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        }
7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        mb_index++;
7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fprintf(mvs, "\n");
7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    }
8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fprintf(mvs, "\n");
8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
83538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* print out the block modes */
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mb_index = 0;
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fprintf(mvs, "Mbs for Frame %d\n", frame);
8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    {
8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int b_row;
8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        for (b_row = 0; b_row < 4 * rows; b_row++)
9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        {
9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            int b_col;
9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            int bindex;
9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            for (b_col = 0; b_col < 4 * cols; b_col++)
9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            {
9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                mb_index = (b_row >> 2) * (cols + 1) + (b_col >> 2);
9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                bindex = (b_row & 3) * 4 + (b_col & 3);
9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                if (mi[mb_index].mbmi.mode == B_PRED)
10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    fprintf(mvs, "%2d ", mi[mb_index].bmi[bindex].mode);
10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                else
10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                    fprintf(mvs, "xx ");
10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            }
10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fprintf(mvs, "\n");
10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        }
10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    }
10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fprintf(mvs, "\n");
11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
111538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* print out the macroblock mvs */
11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mb_index = 0;
11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fprintf(mvs, "MVs for Frame %d\n", frame);
11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    for (mb_row = 0; mb_row < rows; mb_row++)
11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    {
11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        for (mb_col = 0; mb_col < cols; mb_col++)
11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        {
11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fprintf(mvs, "%5d:%-5d", mi[mb_index].mbmi.mv.as_mv.row / 2, mi[mb_index].mbmi.mv.as_mv.col / 2);
12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            mb_index++;
12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        }
12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        mb_index++;
12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        fprintf(mvs, "\n");
12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    }
12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fprintf(mvs, "\n");
12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
131538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber    /* print out the block modes */
13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mb_index = 0;
13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fprintf(mvs, "MVs for Frame %d\n", frame);
13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    {
13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        int b_row;
13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        for (b_row = 0; b_row < 4 * rows; b_row++)
13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        {
13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            int b_col;
14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            int bindex;
14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            for (b_col = 0; b_col < 4 * cols; b_col++)
14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            {
14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                mb_index = (b_row >> 2) * (cols + 1) + (b_col >> 2);
14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                bindex = (b_row & 3) * 4 + (b_col & 3);
14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber                fprintf(mvs, "%3d:%-3d ", mi[mb_index].bmi[bindex].mv.as_mv.row, mi[mb_index].bmi[bindex].mv.as_mv.col);
14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            }
14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber            fprintf(mvs, "\n");
15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        }
15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    }
15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fprintf(mvs, "\n");
15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    fclose(mvs);
15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber}
158