Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-gpu
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-gpu
Commits
27f77b04
Commit
27f77b04
authored
Sep 06, 2008
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added support for palettized RGB (RGBP)
SwScaler uses a really ugly hack to transmit the palette.
parent
dab65897
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
33 additions
and
3 deletions
+33
-3
modules/video_filter/swscale.c
modules/video_filter/swscale.c
+17
-3
src/video_output/vout_pictures.c
src/video_output/vout_pictures.c
+12
-0
src/video_output/vout_pictures.h
src/video_output/vout_pictures.h
+4
-0
No files found.
modules/video_filter/swscale.c
View file @
27f77b04
...
@@ -43,6 +43,8 @@
...
@@ -43,6 +43,8 @@
/* Gruikkkkkkkkkk!!!!! */
/* Gruikkkkkkkkkk!!!!! */
#include "../codec/avcodec/chroma.h"
#include "../codec/avcodec/chroma.h"
#define AVPALETTE_SIZE (256 * sizeof(uint32_t))
/*****************************************************************************
/*****************************************************************************
* Module descriptor
* Module descriptor
*****************************************************************************/
*****************************************************************************/
...
@@ -490,13 +492,25 @@ static void CopyPad( picture_t *p_dst, const picture_t *p_src )
...
@@ -490,13 +492,25 @@ static void CopyPad( picture_t *p_dst, const picture_t *p_src )
}
}
}
}
static
void
Convert
(
struct
SwsContext
*
ctx
,
static
void
Convert
(
filter_t
*
p_filter
,
struct
SwsContext
*
ctx
,
picture_t
*
p_dst
,
picture_t
*
p_src
,
int
i_height
,
int
i_plane_start
,
int
i_plane_count
)
picture_t
*
p_dst
,
picture_t
*
p_src
,
int
i_height
,
int
i_plane_start
,
int
i_plane_count
)
{
{
uint8_t
palette
[
AVPALETTE_SIZE
];
uint8_t
*
src
[
3
];
int
src_stride
[
3
];
uint8_t
*
src
[
3
];
int
src_stride
[
3
];
uint8_t
*
dst
[
3
];
int
dst_stride
[
3
];
uint8_t
*
dst
[
3
];
int
dst_stride
[
3
];
GetPixels
(
src
,
src_stride
,
p_src
,
i_plane_start
,
i_plane_count
);
GetPixels
(
src
,
src_stride
,
p_src
,
i_plane_start
,
i_plane_count
);
if
(
p_filter
->
fmt_in
.
video
.
i_chroma
==
VLC_FOURCC
(
'R'
,
'G'
,
'B'
,
'P'
)
)
{
memset
(
palette
,
0
,
sizeof
(
palette
)
);
if
(
p_filter
->
fmt_in
.
video
.
p_palette
)
memcpy
(
palette
,
p_filter
->
fmt_in
.
video
.
p_palette
->
palette
,
__MIN
(
sizeof
(
video_palette_t
),
AVPALETTE_SIZE
)
);
src
[
1
]
=
palette
;
src_stride
[
1
]
=
4
;
}
GetPixels
(
dst
,
dst_stride
,
p_dst
,
i_plane_start
,
i_plane_count
);
GetPixels
(
dst
,
dst_stride
,
p_dst
,
i_plane_start
,
i_plane_count
);
#if LIBSWSCALE_VERSION_INT >= ((0<<16)+(5<<8)+0)
#if LIBSWSCALE_VERSION_INT >= ((0<<16)+(5<<8)+0)
...
@@ -549,7 +563,7 @@ static picture_t *Filter( filter_t *p_filter, picture_t *p_pic )
...
@@ -549,7 +563,7 @@ static picture_t *Filter( filter_t *p_filter, picture_t *p_pic )
if
(
p_sys
->
b_copy
)
if
(
p_sys
->
b_copy
)
picture_CopyPixels
(
p_dst
,
p_src
);
picture_CopyPixels
(
p_dst
,
p_src
);
else
else
Convert
(
p_sys
->
ctx
,
p_dst
,
p_src
,
p_fmti
->
i_height
,
0
,
3
);
Convert
(
p_
filter
,
p_
sys
->
ctx
,
p_dst
,
p_src
,
p_fmti
->
i_height
,
0
,
3
);
if
(
p_sys
->
ctxA
)
if
(
p_sys
->
ctxA
)
{
{
/* We extract the A plane to rescale it, and then we reinject it. */
/* We extract the A plane to rescale it, and then we reinject it. */
...
@@ -558,7 +572,7 @@ static picture_t *Filter( filter_t *p_filter, picture_t *p_pic )
...
@@ -558,7 +572,7 @@ static picture_t *Filter( filter_t *p_filter, picture_t *p_pic )
else
else
plane_CopyPixels
(
p_sys
->
p_src_a
->
p
,
p_src
->
p
+
A_PLANE
);
plane_CopyPixels
(
p_sys
->
p_src_a
->
p
,
p_src
->
p
+
A_PLANE
);
Convert
(
p_sys
->
ctxA
,
p_sys
->
p_dst_a
,
p_sys
->
p_src_a
,
p_fmti
->
i_height
,
0
,
1
);
Convert
(
p_
filter
,
p_
sys
->
ctxA
,
p_sys
->
p_dst_a
,
p_sys
->
p_src_a
,
p_fmti
->
i_height
,
0
,
1
);
if
(
p_fmto
->
i_chroma
==
VLC_FOURCC
(
'R'
,
'G'
,
'B'
,
'A'
)
)
if
(
p_fmto
->
i_chroma
==
VLC_FOURCC
(
'R'
,
'G'
,
'B'
,
'A'
)
)
InjectA
(
p_dst
,
p_sys
->
p_dst_a
,
p_fmto
->
i_width
*
p_sys
->
i_extend_factor
,
p_fmto
->
i_height
);
InjectA
(
p_dst
,
p_sys
->
p_dst_a
,
p_fmto
->
i_width
*
p_sys
->
i_extend_factor
,
p_fmto
->
i_height
);
else
else
...
...
src/video_output/vout_pictures.c
View file @
27f77b04
...
@@ -645,6 +645,7 @@ void vout_InitFormat( video_frame_format_t *p_format, vlc_fourcc_t i_chroma,
...
@@ -645,6 +645,7 @@ void vout_InitFormat( video_frame_format_t *p_format, vlc_fourcc_t i_chroma,
case
FOURCC_GREY
:
case
FOURCC_GREY
:
case
FOURCC_Y800
:
case
FOURCC_Y800
:
case
FOURCC_Y8
:
case
FOURCC_Y8
:
case
FOURCC_RGBP
:
p_format
->
i_bits_per_pixel
=
8
;
p_format
->
i_bits_per_pixel
=
8
;
break
;
break
;
...
@@ -897,6 +898,7 @@ int __vout_InitPicture( vlc_object_t *p_this, picture_t *p_pic,
...
@@ -897,6 +898,7 @@ int __vout_InitPicture( vlc_object_t *p_this, picture_t *p_pic,
case
FOURCC_GREY
:
case
FOURCC_GREY
:
case
FOURCC_Y800
:
case
FOURCC_Y800
:
case
FOURCC_Y8
:
case
FOURCC_Y8
:
case
FOURCC_RGBP
:
p_pic
->
p
->
i_lines
=
i_height_aligned
;
p_pic
->
p
->
i_lines
=
i_height_aligned
;
p_pic
->
p
->
i_visible_lines
=
i_height
;
p_pic
->
p
->
i_visible_lines
=
i_height
;
p_pic
->
p
->
i_pitch
=
i_width_aligned
;
p_pic
->
p
->
i_pitch
=
i_width_aligned
;
...
@@ -987,6 +989,16 @@ int vout_ChromaCmp( vlc_fourcc_t i_chroma, vlc_fourcc_t i_amorhc )
...
@@ -987,6 +989,16 @@ int vout_ChromaCmp( vlc_fourcc_t i_chroma, vlc_fourcc_t i_amorhc )
return
0
;
return
0
;
}
}
case
FOURCC_RGBP
:
switch
(
i_amorhc
)
{
case
FOURCC_RGBP
:
return
1
;
default:
return
0
;
}
default:
default:
return
0
;
return
0
;
}
}
...
...
src/video_output/vout_pictures.h
View file @
27f77b04
...
@@ -104,6 +104,10 @@
...
@@ -104,6 +104,10 @@
/* Palettized YUV with palette element Y:U:V:A */
/* Palettized YUV with palette element Y:U:V:A */
#define FOURCC_YUVP VLC_FOURCC('Y','U','V','P')
#define FOURCC_YUVP VLC_FOURCC('Y','U','V','P')
/* Palettized RGB with palette element R:G:B */
#define FOURCC_RGBP VLC_FOURCC('R','G','B','P')
/* Planar 8-bit grayscale */
/* Planar 8-bit grayscale */
#define FOURCC_GREY VLC_FOURCC('G','R','E','Y')
#define FOURCC_GREY VLC_FOURCC('G','R','E','Y')
#define FOURCC_Y800 VLC_FOURCC('Y','8','0','0')
#define FOURCC_Y800 VLC_FOURCC('Y','8','0','0')
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment