亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mp4_picture.c

?? 本程序介紹MPEG-4解碼技術
?? C
字號:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "mp4_decoder.h"
#include "mp4_vars.h"

#include "mp4_header.h"
#include "mp4_mblock.h"

#include "transferIDCT.h"
#include "postprocess.h"
#include "yuv2rgb.h"
#include "store.h"

/**
 *
**/

void addblock (int comp, int bx, int by, int addflag);
int find_pmv (int block, int comp);

static void make_edge (unsigned char *frame_pic, int width, int height, int edge);

/***/


// 解碼和顯示一個視頻對象平面
void get_mp4picture (unsigned char *bmp, unsigned int stride, int render_flag)
{
	mp4_state->hdr.mba = 0;
	mp4_state->hdr.mb_xpos = 0;
	mp4_state->hdr.mb_ypos = 0;

	do {
		macroblock();
		mp4_state->hdr.mba++; 

	} while ((nextbits_bytealigned(23) != 0) &&
		(mp4_state->hdr.mba < mp4_state->hdr.mba_size));

	// 對被解碼的幀增加邊界
	make_edge (frame_ref[0], mp4_state->coded_picture_width, mp4_state->coded_picture_height, 32);
	make_edge (frame_ref[1], mp4_state->chrom_width, mp4_state->chrom_height, 16);
	make_edge (frame_ref[2], mp4_state->chrom_width, mp4_state->chrom_height, 16);

	PictureDisplay(bmp, stride, render_flag);

	// 交換幀
	{
		int i;
		unsigned char *tmp;
		for (i = 0; i < 3; i++) {
			tmp = frame_ref[i];
			frame_ref[i] = frame_for[i];
			frame_for[i] = tmp;
		}
	}
}

/***/

void addblock (int comp, int bx, int by, int addflag)
{
  int cc, i, iincr;
  unsigned char *rfp;
  short *bp;
  unsigned char *curr[3];

	curr[0] = frame_ref[0];
	curr[1] = frame_ref[1];
	curr[2] = frame_ref[2];

  bp = ld->block;

  cc = (comp < 4) ? 0 : (comp & 1) + 1; 

  if (cc == 0) 
  {
		
		bx <<= 4;
		by <<= 4;


		rfp = curr[0] + mp4_state->coded_picture_width * (by + ((comp & 2) << 2)) + bx + ((comp & 1) << 3);
    iincr = mp4_state->coded_picture_width;
  } 
  else 
  {

		bx <<= 3;
		by <<= 3;

		rfp = curr[cc] + mp4_state->chrom_width * by + bx;
    iincr = mp4_state->chrom_width;
  }

  if (addflag)
  {
    for (i = 0; i < 8; i++)
    {
      rfp[0] = mp4_state->clp[bp[0] + rfp[0]];
      rfp[1] = mp4_state->clp[bp[1] + rfp[1]];
      rfp[2] = mp4_state->clp[bp[2] + rfp[2]];
      rfp[3] = mp4_state->clp[bp[3] + rfp[3]];
      rfp[4] = mp4_state->clp[bp[4] + rfp[4]];
      rfp[5] = mp4_state->clp[bp[5] + rfp[5]];
      rfp[6] = mp4_state->clp[bp[6] + rfp[6]];
      rfp[7] = mp4_state->clp[bp[7] + rfp[7]];
      bp += 8;
      rfp += iincr;
    }
  } else
  {
    for (i = 0; i < 8; i++)
    {
      rfp[0] = mp4_state->clp[bp[0]];
      rfp[1] = mp4_state->clp[bp[1]];
      rfp[2] = mp4_state->clp[bp[2]];
      rfp[3] = mp4_state->clp[bp[3]];
      rfp[4] = mp4_state->clp[bp[4]];
      rfp[5] = mp4_state->clp[bp[5]];
      rfp[6] = mp4_state->clp[bp[6]];
      rfp[7] = mp4_state->clp[bp[7]];
      bp += 8;
      rfp += iincr;
    }
  }
}

/***/

void addblockIntra (int comp, int bx, int by)
{
  int cc, iincr;
  unsigned char *rfp;
  short *bp;
  unsigned char *curr[3];

	curr[0] = frame_ref[0];
	curr[1] = frame_ref[1];
	curr[2] = frame_ref[2];

  bp = ld->block;

  cc = (comp < 4) ? 0 : (comp & 1) + 1; 

  if (cc == 0) 
  {
		
		bx <<= 4;
		by <<= 4;
    

		rfp = curr[0] + mp4_state->coded_picture_width * (by + ((comp & 2) << 2)) + bx + ((comp & 1) << 3);
    iincr = mp4_state->coded_picture_width;
  } 
  else 
  {

		bx <<= 3;
		by <<= 3;
   
		rfp = curr[cc] + mp4_state->chrom_width * by + bx;
    iincr = mp4_state->chrom_width;
  }
 transferIDCT_copy(bp, rfp, iincr);
}

/***/

void addblockInter (int comp, int bx, int by)
{
  int cc, iincr;
  unsigned char *rfp;
  short *bp;
  unsigned char *curr[3];

	curr[0] = frame_ref[0];
	curr[1] = frame_ref[1];
	curr[2] = frame_ref[2];

  bp = ld->block;

  cc = (comp < 4) ? 0 : (comp & 1) + 1; 

  if (cc == 0)
  {

		bx <<= 4;
		by <<= 4;
 

		rfp = curr[0] + mp4_state->coded_picture_width * (by + ((comp & 2) << 2)) + bx + ((comp & 1) << 3);
    iincr = mp4_state->coded_picture_width;
  } 
  else 
  {

		bx <<= 3;
		by <<= 3;

		rfp = curr[cc] + mp4_state->chrom_width * by + bx;
    iincr = mp4_state->chrom_width;
  }

 transferIDCT_add(bp, rfp, iincr);
}


int find_pmv (int block, int comp)
{
  int p1, p2, p3;
  int xin1, xin2, xin3;
  int yin1, yin2, yin3;
  int vec1, vec2, vec3;

	int x = mp4_state->hdr.mb_xpos;
	int y = mp4_state->hdr.mb_ypos;
	
	if ((y == 0) && ((block == 0) || (block == 1)))
	{
		if ((x == 0) && (block == 0))
			return 0;
		else if (block == 1)
			return mp4_state->MV[comp][0][y+1][x+1];
		else // block == 0
			return mp4_state->MV[comp][1][y+1][x+1-1];
	}
	else
	{
		x++;
		y++;

		switch (block)
		{
			case 0: 
				vec1 = 1;	yin1 = y;		xin1 = x-1;
				vec2 = 2;	yin2 = y-1;	xin2 = x;
				vec3 = 2;	yin3 = y-1;	xin3 = x+1;
				break;
			case 1:
				vec1 = 0;	yin1 = y;		xin1 = x;
				vec2 = 3;	yin2 = y-1;	xin2 = x;
				vec3 = 2;	yin3 = y-1;	xin3 = x+1;
				break;
			case 2:
				vec1 = 3;	yin1 = y;		xin1 = x-1;
				vec2 = 0;	yin2 = y;	  xin2 = x;
				vec3 = 1;	yin3 = y;		xin3 = x;
				break;
			default: 
				vec1 = 2;	yin1 = y;		xin1 = x;
				vec2 = 0;	yin2 = y;		xin2 = x;
				vec3 = 1;	yin3 = y;		xin3 = x;
				break;
		}
		p1 = mp4_state->MV[comp][vec1][yin1][xin1];
		p2 = mp4_state->MV[comp][vec2][yin2][xin2];
		p3 = mp4_state->MV[comp][vec3][yin3][xin3];

		return mmin(mmax(p1, p2), mmin(mmax(p2, p3), mmax(p1, p3)));
	}
}

/***/


// 對被解碼的幀增加邊界
void make_edge (unsigned char *frame_pic,
                int edged_width, int edged_height, int edge)
{
  int j;

	int width = edged_width - (2*edge);
	int height = edged_height - (2*edge);
	
	unsigned char *p_border;
	unsigned char *p_border_top, *p_border_bottom;
	unsigned char *p_border_top_ref, *p_border_bottom_ref;

	// 左右邊界
	p_border = frame_pic;

	for (j = 0; j < height; j++)
	{
		unsigned char border_left = *(p_border);
		unsigned char border_right = *(p_border + (width-1));

		memset((p_border - edge), border_left, edge);
		memset((p_border + width), border_right, edge);

		p_border += edged_width;
	}

	// 上下邊界
	p_border_top_ref = frame_pic;
	p_border_bottom_ref = frame_pic + (edged_width * (height -1));
	p_border_top = p_border_top_ref - (edge * edged_width);
	p_border_bottom = p_border_bottom_ref + edged_width;

	for (j = 0; j < edge; j++)
	{
		memcpy(p_border_top, p_border_top_ref, width);
		memcpy(p_border_bottom, p_border_bottom_ref, width);

		p_border_top += edged_width;
		p_border_bottom += edged_width;
	}

  // 角
	{
		unsigned char * p_left_corner_top = frame_pic - edge - (edge * edged_width);
		unsigned char * p_right_corner_top = p_left_corner_top + edge + width;
		unsigned char * p_left_corner_bottom = frame_pic + (edged_width * height) - edge;
		unsigned char * p_right_corner_bottom = p_left_corner_bottom + edge + width;

		char left_corner_top = *(frame_pic);
		char right_corner_top = *(frame_pic + (width-1));
		char left_corner_bottom = *(frame_pic + (edged_width * (height-1)));
		char right_corner_bottom = *(frame_pic + (edged_width * (height-1)) + (width-1));

		for (j = 0; j < edge; j++)
		{
			memset(p_left_corner_top, left_corner_top, edge);
			memset(p_right_corner_top, right_corner_top, edge);
			memset(p_left_corner_bottom, left_corner_bottom, edge);
			memset(p_right_corner_bottom, right_corner_bottom, edge);

			p_left_corner_top += edged_width;
			p_right_corner_top += edged_width;
			p_left_corner_bottom += edged_width;
			p_right_corner_bottom += edged_width;
		}
	}
}

/***/


// 在顯示或寫入一個文件前對一個幀緩存重新排序
void PictureDisplay(unsigned char *bmp, unsigned int stride, int render_flag)
{ 
#ifdef _DECORE
	if (render_flag) 
	{
		if (mp4_state->post_flag)
		{
			postprocess(frame_ref, mp4_state->coded_picture_width,
				display_frame, mp4_state->horizontal_size, 
				mp4_state->horizontal_size,  mp4_state->vertical_size, 
				&mp4_state->quant_store[1][1], (DEC_MBC+1), mp4_state->pp_options);
			mp4_state->convert_yuv(display_frame[0], mp4_state->hdr.width,
				display_frame[1], display_frame[2], (mp4_state->hdr.width>>1),
				bmp, mp4_state->hdr.width, mp4_state->flag_invert * mp4_state->hdr.height,
				stride);
		}
		else
		{
			mp4_state->convert_yuv(frame_ref[0], mp4_state->coded_picture_width,
				frame_ref[1], frame_ref[2], (mp4_state->coded_picture_width>>1),
				bmp, mp4_state->hdr.width, mp4_state->flag_invert * mp4_state->hdr.height,
				stride);
		}
	}
#else
	// 輸出到一個文件
	storeframe (frame_ref, mp4_state->coded_picture_width, mp4_state->vertical_size);
#endif
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产自产拍高清av| 国产精品一二三| 亚洲精品高清视频在线观看| 中文字幕精品综合| 精品成人a区在线观看| 日韩精品一区二| 久久一夜天堂av一区二区三区| 日韩欧美国产麻豆| 亚洲精品一区二区三区精华液| 日韩一级欧美一级| 欧美电影免费观看高清完整版在线 | 亚洲一级在线观看| 亚洲电影视频在线| 青青草国产成人av片免费| 青青国产91久久久久久| 美女精品一区二区| 国产精品小仙女| 99精品国产热久久91蜜凸| 色婷婷亚洲综合| 欧美一区二区在线免费播放 | 欧美国产精品久久| 亚洲欧洲成人自拍| 亚洲一区二三区| 日本中文字幕一区二区视频| 久久99精品一区二区三区| 国产成人在线观看| 色综合久久88色综合天天6 | 国产精品久久久久久久久果冻传媒| 国产精品动漫网站| 成人免费一区二区三区视频| 亚洲综合丁香婷婷六月香| 日韩精品免费专区| 国产一区二区精品久久99| 99久久亚洲一区二区三区青草| 欧美视频自拍偷拍| 精品sm捆绑视频| 亚洲欧美综合在线精品| 怡红院av一区二区三区| 日本欧美加勒比视频| 国产91精品一区二区| 91福利社在线观看| 精品国产91洋老外米糕| 韩国女主播成人在线观看| 成+人+亚洲+综合天堂| 欧美日韩视频专区在线播放| 亚洲精品一线二线三线无人区| 日本一区二区三区国色天香 | 国产成人一区在线| 欧美日韩在线一区二区| 久久蜜桃一区二区| 亚洲免费观看在线视频| 免费成人结看片| av在线不卡电影| 精品国产第一区二区三区观看体验| 亚洲视频一区二区在线| 精品一区二区三区视频| 日本韩国欧美一区二区三区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 在线精品视频免费播放| 亚洲精品在线观看视频| 亚洲大片精品永久免费| 成人黄色在线网站| 日韩免费在线观看| 亚洲五码中文字幕| 成人h精品动漫一区二区三区| 日韩免费高清av| 一区二区三区91| 成人国产精品免费网站| 日韩欧美一区在线| 亚洲国产综合在线| 99精品欧美一区二区蜜桃免费| 日韩午夜激情电影| 一区二区视频在线看| 国产精品一品二品| 欧美大片在线观看| 日本不卡高清视频| 欧美色图免费看| 国产精品初高中害羞小美女文| 国精品**一区二区三区在线蜜桃 | 一区二区三区在线免费观看| 丁香婷婷综合色啪| 26uuu成人网一区二区三区| 五月激情综合色| 欧美自拍偷拍一区| 最新国产精品久久精品| 高清av一区二区| 久久精品水蜜桃av综合天堂| 免费在线成人网| 欧美一区二区在线视频| 五月天激情综合网| 欧美日韩久久不卡| 亚洲成人资源网| 欧美日韩另类一区| 亚洲成av人在线观看| 欧美性三三影院| 亚洲一区在线观看视频| 欧美在线高清视频| 亚洲精品视频在线观看网站| 99re热视频这里只精品| 亚洲日本丝袜连裤袜办公室| 91在线精品一区二区| 亚洲视频免费在线| 欧美亚日韩国产aⅴ精品中极品| 亚洲四区在线观看| 91在线小视频| 亚洲另类一区二区| 91黄色免费观看| 亚洲国产一区在线观看| 欧美日韩一卡二卡三卡| 亚洲h精品动漫在线观看| 欧美剧情片在线观看| 日韩电影在线免费观看| 日韩欧美中文一区二区| 看电影不卡的网站| 久久午夜电影网| 福利电影一区二区| 亚洲精品第1页| 欧美日韩1区2区| 蜜桃精品在线观看| 久久久久高清精品| 91免费在线看| 亚洲国产视频一区| 日韩欧美中文一区| 国产激情偷乱视频一区二区三区| 亚洲国产精品成人久久综合一区 | 久久综合久久久久88| 国产福利一区二区| 综合久久综合久久| 欧美日韩在线观看一区二区| 奇米在线7777在线精品| 久久理论电影网| 91天堂素人约啪| 日韩制服丝袜av| 久久久精品综合| 色婷婷亚洲精品| 奇米888四色在线精品| 国产亚洲精品超碰| 色8久久精品久久久久久蜜| 亚洲va欧美va人人爽| 2021中文字幕一区亚洲| 成人免费黄色大片| 亚洲成年人影院| 国产欧美精品一区二区色综合| 色美美综合视频| 另类成人小视频在线| 国产精品不卡一区二区三区| 欧美精品亚洲一区二区在线播放| 国产一二三精品| 亚洲影视在线播放| 久久久不卡影院| 欧美亚洲国产一区二区三区| 国产一区日韩二区欧美三区| 亚洲码国产岛国毛片在线| 日韩欧美卡一卡二| 色综合久久久久综合| 精品影视av免费| 一个色在线综合| 国产欧美日韩久久| 欧美精品一级二级三级| 懂色av噜噜一区二区三区av| 日本在线观看不卡视频| 国产精品久久久久久久裸模| 3751色影院一区二区三区| 国产福利一区在线观看| 日韩—二三区免费观看av| 日韩毛片高清在线播放| 亚洲精品一区二区三区四区高清| 欧美熟乱第一页| 99久久精品国产精品久久| 麻豆91在线观看| 亚洲国产人成综合网站| 中文一区二区在线观看| 日韩欧美不卡一区| 在线欧美一区二区| 成人亚洲一区二区一| 久久99精品国产麻豆婷婷洗澡| 亚洲自拍与偷拍| 中文av一区二区| 精品久久人人做人人爽| 欧美亚洲高清一区| 色综合久久天天综合网| 高清不卡一区二区在线| 国产真实乱子伦精品视频| 天天色图综合网| 亚洲国产一二三| 亚洲欧美视频在线观看视频| 日本一区二区三区国色天香 | 国产精品美女久久久久高潮| 日韩免费观看高清完整版| 欧美日韩成人综合| 欧美伊人精品成人久久综合97| 成人h版在线观看| 成人a免费在线看| 国产成a人亚洲精| 国产成人免费在线观看不卡| 狠狠久久亚洲欧美| 久久成人久久爱| 另类欧美日韩国产在线| 久久国产生活片100| 久久国产人妖系列|