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

📄 output.c

📁 网络MPEG4IP流媒体开发源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
						DITHER_SCALE_HEAD						STORE_PIXEL_BGR888						DITHER_SCALE_TAIL						break;					case MPEG3_BGRA8888:						DITHER_SCALE_HEAD						STORE_PIXEL_BGRA8888						DITHER_SCALE_TAIL						break;					case MPEG3_RGB565:						DITHER_SCALE_HEAD						STORE_PIXEL_RGB565						DITHER_SCALE_TAIL						break;					case MPEG3_RGB888:						DITHER_SCALE_HEAD						STORE_PIXEL_RGB888						DITHER_SCALE_TAIL						break;					case MPEG3_RGBA8888:						DITHER_SCALE_HEAD						STORE_PIXEL_RGBA8888						DITHER_SCALE_TAIL						break;					case MPEG3_601_BGR888:						DITHER_SCALE_601_HEAD						STORE_PIXEL_BGR888						DITHER_SCALE_TAIL						break;					case MPEG3_601_BGRA8888:						DITHER_SCALE_601_HEAD						STORE_PIXEL_BGRA8888						DITHER_SCALE_TAIL						break;					case MPEG3_601_RGB565:						DITHER_SCALE_601_HEAD						STORE_PIXEL_RGB565						DITHER_SCALE_TAIL						break;					case MPEG3_601_RGB888:						DITHER_SCALE_601_HEAD						STORE_PIXEL_RGB888						DITHER_SCALE_TAIL						break;					case MPEG3_601_RGBA8888:						DITHER_SCALE_601_HEAD						STORE_PIXEL_RGBA8888						DITHER_SCALE_TAIL						break;					case MPEG3_RGBA16161616:					{						register unsigned short *data_s = (unsigned short*)data;						DITHER_SCALE_HEAD						STORE_PIXEL_RGBA16161616						DITHER_SCALE_TAIL					}						break;				}			}			else			{/* Transfer row unscaled */				switch(video->color_model)				{					case MPEG3_BGR888:						DITHER_HEAD						STORE_PIXEL_BGR888						DITHER_TAIL						break;					case MPEG3_BGRA8888:						DITHER_HEAD						STORE_PIXEL_BGRA8888						DITHER_TAIL						break;					case MPEG3_RGB565:						DITHER_HEAD						STORE_PIXEL_RGB565						DITHER_TAIL						break;					case MPEG3_RGB888:						DITHER_HEAD						STORE_PIXEL_RGB888						DITHER_TAIL						break;					case MPEG3_RGBA8888:						DITHER_HEAD						STORE_PIXEL_RGBA8888						DITHER_TAIL						break;					case MPEG3_601_BGR888:						DITHER_601_HEAD						STORE_PIXEL_BGR888						DITHER_TAIL						break;					case MPEG3_601_BGRA8888:						DITHER_601_HEAD						STORE_PIXEL_BGRA8888						DITHER_TAIL						break;					case MPEG3_601_RGB565:						DITHER_601_HEAD						STORE_PIXEL_RGB565						DITHER_TAIL						break;					case MPEG3_601_RGB888:						DITHER_601_HEAD						STORE_PIXEL_RGB888						DITHER_TAIL						break;					case MPEG3_601_RGBA8888:						DITHER_601_HEAD						STORE_PIXEL_RGBA8888						DITHER_TAIL						break;					case MPEG3_RGBA16161616:					{						register unsigned short *data_s = (unsigned short*)data;						DITHER_HEAD						STORE_PIXEL_RGBA16161616						DITHER_TAIL					}						break;				}			}		DITHER_ROW_TAIL	} /* End of non-MMX */#ifdef HAVE_MMX	if(video->have_mmx)		__asm__ __volatile__ ("emms");#endif	return 0;}int mpeg3video_ditherframe444(mpeg3video_t *video, unsigned char *src[]){	return 0;}int mpeg3video_dithertop(mpeg3video_t *video, unsigned char *src[]){	return mpeg3video_ditherframe(video, src, video->output_rows);}int mpeg3video_dithertop444(mpeg3video_t *video, unsigned char *src[]){	return 0;}int mpeg3video_ditherbot(mpeg3video_t *video, unsigned char *src[]){	return 0;}int mpeg3video_ditherbot444(mpeg3video_t *video, unsigned char *src[]){	return 0;}void memcpy_fast(unsigned char *output, unsigned char *input, long len){	int i, len2;/* 8 byte alignment *//* * 	if(!((long)input & 0x7)) * 	{ * 		len2 = len >> 4; * 		for(i = 0; i < len2; ) * 		{ * 			((int64_t*)output)[i] = ((int64_t*)input)[i]; * 			i++; * 			((int64_t*)output)[i] = ((int64_t*)input)[i]; * 			i++; * 		} *  * 		for(i *= 16; i < len; i++) * 		{ * 			output[i] = input[i]; * 		} * 	} * 	else */		memcpy(output, input, len);}int mpeg3video_init_output(){	int i, value;	for(i = 0; i < 256; i++)	{		value = (int)(1.1644 * i - 255 * 0.0627 + 0.5);		if(value < 0) value = 0;		else		if(value > 255) value = 255;		mpeg3_601_to_rgb[i] = value;	}	return 0;}int mpeg3video_present_frame(mpeg3video_t *video){	int i, j, k, l;	unsigned char **src = video->output_src;/* Copy YUV buffers */	if(video->want_yvu)	{		long size0, size1;		long offset0, offset1;		int chroma_denominator;				if(video->chroma_format == CHROMA420)			chroma_denominator = 2;		else			chroma_denominator = 1;/* Drop a frame */		if(!video->y_output) return 0;/* Copy a frame *//* Three blocks */		if(video->in_x == 0 && 			video->in_w >= video->coded_picture_width &&			video->row_span == video->coded_picture_width)		{			size0 = video->coded_picture_width * video->in_h;			size1 = video->chrom_width * (int)((float)video->in_h / chroma_denominator + 0.5);			offset0 = video->coded_picture_width * video->in_y;			offset1 = video->chrom_width * (int)((float)video->in_y / chroma_denominator + 0.5);printf("mpeg3video_present_frame 1\n");/* * 			if(video->in_y > 0) * 			{ * 				offset[1] += video->chrom_width / 2; * 				size[1] += video->chrom_width / 2; * 			} */			memcpy(video->y_output, src[0] + offset0, size0);			memcpy(video->u_output, src[1] + offset1, size1);			memcpy(video->v_output, src[2] + offset1, size1);		}		else/* One block per row */		{//printf("mpeg3video_present_frame 2 %d %d %d\n", video->in_w, video->coded_picture_width, video->chrom_width);			int row_span = video->in_w;			int row_span0;			int row_span1;			if(video->row_span)				row_span = video->row_span;			row_span0 = row_span;			row_span1 = (row_span >> 1);			size0 = video->in_w;			size1 = (video->in_w >> 1);			offset0 = video->coded_picture_width * video->in_y;			offset1 = video->chrom_width * video->in_y / chroma_denominator;				for(i = 0; i < video->in_h; i++)			{				memcpy(video->y_output + i * row_span0, 					src[0] + offset0 + video->in_x, 					size0);				offset0 += video->coded_picture_width;				if(chroma_denominator == 1 || !(i % 2))				{					memcpy(video->u_output + i / chroma_denominator * row_span1, 						src[1] + offset1 + (video->in_x >> 1), 						size1);					memcpy(video->v_output + i / chroma_denominator * row_span1, 						src[2] + offset1 + (video->in_x >> 1), 						size1);					if(video->horizontal_size < video->in_w)					{						memset(video->u_output + 							i / chroma_denominator * row_span1 +							(video->horizontal_size >> 1),							0x80,							(video->in_w >> 1) - 							(video->horizontal_size >> 1));						memset(video->v_output + 							i / chroma_denominator * row_span1 +							(video->horizontal_size >> 1),							0x80,							(video->in_w >> 1) - 							(video->horizontal_size >> 1));					}				}								if(chroma_denominator == 1 || (i % 2))					offset1 += video->chrom_width;			}		}		return 0;	}/* Want RGB buffer *//* Copy the frame to the output with YUV to RGB conversion */  	if(video->prog_seq)	{    	if(video->chroma_format != CHROMA444)		{    		mpeg3video_ditherframe(video, src, video->output_rows);    	}    	else    	  	mpeg3video_ditherframe444(video, src);  	}	else	{   		if((video->pict_struct == FRAME_PICTURE && video->topfirst) || 			video->pict_struct == BOTTOM_FIELD)		{/* top field first */    		if(video->chroma_format != CHROMA444)			{        		mpeg3video_dithertop(video, src);        		mpeg3video_ditherbot(video, src);    		}    		else 			{        		mpeg3video_dithertop444(video, src);        		mpeg3video_ditherbot444(video, src);    		}    	}    	else 		{/* bottom field first */    		if(video->chroma_format != CHROMA444)			{        		mpeg3video_ditherbot(video, src);        		mpeg3video_dithertop(video, src);    		}    		else 			{        		mpeg3video_ditherbot444(video, src);        		mpeg3video_dithertop444(video, src);    		}    	}  	}	return 0;}int mpeg3video_display_second_field(mpeg3video_t *video){/* Not used */	return 0;}

⌨️ 快捷键说明

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