imgconvert.c
来自「从FFMPEG转换而来的H264解码程序,VC下编译..」· C语言 代码 · 共 1,011 行 · 第 1/3 页
C
1,011 行
},
[PIX_FMT_BGR32_1] = {
.name = "bgr32_1",
.nb_channels = 4, .is_alpha = 1,
.color_type = FF_COLOR_RGB,
.pixel_type = FF_PIXEL_PACKED,
.depth = 8,
.x_chroma_shift = 0, .y_chroma_shift = 0,
},
[PIX_FMT_RGB32_1] = {
.name = "rgb32_1",
.nb_channels = 4, .is_alpha = 1,
.color_type = FF_COLOR_RGB,
.pixel_type = FF_PIXEL_PACKED,
.depth = 8,
.x_chroma_shift = 0, .y_chroma_shift = 0,
},
};
#else
static PixFmtInfo pix_fmt_info[PIX_FMT_NB];
void avpicture_init_pixfmtinfo(void)
{
pix_fmt_info[PIX_FMT_YUV420P].name = "yuv420p";
pix_fmt_info[PIX_FMT_YUV420P].nb_channels = 3;
pix_fmt_info[PIX_FMT_YUV420P].color_type = FF_COLOR_YUV;
pix_fmt_info[PIX_FMT_YUV420P].pixel_type = FF_PIXEL_PLANAR;
pix_fmt_info[PIX_FMT_YUV420P].depth = 8;
pix_fmt_info[PIX_FMT_YUV420P].x_chroma_shift = 1;
pix_fmt_info[PIX_FMT_YUV420P].y_chroma_shift = 1;
pix_fmt_info[PIX_FMT_YUV422P].name = "yuv422p";
pix_fmt_info[PIX_FMT_YUV422P].nb_channels = 3;
pix_fmt_info[PIX_FMT_YUV422P].color_type = FF_COLOR_YUV;
pix_fmt_info[PIX_FMT_YUV422P].pixel_type = FF_PIXEL_PLANAR;
pix_fmt_info[PIX_FMT_YUV422P].depth = 8,
pix_fmt_info[PIX_FMT_YUV422P].x_chroma_shift = 1;
pix_fmt_info[PIX_FMT_YUV422P].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_YUV444P].name = "yuv444p";
pix_fmt_info[PIX_FMT_YUV444P].nb_channels = 3;
pix_fmt_info[PIX_FMT_YUV444P].color_type = FF_COLOR_YUV;
pix_fmt_info[PIX_FMT_YUV444P].pixel_type = FF_PIXEL_PLANAR;
pix_fmt_info[PIX_FMT_YUV444P].depth = 8;
pix_fmt_info[PIX_FMT_YUV444P].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_YUV444P].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_YUYV422].name = "yuyv422";
pix_fmt_info[PIX_FMT_YUYV422].nb_channels = 1;
pix_fmt_info[PIX_FMT_YUYV422].color_type = FF_COLOR_YUV;
pix_fmt_info[PIX_FMT_YUYV422].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_YUYV422].depth = 8;
pix_fmt_info[PIX_FMT_YUYV422].x_chroma_shift = 1;
pix_fmt_info[PIX_FMT_YUYV422].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_UYVY422].name = "uyvy422";
pix_fmt_info[PIX_FMT_UYVY422].nb_channels = 1;
pix_fmt_info[PIX_FMT_UYVY422].color_type = FF_COLOR_YUV;
pix_fmt_info[PIX_FMT_UYVY422].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_UYVY422].depth = 8;
pix_fmt_info[PIX_FMT_UYVY422].x_chroma_shift = 1;
pix_fmt_info[PIX_FMT_UYVY422].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_YUV410P].name = "yuv410p";
pix_fmt_info[PIX_FMT_YUV410P].nb_channels = 3;
pix_fmt_info[PIX_FMT_YUV410P].color_type = FF_COLOR_YUV;
pix_fmt_info[PIX_FMT_YUV410P].pixel_type = FF_PIXEL_PLANAR;
pix_fmt_info[PIX_FMT_YUV410P].depth = 8;
pix_fmt_info[PIX_FMT_YUV410P].x_chroma_shift = 2;
pix_fmt_info[PIX_FMT_YUV410P].y_chroma_shift = 2;
pix_fmt_info[PIX_FMT_YUV411P].name = "yuv411p";
pix_fmt_info[PIX_FMT_YUV411P].nb_channels = 3;
pix_fmt_info[PIX_FMT_YUV411P].color_type = FF_COLOR_YUV;
pix_fmt_info[PIX_FMT_YUV411P].pixel_type = FF_PIXEL_PLANAR;
pix_fmt_info[PIX_FMT_YUV411P].depth = 8;
pix_fmt_info[PIX_FMT_YUV411P].x_chroma_shift = 2;
pix_fmt_info[PIX_FMT_YUV411P].y_chroma_shift = 0;
/* JPEG YUV */
pix_fmt_info[PIX_FMT_YUVJ420P].name = "yuvj420p";
pix_fmt_info[PIX_FMT_YUVJ420P].nb_channels = 3;
pix_fmt_info[PIX_FMT_YUVJ420P].color_type = FF_COLOR_YUV_JPEG;
pix_fmt_info[PIX_FMT_YUVJ420P].pixel_type = FF_PIXEL_PLANAR;
pix_fmt_info[PIX_FMT_YUVJ420P].depth = 8;
pix_fmt_info[PIX_FMT_YUVJ420P].x_chroma_shift = 1;
pix_fmt_info[PIX_FMT_YUVJ420P].y_chroma_shift = 1;
pix_fmt_info[PIX_FMT_YUVJ422P].name = "yuvj422p";
pix_fmt_info[PIX_FMT_YUVJ422P].nb_channels = 3;
pix_fmt_info[PIX_FMT_YUVJ422P].color_type = FF_COLOR_YUV_JPEG;
pix_fmt_info[PIX_FMT_YUVJ422P].pixel_type = FF_PIXEL_PLANAR;
pix_fmt_info[PIX_FMT_YUVJ422P].depth = 8;
pix_fmt_info[PIX_FMT_YUVJ422P].x_chroma_shift = 1;
pix_fmt_info[PIX_FMT_YUVJ422P].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_YUVJ444P].name = "yuvj444p";
pix_fmt_info[PIX_FMT_YUVJ444P].nb_channels = 3;
pix_fmt_info[PIX_FMT_YUVJ444P].color_type = FF_COLOR_YUV_JPEG;
pix_fmt_info[PIX_FMT_YUVJ444P].pixel_type = FF_PIXEL_PLANAR;
pix_fmt_info[PIX_FMT_YUVJ444P].depth = 8;
pix_fmt_info[PIX_FMT_YUVJ444P].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_YUVJ444P].y_chroma_shift = 0;
/* RGB formats */
pix_fmt_info[PIX_FMT_RGB24].name = "rgb24";
pix_fmt_info[PIX_FMT_RGB24].nb_channels = 3;
pix_fmt_info[PIX_FMT_RGB24].color_type = FF_COLOR_RGB;
pix_fmt_info[PIX_FMT_RGB24].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_RGB24].depth = 8;
pix_fmt_info[PIX_FMT_RGB24].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_RGB24].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_BGR24].name = "bgr24";
pix_fmt_info[PIX_FMT_BGR24].nb_channels = 3;
pix_fmt_info[PIX_FMT_BGR24].color_type = FF_COLOR_RGB;
pix_fmt_info[PIX_FMT_BGR24].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_BGR24].depth = 8;
pix_fmt_info[PIX_FMT_BGR24].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_BGR24].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_RGB32].name = "rgb32";
pix_fmt_info[PIX_FMT_RGB32].nb_channels = 4;
pix_fmt_info[PIX_FMT_RGB32].is_alpha = 1;
pix_fmt_info[PIX_FMT_RGB32].color_type = FF_COLOR_RGB;
pix_fmt_info[PIX_FMT_RGB32].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_RGB32].depth = 8;
pix_fmt_info[PIX_FMT_RGB32].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_RGB32].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_RGB565].name = "rgb565";
pix_fmt_info[PIX_FMT_RGB565].nb_channels = 3;
pix_fmt_info[PIX_FMT_RGB565].color_type = FF_COLOR_RGB;
pix_fmt_info[PIX_FMT_RGB565].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_RGB565].depth = 5;
pix_fmt_info[PIX_FMT_RGB565].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_RGB565].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_RGB555].name = "rgb555";
pix_fmt_info[PIX_FMT_RGB555].nb_channels = 3;
pix_fmt_info[PIX_FMT_RGB555].color_type = FF_COLOR_RGB;
pix_fmt_info[PIX_FMT_RGB555].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_RGB555].depth = 5;
pix_fmt_info[PIX_FMT_RGB555].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_RGB555].y_chroma_shift = 0;
/* gray / mono formats */
pix_fmt_info[PIX_FMT_GRAY16BE].name = "gray16be";
pix_fmt_info[PIX_FMT_GRAY16BE].nb_channels = 1;
pix_fmt_info[PIX_FMT_GRAY16BE].color_type = FF_COLOR_GRAY;
pix_fmt_info[PIX_FMT_GRAY16BE].pixel_type = FF_PIXEL_PLANAR;
pix_fmt_info[PIX_FMT_GRAY16BE].depth = 16;
pix_fmt_info[PIX_FMT_GRAY16LE].name = "gray16le";
pix_fmt_info[PIX_FMT_GRAY16LE].nb_channels = 1;
pix_fmt_info[PIX_FMT_GRAY16LE].color_type = FF_COLOR_GRAY;
pix_fmt_info[PIX_FMT_GRAY16LE].pixel_type = FF_PIXEL_PLANAR;
pix_fmt_info[PIX_FMT_GRAY16LE].depth = 16;
pix_fmt_info[PIX_FMT_GRAY8].name = "gray";
pix_fmt_info[PIX_FMT_GRAY8].nb_channels = 1;
pix_fmt_info[PIX_FMT_GRAY8].color_type = FF_COLOR_GRAY;
pix_fmt_info[PIX_FMT_GRAY8].pixel_type = FF_PIXEL_PLANAR;
pix_fmt_info[PIX_FMT_GRAY8].depth = 8;
pix_fmt_info[PIX_FMT_MONOWHITE].name = "monow";
pix_fmt_info[PIX_FMT_MONOWHITE].nb_channels = 1;
pix_fmt_info[PIX_FMT_MONOWHITE].color_type = FF_COLOR_GRAY;
pix_fmt_info[PIX_FMT_MONOWHITE].pixel_type = FF_PIXEL_PLANAR;
pix_fmt_info[PIX_FMT_MONOWHITE].depth = 1;
pix_fmt_info[PIX_FMT_MONOBLACK].name = "monob";
pix_fmt_info[PIX_FMT_MONOBLACK].nb_channels = 1;
pix_fmt_info[PIX_FMT_MONOBLACK].color_type = FF_COLOR_GRAY;
pix_fmt_info[PIX_FMT_MONOBLACK].pixel_type = FF_PIXEL_PLANAR;
pix_fmt_info[PIX_FMT_MONOBLACK].depth = 1;
/* paletted formats */
pix_fmt_info[PIX_FMT_PAL8].name = "pal8";
pix_fmt_info[PIX_FMT_PAL8].nb_channels = 4;
pix_fmt_info[PIX_FMT_PAL8].is_alpha = 1;
pix_fmt_info[PIX_FMT_PAL8].color_type = FF_COLOR_RGB;
pix_fmt_info[PIX_FMT_PAL8].pixel_type = FF_PIXEL_PALETTE;
pix_fmt_info[PIX_FMT_PAL8].depth = 8;
pix_fmt_info[PIX_FMT_XVMC_MPEG2_MC].name = "xvmcmc";
pix_fmt_info[PIX_FMT_XVMC_MPEG2_IDCT].name = "xvmcidct";
pix_fmt_info[PIX_FMT_UYYVYY411].name = "uyyvyy411";
pix_fmt_info[PIX_FMT_UYYVYY411].nb_channels = 1;
pix_fmt_info[PIX_FMT_UYYVYY411].color_type = FF_COLOR_YUV;
pix_fmt_info[PIX_FMT_UYYVYY411].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_UYYVYY411].depth = 8;
pix_fmt_info[PIX_FMT_UYYVYY411].x_chroma_shift = 2;
pix_fmt_info[PIX_FMT_UYYVYY411].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_BGR32].name = "bgr32";
pix_fmt_info[PIX_FMT_BGR32].nb_channels = 4;
pix_fmt_info[PIX_FMT_BGR32].is_alpha = 1;
pix_fmt_info[PIX_FMT_BGR32].color_type = FF_COLOR_RGB;
pix_fmt_info[PIX_FMT_BGR32].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_BGR32].depth = 8;
pix_fmt_info[PIX_FMT_BGR32].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_BGR32].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_BGR565].name = "bgr565";
pix_fmt_info[PIX_FMT_BGR565].nb_channels = 3;
pix_fmt_info[PIX_FMT_BGR565].color_type = FF_COLOR_RGB;
pix_fmt_info[PIX_FMT_BGR565].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_BGR565].depth = 5;
pix_fmt_info[PIX_FMT_BGR565].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_BGR565].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_BGR555].name = "bgr555";
pix_fmt_info[PIX_FMT_BGR555].nb_channels = 3;
pix_fmt_info[PIX_FMT_BGR555].color_type = FF_COLOR_RGB;
pix_fmt_info[PIX_FMT_BGR555].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_BGR555].depth = 5;
pix_fmt_info[PIX_FMT_BGR555].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_BGR555].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_RGB8].name = "rgb8";
pix_fmt_info[PIX_FMT_RGB8].nb_channels = 1;
pix_fmt_info[PIX_FMT_RGB8].color_type = FF_COLOR_RGB;
pix_fmt_info[PIX_FMT_RGB8].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_RGB8].depth = 8;
pix_fmt_info[PIX_FMT_RGB8].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_RGB8].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_RGB4].name = "rgb4";
pix_fmt_info[PIX_FMT_RGB4].nb_channels = 1;
pix_fmt_info[PIX_FMT_RGB4].color_type = FF_COLOR_RGB;
pix_fmt_info[PIX_FMT_RGB4].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_RGB4].depth = 4;
pix_fmt_info[PIX_FMT_RGB4].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_RGB4].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_RGB4_BYTE].name = "rgb4_byte";
pix_fmt_info[PIX_FMT_RGB4_BYTE].nb_channels = 1;
pix_fmt_info[PIX_FMT_RGB4_BYTE].color_type = FF_COLOR_RGB;
pix_fmt_info[PIX_FMT_RGB4_BYTE].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_RGB4_BYTE].depth = 8;
pix_fmt_info[PIX_FMT_RGB4_BYTE].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_RGB4_BYTE].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_BGR8].name = "bgr8";
pix_fmt_info[PIX_FMT_BGR8].nb_channels = 1;
pix_fmt_info[PIX_FMT_BGR8].color_type = FF_COLOR_RGB;
pix_fmt_info[PIX_FMT_BGR8].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_BGR8].depth = 8;
pix_fmt_info[PIX_FMT_BGR8].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_BGR8].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_BGR4].name = "bgr4";
pix_fmt_info[PIX_FMT_BGR4].nb_channels = 1;
pix_fmt_info[PIX_FMT_BGR4].color_type = FF_COLOR_RGB;
pix_fmt_info[PIX_FMT_BGR4].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_BGR4].depth = 4;
pix_fmt_info[PIX_FMT_BGR4].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_BGR4].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_BGR4_BYTE].name = "bgr4_byte";
pix_fmt_info[PIX_FMT_BGR4_BYTE].nb_channels = 1;
pix_fmt_info[PIX_FMT_BGR4_BYTE].color_type = FF_COLOR_RGB;
pix_fmt_info[PIX_FMT_BGR4_BYTE].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_BGR4_BYTE].depth = 8;
pix_fmt_info[PIX_FMT_BGR4_BYTE].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_BGR4_BYTE].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_NV12].name = "nv12";
pix_fmt_info[PIX_FMT_NV12].nb_channels = 2;
pix_fmt_info[PIX_FMT_NV12].color_type = FF_COLOR_YUV;
pix_fmt_info[PIX_FMT_NV12].pixel_type = FF_PIXEL_PLANAR;
pix_fmt_info[PIX_FMT_NV12].depth = 8;
pix_fmt_info[PIX_FMT_NV12].x_chroma_shift = 1;
pix_fmt_info[PIX_FMT_NV12].y_chroma_shift = 1;
pix_fmt_info[PIX_FMT_NV21].name = "nv12";
pix_fmt_info[PIX_FMT_NV21].nb_channels = 2;
pix_fmt_info[PIX_FMT_NV21].color_type = FF_COLOR_YUV;
pix_fmt_info[PIX_FMT_NV21].pixel_type = FF_PIXEL_PLANAR;
pix_fmt_info[PIX_FMT_NV21].depth = 8;
pix_fmt_info[PIX_FMT_NV21].x_chroma_shift = 1;
pix_fmt_info[PIX_FMT_NV21].y_chroma_shift = 1;
pix_fmt_info[PIX_FMT_BGR32_1].name = "bgr32_1";
pix_fmt_info[PIX_FMT_BGR32_1].nb_channels = 4;
pix_fmt_info[PIX_FMT_BGR32_1].is_alpha = 1;
pix_fmt_info[PIX_FMT_BGR32_1].color_type = FF_COLOR_RGB;
pix_fmt_info[PIX_FMT_BGR32_1].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_BGR32_1].depth = 8;
pix_fmt_info[PIX_FMT_BGR32_1].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_BGR32_1].y_chroma_shift = 0;
pix_fmt_info[PIX_FMT_RGB32_1].name = "rgb32_1";
pix_fmt_info[PIX_FMT_RGB32_1].nb_channels = 4;
pix_fmt_info[PIX_FMT_RGB32_1].is_alpha = 1;
pix_fmt_info[PIX_FMT_RGB32_1].color_type = FF_COLOR_RGB;
pix_fmt_info[PIX_FMT_RGB32_1].pixel_type = FF_PIXEL_PACKED;
pix_fmt_info[PIX_FMT_RGB32_1].depth = 8;
pix_fmt_info[PIX_FMT_RGB32_1].x_chroma_shift = 0;
pix_fmt_info[PIX_FMT_RGB32_1].y_chroma_shift = 0;
}
#endif
void avcodec_get_chroma_sub_sample(int pix_fmt, int *h_shift, int *v_shift)
{
*h_shift = pix_fmt_info[pix_fmt].x_chroma_shift;
*v_shift = pix_fmt_info[pix_fmt].y_chroma_shift;
}
int avpicture_fill(AVPicture *picture, uint8_t *ptr,
int pix_fmt, int width, int height)
{
int size, w2, h2, size2;
const PixFmtInfo *pinfo;
if(avcodec_check_dimensions(NULL, width, height))
goto fail;
pinfo = &pix_fmt_info[pix_fmt];
size = width * height;
switch(pix_fmt) {
case PIX_FMT_YUV420P:
case PIX_FMT_YUV422P:
case PIX_FMT_YUV444P:
case PIX_FMT_YUV410P:
case PIX_FMT_YUV411P:
case PIX_FMT_YUVJ420P:
case PIX_FMT_YUVJ422P:
case PIX_FMT_YUVJ444P:
w2 = (width + (1 << pinfo->x_chroma_shift) - 1) >> pinfo->x_chroma_shift;
h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift;
size2 = w2 * h2;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?