⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mvector.c

📁 Motion detection in matlab
💻 C
字号:
/* mvector.c *//* Contains routines which operate on motion vectors *//* * Copyright (c) 1992 The Regents of the University of California. * All rights reserved. *  * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without written agreement is * hereby granted, provided that the above copyright notice and the following * two paragraphs appear in all copies of this software. *  * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *  * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. *//**********************************************************************                          R C S Information***********************************************************************//* $Log: mvector.c,v $ * Revision 1.3  1994/01/14  15:40:30  daf * Added RCS info header * * revision 1.2    locked by: daf; * date: 1994/01/07 16:42:24;  author: daf;  state: Exp;  lines: +106 -6 * Modified for use as .mex file *  * revision 1.1 * date: 1994/01/07 16:13:52;  author: daf;  state: Exp; * Initial revision*/#include "video.h"#include "proto.h"#include "util.h"/* *-------------------------------------------------------------- * * ComputeVector -- * *	Computes motion vector given parameters previously parsed *      and reconstructed. * * Results: *      Reconstructed motion vector info is put into recon_* parameters *      passed to this function. Also updated previous motion vector *      information. * * Side effects: *      None. * *-------------------------------------------------------------- */#define ComputeVector(recon_right_ptr, recon_down_ptr, recon_right_prev, recon_down_prev, f, full_pel_vector, motion_h_code, motion_v_code, motion_h_r, motion_v_r)				\									\{									\  int comp_h_r, comp_v_r;						\  int right_little, right_big, down_little, down_big;			\  int max, min, new_vector;						\									\  /* The following procedure for the reconstruction of motion vectors 	\     is a direct and simple implementation of the instructions given	\     in the mpeg December 1991 standard draft. 				\  */									\									\  if (f == 1 || motion_h_code == 0)					\    comp_h_r = 0;							\  else 									\    comp_h_r = f - 1 - motion_h_r;					\									\  if (f == 1 || motion_v_code == 0)					\    comp_v_r = 0;							\  else 									\    comp_v_r = f - 1 - motion_v_r;					\									\  right_little = motion_h_code * f;					\  if (right_little == 0)						\    right_big = 0;							\  else {								\    if (right_little > 0) {						\      right_little = right_little - comp_h_r;				\      right_big = right_little - 32 * f;				\    }									\    else {								\      right_little = right_little + comp_h_r;				\      right_big = right_little + 32 * f;				\    }									\  }									\									\  down_little = motion_v_code * f;					\  if (down_little == 0)							\    down_big = 0;							\  else {								\    if (down_little > 0) {						\      down_little = down_little - comp_v_r;				\      down_big = down_little - 32 * f;					\    }									\    else {								\      down_little = down_little + comp_v_r;				\      down_big = down_little + 32 * f;					\    }									\  }									\  									\  max = 16 * f - 1;							\  min = -16 * f;							\									\  new_vector = recon_right_prev + right_little;				\									\  if (new_vector <= max && new_vector >= min)				\    *recon_right_ptr = recon_right_prev + right_little;			\                      /* just new_vector */				\  else									\    *recon_right_ptr = recon_right_prev + right_big;			\  recon_right_prev = *recon_right_ptr;					\  if (full_pel_vector)							\    *recon_right_ptr = *recon_right_ptr << 1;				\									\  new_vector = recon_down_prev + down_little;				\  if (new_vector <= max && new_vector >= min)				\    *recon_down_ptr = recon_down_prev + down_little;			\                      /* just new_vector */				\  else									\    *recon_down_ptr = recon_down_prev + down_big;			\  recon_down_prev = *recon_down_ptr;					\  if (full_pel_vector)							\    *recon_down_ptr = *recon_down_ptr << 1;				\}/* *-------------------------------------------------------------- * * ComputeForwVector -- * *	Computes forward motion vector by calling ComputeVector *      with appropriate parameters. * * Results: *	Reconstructed motion vector placed in recon_right_for_ptr and *      recon_down_for_ptr. * * Side effects: *      None. * *-------------------------------------------------------------- */void ComputeForwVector(int *recon_right_for_ptr, int *recon_down_for_ptr){  Pict *picture;  Macroblock *mblock;  picture = &(curVidStream->picture);  mblock = &(curVidStream->mblock);  ComputeVector(recon_right_for_ptr, recon_down_for_ptr,		mblock->recon_right_for_prev, 		mblock->recon_down_for_prev,		picture->forw_f, picture->full_pel_forw_vector,		mblock->motion_h_forw_code, mblock->motion_v_forw_code,		mblock->motion_h_forw_r, mblock->motion_v_forw_r); }/* *-------------------------------------------------------------- * * ComputeBackVector -- * *	Computes backward motion vector by calling ComputeVector *      with appropriate parameters. * * Results: *	Reconstructed motion vector placed in recon_right_back_ptr and *      recon_down_back_ptr. * * Side effects: *      None. * *-------------------------------------------------------------- */void ComputeBackVector(int *recon_right_back_ptr, int *recon_down_back_ptr){  Pict *picture;  Macroblock *mblock;  picture = &(curVidStream->picture);  mblock = &(curVidStream->mblock);  ComputeVector(recon_right_back_ptr, recon_down_back_ptr,		mblock->recon_right_back_prev, 		mblock->recon_down_back_prev,		picture->back_f, picture->full_pel_back_vector,		mblock->motion_h_back_code, mblock->motion_v_back_code,		mblock->motion_h_back_r, mblock->motion_v_back_r); }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -