1fa225cbcSrjs/* 2fa225cbcSrjs * Copyright © 2008 Intel Corporation 3fa225cbcSrjs * 4fa225cbcSrjs * Permission is hereby granted, free of charge, to any person obtaining a 5fa225cbcSrjs * copy of this software and associated documentation files (the "Software"), 6fa225cbcSrjs * to deal in the Software without restriction, including without limitation 7fa225cbcSrjs * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8fa225cbcSrjs * and/or sell copies of the Software, and to permit persons to whom the 9fa225cbcSrjs * Software is furnished to do so, subject to the following conditions: 10fa225cbcSrjs * 11fa225cbcSrjs * The above copyright notice and this permission notice (including the next 12fa225cbcSrjs * paragraph) shall be included in all copies or substantial portions of the 13fa225cbcSrjs * Software. 14fa225cbcSrjs * 15fa225cbcSrjs * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16fa225cbcSrjs * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17fa225cbcSrjs * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18fa225cbcSrjs * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19fa225cbcSrjs * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20fa225cbcSrjs * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21fa225cbcSrjs * SOFTWARE. 22fa225cbcSrjs * 23fa225cbcSrjs * Authors: 24fa225cbcSrjs * Zhenyu Wang <zhenyu.z.wang@intel.com> 25fa225cbcSrjs * 26fa225cbcSrjs */ 27fa225cbcSrjs#include "intel_xvmc.h" 28fa225cbcSrjs 29fa225cbcSrjs#define DUMPFILE "./intel_xvmc_dump" 30fa225cbcSrjs 31fa225cbcSrjsstatic int xvmc_dump = 0; 32fa225cbcSrjsstatic FILE *fp = NULL; 33fa225cbcSrjs 34fa225cbcSrjsvoid intel_xvmc_dump_open(void) 35fa225cbcSrjs{ 36fa225cbcSrjs char *d = NULL; 37fa225cbcSrjs 38fa225cbcSrjs if (xvmc_dump) 39fa225cbcSrjs return; 40fa225cbcSrjs 41fa225cbcSrjs if (d = getenv("INTEL_XVMC_DUMP")) 42fa225cbcSrjs xvmc_dump = 1; 43fa225cbcSrjs 44fa225cbcSrjs if (xvmc_dump) { 45fa225cbcSrjs fp = fopen(DUMPFILE, "a"); 46fa225cbcSrjs if (!fp) 47fa225cbcSrjs xvmc_dump = 0; 48fa225cbcSrjs } 49fa225cbcSrjs} 50fa225cbcSrjs 51fa225cbcSrjsvoid intel_xvmc_dump_close(void) 52fa225cbcSrjs{ 53fa225cbcSrjs if (xvmc_dump) { 54fa225cbcSrjs fclose(fp); 55fa225cbcSrjs xvmc_dump = 0; 56fa225cbcSrjs } 57fa225cbcSrjs} 58fa225cbcSrjs 59fa225cbcSrjsvoid intel_xvmc_dump_render(XvMCContext *context, unsigned int picture_structure, 60fa225cbcSrjs XvMCSurface *target, XvMCSurface *past, XvMCSurface *future, unsigned int flags, 61fa225cbcSrjs unsigned int num_macroblocks, unsigned int first_macroblock, 62fa225cbcSrjs XvMCMacroBlockArray *macroblock_array, XvMCBlockArray *blocks) 63fa225cbcSrjs{ 64fa225cbcSrjs int i; 65fa225cbcSrjs XvMCMacroBlock *mb; 66fa225cbcSrjs 67fa225cbcSrjs if (!xvmc_dump) 68fa225cbcSrjs return; 69fa225cbcSrjs 70fa225cbcSrjs fprintf(fp, "========== new surface rendering ==========\n"); 71fa225cbcSrjs fprintf(fp, "Context (id:%d) (surface_type_id:%d) (width:%d) (height:%d)\n", 72fa225cbcSrjs context->context_id, context->surface_type_id, context->width, context->height); 73fa225cbcSrjs 74fa225cbcSrjs if (picture_structure == XVMC_FRAME_PICTURE) 75fa225cbcSrjs fprintf(fp, "picture structure: frame picture\n"); 76fa225cbcSrjs else if (picture_structure == XVMC_TOP_FIELD) 77fa225cbcSrjs fprintf(fp, "picture structure: top field picture (%s)\n", 78fa225cbcSrjs (flags == XVMC_SECOND_FIELD)?"second":"first"); 79fa225cbcSrjs else if (picture_structure == XVMC_BOTTOM_FIELD) 80fa225cbcSrjs fprintf(fp, "picture structure: bottom field picture (%s)\n", 81fa225cbcSrjs (flags == XVMC_SECOND_FIELD)?"second":"first"); 82fa225cbcSrjs 83fa225cbcSrjs if (!past && !future) 84fa225cbcSrjs fprintf(fp, "picture type: I\n"); 85fa225cbcSrjs else if (past && !future) 86fa225cbcSrjs fprintf(fp, "picture type: P\n"); 87fa225cbcSrjs else if (past && future) 88fa225cbcSrjs fprintf(fp, "picture type: B\n"); 89fa225cbcSrjs else 90fa225cbcSrjs fprintf(fp, "picture type: Bad!\n"); 91fa225cbcSrjs 92fa225cbcSrjs fprintf(fp, "target picture: id (%d) width (%d) height (%d)\n", target->surface_id, 93fa225cbcSrjs target->width, target->height); 94fa225cbcSrjs if (past) 95fa225cbcSrjs fprintf(fp, "past picture: id (%d) width (%d) height (%d)\n", past->surface_id, 96fa225cbcSrjs past->width, past->height); 97fa225cbcSrjs if (future) 98fa225cbcSrjs fprintf(fp, "future picture: id (%d) width (%d) height (%d)\n", future->surface_id, 99fa225cbcSrjs future->width, future->height); 100fa225cbcSrjs 101fa225cbcSrjs fprintf(fp, "num macroblocks: %d, first macroblocks %d\n", num_macroblocks, first_macroblock); 102fa225cbcSrjs 103fa225cbcSrjs for (i = first_macroblock; i < (first_macroblock + num_macroblocks); i++) { 104fa225cbcSrjs mb = ¯oblock_array->macro_blocks[i]; 105fa225cbcSrjs 106fa225cbcSrjs fprintf(fp, "- MB(%d): ", i); 107fa225cbcSrjs fprintf(fp, "x (%d) y (%d) ", mb->x, mb->y); 108fa225cbcSrjs fprintf(fp, "macroblock type ("); 109fa225cbcSrjs if (mb->macroblock_type & XVMC_MB_TYPE_MOTION_FORWARD) 110fa225cbcSrjs fprintf(fp, "motion_forward "); 111fa225cbcSrjs if (mb->macroblock_type & XVMC_MB_TYPE_MOTION_BACKWARD) 112fa225cbcSrjs fprintf(fp, "motion_backward "); 113fa225cbcSrjs if (mb->macroblock_type & XVMC_MB_TYPE_PATTERN) 114fa225cbcSrjs fprintf(fp, "pattern "); 115fa225cbcSrjs if (mb->macroblock_type & XVMC_MB_TYPE_INTRA) 116fa225cbcSrjs fprintf(fp, "intra "); 117fa225cbcSrjs fprintf(fp, ") "); 118fa225cbcSrjs fprintf(fp, "mc type "); 119fa225cbcSrjs if (picture_structure == XVMC_FRAME_PICTURE) { 120fa225cbcSrjs if (mb->motion_type & XVMC_PREDICTION_FIELD) 121fa225cbcSrjs fprintf(fp, "(field) "); 122fa225cbcSrjs else if (mb->motion_type & XVMC_PREDICTION_FRAME) 123fa225cbcSrjs fprintf(fp, "(frame) "); 124fa225cbcSrjs else if (mb->motion_type & XVMC_PREDICTION_DUAL_PRIME) 125fa225cbcSrjs fprintf(fp, "(dual-prime) "); 126fa225cbcSrjs else 127fa225cbcSrjs fprintf(fp, "(unknown %d) ", mb->motion_type); 128fa225cbcSrjs } else { /* field */ 129fa225cbcSrjs if (mb->motion_type & XVMC_PREDICTION_FIELD) 130fa225cbcSrjs fprintf(fp, "(field) "); 131fa225cbcSrjs else if (mb->motion_type & XVMC_PREDICTION_DUAL_PRIME) 132fa225cbcSrjs fprintf(fp, "(dual-prime) "); 133fa225cbcSrjs else if (mb->motion_type & XVMC_PREDICTION_16x8) 134fa225cbcSrjs fprintf(fp, "(16x8) "); 135fa225cbcSrjs else 136fa225cbcSrjs fprintf(fp, "(unknown %d) ", mb->motion_type); 137fa225cbcSrjs } 138fa225cbcSrjs 139fa225cbcSrjs if (mb->dct_type == XVMC_DCT_TYPE_FRAME) 140fa225cbcSrjs fprintf(fp, "dct type (frame) "); 141fa225cbcSrjs else if (mb->dct_type == XVMC_DCT_TYPE_FIELD) 142fa225cbcSrjs fprintf(fp, "dct type (field) "); 143fa225cbcSrjs 144fa225cbcSrjs fprintf(fp, "coded_block_pattern (0x%x)\n", mb->coded_block_pattern); 145fa225cbcSrjs 146fa225cbcSrjs /* XXX mv dump */ 147fa225cbcSrjs } 148fa225cbcSrjs 149fa225cbcSrjs} 150