📄 output.c
字号:
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 + -