mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-28 11:55:39 +00:00
mfc: Add support for RGB
This commit is contained in:
parent
4caad2d06c
commit
1e9aaee3ec
3 changed files with 25 additions and 2 deletions
|
@ -164,6 +164,8 @@ fimc_color_format_to_v4l2 (FimcColorFormat format)
|
|||
return V4L2_PIX_FMT_NV12M;
|
||||
case FIMC_COLOR_FORMAT_YUV420P:
|
||||
return V4L2_PIX_FMT_YUV420M;
|
||||
case FIMC_COLOR_FORMAT_RGB32:
|
||||
return V4L2_PIX_FMT_RGB32;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -175,6 +177,8 @@ static int
|
|||
fimc_color_format_get_nplanes (FimcColorFormat format)
|
||||
{
|
||||
switch (format) {
|
||||
case FIMC_COLOR_FORMAT_RGB32:
|
||||
return 1;
|
||||
case FIMC_COLOR_FORMAT_YUV420SPT:
|
||||
case FIMC_COLOR_FORMAT_YUV420SP:
|
||||
return 2;
|
||||
|
@ -192,6 +196,8 @@ fimc_color_format_get_component_height (FimcColorFormat format, int c,
|
|||
int height)
|
||||
{
|
||||
switch (format) {
|
||||
case FIMC_COLOR_FORMAT_RGB32:
|
||||
return height;
|
||||
case FIMC_COLOR_FORMAT_YUV420SPT:
|
||||
case FIMC_COLOR_FORMAT_YUV420SP:
|
||||
case FIMC_COLOR_FORMAT_YUV420P:
|
||||
|
|
|
@ -51,7 +51,8 @@ typedef struct _Fimc Fimc;
|
|||
typedef enum {
|
||||
FIMC_COLOR_FORMAT_YUV420SPT,
|
||||
FIMC_COLOR_FORMAT_YUV420SP,
|
||||
FIMC_COLOR_FORMAT_YUV420P
|
||||
FIMC_COLOR_FORMAT_YUV420P,
|
||||
FIMC_COLOR_FORMAT_RGB32
|
||||
} FimcColorFormat;
|
||||
|
||||
void fimc_init_debug (void);
|
||||
|
|
|
@ -80,7 +80,7 @@ static GstStaticPadTemplate gst_mfc_dec_src_template =
|
|||
GST_STATIC_PAD_TEMPLATE ("src",
|
||||
GST_PAD_SRC,
|
||||
GST_PAD_ALWAYS,
|
||||
GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ NV12, I420, YV12 }"))
|
||||
GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ NV12, I420, YV12, RGBx }"))
|
||||
);
|
||||
/* *INDENT-ON* */
|
||||
|
||||
|
@ -428,6 +428,9 @@ gst_mfc_dec_create_fimc (GstMFCDec * self, GstVideoCodecState * state)
|
|||
fimc = fimc_new ();
|
||||
|
||||
switch (state->info.finfo->format) {
|
||||
case GST_VIDEO_FORMAT_RGBx:
|
||||
fimc_format = FIMC_COLOR_FORMAT_RGB32;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_I420:
|
||||
case GST_VIDEO_FORMAT_YV12:
|
||||
fimc_format = FIMC_COLOR_FORMAT_YUV420P;
|
||||
|
@ -629,6 +632,19 @@ gst_mfc_dec_fill_outbuf (GstMFCDec * self, GstBuffer * outbuf,
|
|||
goto fimc_convert_error;
|
||||
|
||||
switch (state->info.finfo->format) {
|
||||
case GST_VIDEO_FORMAT_RGBx:
|
||||
dst_ = (guint8 *) GST_VIDEO_FRAME_COMP_DATA (&vframe, 0);
|
||||
src_ = self->dst[0];
|
||||
src_stride = self->dst_stride[0];
|
||||
h = GST_VIDEO_FRAME_HEIGHT (&vframe);
|
||||
w = GST_VIDEO_FRAME_WIDTH (&vframe);
|
||||
dst_stride = GST_VIDEO_FRAME_COMP_STRIDE (&vframe, 0);
|
||||
for (i = 0; i < h; i++) {
|
||||
memcpy (dst_, src_, w);
|
||||
dst_ += dst_stride;
|
||||
src_ += src_stride;
|
||||
}
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_I420:
|
||||
case GST_VIDEO_FORMAT_YV12:
|
||||
for (j = 0; j < 3; j++) {
|
||||
|
|
Loading…
Reference in a new issue