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

📄 motionvector.java

📁 J2ME MPEG4 解码代码。 以及使用方法。
💻 JAVA
字号:
public class MotionVector {
	/*
	 * Reconstructed motion vector for the previous predictive-coded 
	 * macroblock.
	 */
	private int mRightPrevious;
	private int mDownPrevious;

	/*
	 * Reconstructed horizontal and vertical components of the 
	 * motion vector for the current macroblock.
	 */
	public int mRightLum;
	public int mDownLum;
	public boolean mRightHalfLum;
	public boolean mDownHalfLum;	 

	public int mRightCol;
	public int mDownCol;
	public boolean mRightHalfCol;
	public boolean mDownHalfCol;	 

	private int mVector;
	private boolean mFullPelVector;

	public void init(int v, boolean f) {
		mVector = v;
		mFullPelVector = f;
	}

	public void resetPrevious() {
		mRightPrevious = mDownPrevious = 0;
	}

	/*
	 * Reconstruct the motion vector horizontal and vertical components
	 */
	public void calculate(int motionHorizontalCode, int motionHorizontalR, int motionVerticalCode, int motionVerticalR)	{
		int complementHorizontalR;
	    if (mVector == 1 || motionHorizontalCode == 0)
	        complementHorizontalR = 0;
	    else
	        complementHorizontalR = mVector - 1 - motionHorizontalR;

	    int complementVerticalR;
	    if (mVector == 1 || motionVerticalCode == 0)
	        complementVerticalR = 0;
	    else
	        complementVerticalR = mVector - 1 - motionVerticalR;

	    // rightLittle should always be != vector * 16
	    int rightLittle = motionHorizontalCode * mVector;
	    int rightBig = 0;

	    if (rightLittle == 0) {
	        rightBig = 0;
	    }
	    else {
	        if (rightLittle > 0) {
	            rightLittle = rightLittle - complementHorizontalR;
	            rightBig = rightLittle - (mVector << 5);
	        }
	        else {
	            rightLittle = rightLittle + complementHorizontalR;
	            rightBig = rightLittle + (mVector << 5);
	        }
	    }

	    // downLittle should always be != vector * 16
	    int downLittle = motionVerticalCode * mVector;
	    int downBig = 0;

	    if (downLittle == 0) {
	        downBig = 0;
	    }
	    else {
	        if (downLittle > 0) {
	            downLittle = downLittle - complementVerticalR;
	            downBig = downLittle - (mVector << 5);
	        }
	        else {
	            downLittle = downLittle + complementVerticalR;
	            downBig = downLittle + (mVector << 5);
	        }
	    }

	    int max =  (mVector << 4) - 1;
	    int min = -(mVector << 4);

	    int reconRight = 0;

	    int newVector = mRightPrevious + rightLittle;
	    if (newVector <= max && newVector >= min)
	        reconRight = mRightPrevious + rightLittle;
	    else
	        reconRight = mRightPrevious + rightBig;
	    mRightPrevious = reconRight;

	    if (mFullPelVector)
	        reconRight <<= 1;

	    int reconDown = 0;

	    newVector = mDownPrevious + downLittle;
	    if (newVector <= max && newVector >= min)
	        reconDown = mDownPrevious + downLittle;
	    else
	        reconDown = mDownPrevious + downBig;
	    mDownPrevious = reconDown;

	    if (mFullPelVector)
	        reconDown <<= 1;

	    // LUMINANCE
	    mRightLum       = reconRight >> 1;
	    mDownLum        = reconDown >> 1;
	    mRightHalfLum  = (reconRight - (mRightLum << 1)) != 0;
	    mDownHalfLum   = (reconDown - (mDownLum << 1)) != 0;

	    reconRight >>= 1;
	    reconDown  >>= 1;

	    // CHROMINANCE
	    mRightCol       = reconRight >> 1;
	    mDownCol        = reconDown >> 1;
	    mRightHalfCol  = (reconRight - (mRightCol << 1)) != 0;
	    mDownHalfCol   = (reconDown - (mDownCol << 1)) != 0;
	}
}

⌨️ 快捷键说明

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