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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mp4_picture.c

?? < VC++視頻音頻開發(fā)>> 這本書的源碼
?? 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);

/***/


// 解碼和顯示一個(gè)視頻對象平面
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;
		}
	}
}

/***/


// 在顯示或?qū)懭胍粋€(gè)文件前對一個(gè)幀緩存重新排序
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
	// 輸出到一個(gè)文件
	storeframe (frame_ref, mp4_state->coded_picture_width, mp4_state->vertical_size);
#endif
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜精品电影| 成人国产精品免费观看动漫| 91超碰这里只有精品国产| 亚洲无线码一区二区三区| 在线播放中文字幕一区| 蜜桃精品视频在线观看| www国产成人免费观看视频 深夜成人网 | 国产女同互慰高潮91漫画| 国产成都精品91一区二区三| 中文字幕人成不卡一区| 在线免费观看日韩欧美| 奇米色777欧美一区二区| 久久久久久久久久久久电影| 成人av动漫网站| 亚洲国产欧美另类丝袜| 26uuuu精品一区二区| av欧美精品.com| 美洲天堂一区二卡三卡四卡视频| 国产亚洲一区字幕| 欧美亚洲免费在线一区| 精品影院一区二区久久久| 国产精品久久久久久妇女6080| 欧美日韩精品欧美日韩精品一 | 欧美一卡二卡在线| 国产激情视频一区二区在线观看 | 欧美国产综合一区二区| 在线观看国产一区二区| 国内精品久久久久影院薰衣草| 国产精品美女久久久久久久网站| 欧美日韩久久不卡| 粗大黑人巨茎大战欧美成人| 亚洲国产精品久久不卡毛片| 久久精品水蜜桃av综合天堂| 欧美三级电影一区| 岛国精品在线播放| 美女脱光内衣内裤视频久久影院| 国产精品视频一区二区三区不卡| 91精选在线观看| 色婷婷国产精品综合在线观看| 蜜臀av在线播放一区二区三区| 国产精品成人在线观看| 精品国产欧美一区二区| 欧美少妇性性性| 成人国产在线观看| 国产一区二区三区蝌蚪| 亚洲成人1区2区| 亚洲天堂成人网| 久久免费国产精品| 欧美一级二级在线观看| 欧美三片在线视频观看| 成人国产精品免费观看| 国产麻豆精品在线| 蜜臀精品久久久久久蜜臀| 亚洲成在人线在线播放| 亚洲精品国产精品乱码不99 | 中文字幕一区三区| 国产日韩欧美a| 欧美成人aa大片| 91精品国产综合久久小美女| 欧美日韩视频在线一区二区| 91麻豆成人久久精品二区三区| 国产成人免费视| 国产原创一区二区| 精品一二线国产| 麻豆91精品91久久久的内涵| 肉丝袜脚交视频一区二区| 亚洲一区二区三区不卡国产欧美| 亚洲色图制服诱惑| 亚洲欧美区自拍先锋| 一区视频在线播放| 最新欧美精品一区二区三区| 国产精品麻豆久久久| 国产精品美女久久久久高潮| 国产精品久久久久影院老司| 国产精品萝li| 亚洲免费观看高清完整版在线| 一区视频在线播放| 亚洲精品欧美二区三区中文字幕| 亚洲乱码中文字幕综合| 亚洲精品第一国产综合野| 艳妇臀荡乳欲伦亚洲一区| 亚洲精品大片www| 五月天激情综合网| 日韩国产欧美在线观看| 久久成人久久爱| 国产一区二区精品在线观看| 成人午夜在线视频| 91小视频免费看| 欧美怡红院视频| 欧美一区二区三区色| 精品国内二区三区| 国产精品美女久久久久高潮| 亚洲免费av高清| 日欧美一区二区| 国内精品久久久久影院色 | 亚洲欧美日韩小说| 亚洲国产三级在线| 激情偷乱视频一区二区三区| 国产精品亚洲人在线观看| 9i看片成人免费高清| 精品视频全国免费看| 欧美本精品男人aⅴ天堂| 国产欧美日本一区二区三区| 依依成人精品视频| 喷白浆一区二区| 国产成人精品亚洲777人妖 | 日韩精品欧美精品| 国产福利一区二区三区视频| 色一情一伦一子一伦一区| 日韩丝袜情趣美女图片| 欧美精彩视频一区二区三区| 亚洲一区日韩精品中文字幕| 麻豆freexxxx性91精品| 99v久久综合狠狠综合久久| 国产情人综合久久777777| 中文字幕在线观看一区二区| 香蕉加勒比综合久久| 国产不卡视频一区二区三区| 欧美亚洲高清一区二区三区不卡| 精品入口麻豆88视频| 亚洲欧美激情一区二区| 麻豆国产精品一区二区三区| 91视频免费播放| 欧美精品一区二区久久久| 一区二区不卡在线播放| 国产精品一级黄| 欧美伦理电影网| 亚洲欧美偷拍三级| 国产一区二区久久| 3d成人h动漫网站入口| 中文字幕在线不卡视频| 黄页视频在线91| 欧美日韩国产天堂| 亚洲丝袜自拍清纯另类| 国产主播一区二区| 欧美一区二区视频在线观看2020| 国产精品久99| 顶级嫩模精品视频在线看| 日韩欧美一二三区| 亚洲v中文字幕| 色婷婷亚洲婷婷| 国产精品丝袜一区| 国产激情一区二区三区| 日韩欧美在线影院| 午夜精品久久久久久久久久久| 91在线丨porny丨国产| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美色综合网站| 亚洲欧美一区二区久久| av动漫一区二区| 日本一区二区三区高清不卡| 国产一区二区在线电影| 日韩欧美久久久| 奇米四色…亚洲| 欧美一区二区三区日韩| 日韩电影在线一区| 欧美日韩你懂的| 午夜免费欧美电影| 欧美日韩一区二区在线视频| 亚洲欧美日韩综合aⅴ视频| fc2成人免费人成在线观看播放| 国产亚洲精品久| 国产成人免费在线| 中国色在线观看另类| 成人av网在线| 亚洲欧美影音先锋| 91国产成人在线| 亚洲一级二级在线| 欧美日韩在线播放| 秋霞影院一区二区| 日韩精品一区二区三区视频播放 | 日本一区二区三区电影| 国产白丝精品91爽爽久久| 国产精品视频在线看| 99vv1com这只有精品| 亚洲一线二线三线久久久| 欧美日韩一级黄| 久久国产精品99久久久久久老狼| 欧美不卡一区二区三区| 国产a精品视频| 亚洲精品综合在线| 欧美精品自拍偷拍| 精品一区二区免费看| 国产精品视频观看| 91福利精品第一导航| 婷婷综合五月天| 26uuu精品一区二区在线观看| 国产成人综合网| 亚洲色图欧洲色图婷婷| 欧美电影在哪看比较好| 激情图片小说一区| 亚洲天堂精品视频| 在线不卡中文字幕| 国产激情精品久久久第一区二区| 国产精品不卡一区二区三区| 欧美日韩精品高清| 国产黄人亚洲片| 亚洲国产综合色| 国产欧美综合在线观看第十页| 一本色道综合亚洲|