mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-25 04:29:16 +00:00
libobs: Add Y800 color format support
(Note: Also modified the obs-ffmpeg plugin module) Allows the ability for frame data to pass 8-bit grayscale images (Y800 color format). Closes jp9000/obs-studio#515
This commit is contained in:
parent
07ecdaf8d3
commit
c3629eacb5
|
@ -45,6 +45,9 @@ enum video_format video_format_from_fourcc(uint32_t fourcc)
|
|||
case MAKE_FOURCC('Y','V','Y','U'):
|
||||
return VIDEO_FORMAT_YVYU;
|
||||
|
||||
case MAKE_FOURCC('Y','8','0','0'):
|
||||
return VIDEO_FORMAT_Y800;
|
||||
|
||||
}
|
||||
return VIDEO_FORMAT_NONE;
|
||||
}
|
||||
|
|
|
@ -66,6 +66,13 @@ void video_frame_init(struct video_frame *frame, enum video_format format,
|
|||
frame->linesize[1] = width;
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_Y800:
|
||||
size = width * height;
|
||||
ALIGN_SIZE(size, alignment);
|
||||
frame->data[0] = bmalloc(size);
|
||||
frame->linesize[0] = width;
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_YVYU:
|
||||
case VIDEO_FORMAT_YUY2:
|
||||
case VIDEO_FORMAT_UYVY:
|
||||
|
@ -115,6 +122,7 @@ void video_frame_copy(struct video_frame *dst, const struct video_frame *src,
|
|||
memcpy(dst->data[1], src->data[1], src->linesize[1] * cy / 2);
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_Y800:
|
||||
case VIDEO_FORMAT_YVYU:
|
||||
case VIDEO_FORMAT_YUY2:
|
||||
case VIDEO_FORMAT_UYVY:
|
||||
|
|
|
@ -46,6 +46,7 @@ enum video_format {
|
|||
VIDEO_FORMAT_RGBA,
|
||||
VIDEO_FORMAT_BGRA,
|
||||
VIDEO_FORMAT_BGRX,
|
||||
VIDEO_FORMAT_Y800, /* grayscale */
|
||||
|
||||
/* planar 4:4:4 */
|
||||
VIDEO_FORMAT_I444,
|
||||
|
@ -97,6 +98,7 @@ static inline bool format_is_yuv(enum video_format format)
|
|||
case VIDEO_FORMAT_RGBA:
|
||||
case VIDEO_FORMAT_BGRA:
|
||||
case VIDEO_FORMAT_BGRX:
|
||||
case VIDEO_FORMAT_Y800:
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -115,6 +117,7 @@ static inline const char *get_video_format_name(enum video_format format)
|
|||
case VIDEO_FORMAT_BGRA: return "BGRA";
|
||||
case VIDEO_FORMAT_BGRX: return "BGRX";
|
||||
case VIDEO_FORMAT_I444: return "I444";
|
||||
case VIDEO_FORMAT_Y800: return "Y800";
|
||||
case VIDEO_FORMAT_NONE:;
|
||||
}
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@ static inline enum AVPixelFormat get_ffmpeg_video_format(
|
|||
case VIDEO_FORMAT_RGBA: return AV_PIX_FMT_RGBA;
|
||||
case VIDEO_FORMAT_BGRA: return AV_PIX_FMT_BGRA;
|
||||
case VIDEO_FORMAT_BGRX: return AV_PIX_FMT_BGRA;
|
||||
case VIDEO_FORMAT_Y800: return AV_PIX_FMT_GRAY8;
|
||||
case VIDEO_FORMAT_I444: return AV_PIX_FMT_YUV444P;
|
||||
}
|
||||
|
||||
|
|
|
@ -714,6 +714,8 @@ static inline enum gs_color_format convert_video_format(
|
|||
return GS_RGBA;
|
||||
else if (format == VIDEO_FORMAT_BGRA)
|
||||
return GS_BGRA;
|
||||
else if (format == VIDEO_FORMAT_Y800)
|
||||
return GS_R8;
|
||||
|
||||
return GS_BGRX;
|
||||
}
|
||||
|
|
|
@ -1233,6 +1233,7 @@ static inline enum convert_type get_convert_type(enum video_format format)
|
|||
case VIDEO_FORMAT_UYVY:
|
||||
return CONVERT_422_U;
|
||||
|
||||
case VIDEO_FORMAT_Y800:
|
||||
case VIDEO_FORMAT_I444:
|
||||
case VIDEO_FORMAT_NONE:
|
||||
case VIDEO_FORMAT_RGBA:
|
||||
|
@ -1399,6 +1400,7 @@ static const char *select_conversion_technique(enum video_format format)
|
|||
return "NV12_Reverse";
|
||||
break;
|
||||
|
||||
case VIDEO_FORMAT_Y800:
|
||||
case VIDEO_FORMAT_BGRA:
|
||||
case VIDEO_FORMAT_BGRX:
|
||||
case VIDEO_FORMAT_RGBA:
|
||||
|
@ -2090,6 +2092,7 @@ static void copy_frame_data(struct obs_source_frame *dst,
|
|||
case VIDEO_FORMAT_YVYU:
|
||||
case VIDEO_FORMAT_YUY2:
|
||||
case VIDEO_FORMAT_UYVY:
|
||||
case VIDEO_FORMAT_Y800:
|
||||
case VIDEO_FORMAT_NONE:
|
||||
case VIDEO_FORMAT_RGBA:
|
||||
case VIDEO_FORMAT_BGRA:
|
||||
|
|
|
@ -21,6 +21,7 @@ static inline enum AVPixelFormat obs_to_ffmpeg_video_format(
|
|||
case VIDEO_FORMAT_RGBA: return AV_PIX_FMT_RGBA;
|
||||
case VIDEO_FORMAT_BGRA: return AV_PIX_FMT_BGRA;
|
||||
case VIDEO_FORMAT_BGRX: return AV_PIX_FMT_BGRA;
|
||||
case VIDEO_FORMAT_Y800: return AV_PIX_FMT_GRAY8;
|
||||
}
|
||||
|
||||
return AV_PIX_FMT_NONE;
|
||||
|
@ -37,6 +38,7 @@ static inline enum video_format ffmpeg_to_obs_video_format(
|
|||
case AV_PIX_FMT_UYVY422: return VIDEO_FORMAT_UYVY;
|
||||
case AV_PIX_FMT_RGBA: return VIDEO_FORMAT_RGBA;
|
||||
case AV_PIX_FMT_BGRA: return VIDEO_FORMAT_BGRA;
|
||||
case AV_PIX_FMT_GRAY8: return VIDEO_FORMAT_Y800;
|
||||
case AV_PIX_FMT_NONE:
|
||||
default: return VIDEO_FORMAT_NONE;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue