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
e7cde2e6
Commit
e7cde2e6
authored
Aug 01, 2005
by
Christophe Massiot
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* src/misc/image.c: New image_Filter call to apply a filter on a picture_t
(for instance deinterlace filter).
parent
93aa4ffa
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
62 additions
and
6 deletions
+62
-6
include/vlc_image.h
include/vlc_image.h
+3
-0
src/misc/image.c
src/misc/image.c
+59
-6
No files found.
include/vlc_image.h
View file @
e7cde2e6
...
...
@@ -43,6 +43,8 @@ struct image_handler_t
picture_t
*
(
*
pf_convert
)
(
image_handler_t
*
,
picture_t
*
,
video_format_t
*
,
video_format_t
*
);
picture_t
*
(
*
pf_filter
)
(
image_handler_t
*
,
picture_t
*
,
video_format_t
*
,
const
char
*
);
/* Private properties */
vlc_object_t
*
p_parent
;
...
...
@@ -60,6 +62,7 @@ VLC_EXPORT( void, image_HandlerDelete, ( image_handler_t * ) );
#define image_Write( a, b, c, d ) a->pf_write( a, b, c, d )
#define image_WriteUrl( a, b, c, d, e ) a->pf_write_url( a, b, c, d, e )
#define image_Convert( a, b, c, d ) a->pf_convert( a, b, c, d )
#define image_Filter( a, b, c, d ) a->pf_filter( a, b, c, d )
# ifdef __cplusplus
}
...
...
src/misc/image.c
View file @
e7cde2e6
...
...
@@ -46,6 +46,8 @@ static int ImageWriteUrl( image_handler_t *, picture_t *,
static
picture_t
*
ImageConvert
(
image_handler_t
*
,
picture_t
*
,
video_format_t
*
,
video_format_t
*
);
static
picture_t
*
ImageFilter
(
image_handler_t
*
,
picture_t
*
,
video_format_t
*
,
const
char
*
psz_module
);
static
decoder_t
*
CreateDecoder
(
vlc_object_t
*
,
video_format_t
*
);
static
void
DeleteDecoder
(
decoder_t
*
);
...
...
@@ -53,7 +55,7 @@ static encoder_t *CreateEncoder( vlc_object_t *, video_format_t *,
video_format_t
*
);
static
void
DeleteEncoder
(
encoder_t
*
);
static
filter_t
*
CreateFilter
(
vlc_object_t
*
,
es_format_t
*
,
video_format_t
*
);
video_format_t
*
,
const
char
*
);
static
void
DeleteFilter
(
filter_t
*
);
static
vlc_fourcc_t
Ext2Fourcc
(
const
char
*
);
...
...
@@ -75,6 +77,7 @@ image_handler_t *__image_HandlerCreate( vlc_object_t *p_this )
p_image
->
pf_write
=
ImageWrite
;
p_image
->
pf_write_url
=
ImageWriteUrl
;
p_image
->
pf_convert
=
ImageConvert
;
p_image
->
pf_filter
=
ImageFilter
;
return
p_image
;
}
...
...
@@ -138,6 +141,13 @@ static picture_t *ImageRead( image_handler_t *p_image, block_t *p_block,
if
(
!
p_fmt_out
->
i_chroma
)
p_fmt_out
->
i_chroma
=
p_image
->
p_dec
->
fmt_out
.
video
.
i_chroma
;
if
(
!
p_fmt_out
->
i_width
&&
p_fmt_out
->
i_height
)
p_fmt_out
->
i_width
=
p_fmt_out
->
i_height
*
p_image
->
p_dec
->
fmt_out
.
video
.
i_aspect
/
VOUT_ASPECT_FACTOR
;
if
(
!
p_fmt_out
->
i_height
&&
p_fmt_out
->
i_width
)
p_fmt_out
->
i_height
=
p_fmt_out
->
i_width
*
VOUT_ASPECT_FACTOR
/
p_image
->
p_dec
->
fmt_out
.
video
.
i_aspect
;
if
(
!
p_fmt_out
->
i_width
)
p_fmt_out
->
i_width
=
p_image
->
p_dec
->
fmt_out
.
video
.
i_width
;
if
(
!
p_fmt_out
->
i_height
)
...
...
@@ -163,7 +173,7 @@ static picture_t *ImageRead( image_handler_t *p_image, block_t *p_block,
{
p_image
->
p_filter
=
CreateFilter
(
p_image
->
p_parent
,
&
p_image
->
p_dec
->
fmt_out
,
p_fmt_out
);
p_fmt_out
,
NULL
);
if
(
!
p_image
->
p_filter
)
{
...
...
@@ -282,7 +292,7 @@ static block_t *ImageWrite( image_handler_t *p_image, picture_t *p_pic,
p_image
->
p_filter
=
CreateFilter
(
p_image
->
p_parent
,
&
fmt_in
,
&
p_image
->
p_enc
->
fmt_in
.
video
);
&
p_image
->
p_enc
->
fmt_in
.
video
,
NULL
);
if
(
!
p_image
->
p_filter
)
{
...
...
@@ -402,7 +412,7 @@ static picture_t *ImageConvert( image_handler_t *p_image, picture_t *p_pic,
fmt_in
.
video
=
*
p_fmt_in
;
p_image
->
p_filter
=
CreateFilter
(
p_image
->
p_parent
,
&
fmt_in
,
p_fmt_out
);
CreateFilter
(
p_image
->
p_parent
,
&
fmt_in
,
p_fmt_out
,
NULL
);
if
(
!
p_image
->
p_filter
)
{
...
...
@@ -433,6 +443,47 @@ static picture_t *ImageConvert( image_handler_t *p_image, picture_t *p_pic,
return
p_pif
;
}
/**
* Filter an image with a psz_module filter
*
*/
static
picture_t
*
ImageFilter
(
image_handler_t
*
p_image
,
picture_t
*
p_pic
,
video_format_t
*
p_fmt
,
const
char
*
psz_module
)
{
void
(
*
pf_release
)(
picture_t
*
);
picture_t
*
p_pif
;
/* Start a filter */
if
(
!
p_image
->
p_filter
)
{
es_format_t
fmt
;
es_format_Init
(
&
fmt
,
VIDEO_ES
,
p_fmt
->
i_chroma
);
fmt
.
video
=
*
p_fmt
;
p_image
->
p_filter
=
CreateFilter
(
p_image
->
p_parent
,
&
fmt
,
&
fmt
.
video
,
psz_module
);
if
(
!
p_image
->
p_filter
)
{
return
NULL
;
}
}
else
{
/* Filters should handle on-the-fly size changes */
p_image
->
p_filter
->
fmt_in
.
video
=
*
p_fmt
;
p_image
->
p_filter
->
fmt_out
.
video
=
*
p_fmt
;
}
pf_release
=
p_pic
->
pf_release
;
p_pic
->
pf_release
=
PicRelease
;
/* Small hack */
p_pif
=
p_image
->
p_filter
->
pf_video_filter
(
p_image
->
p_filter
,
p_pic
);
p_pic
->
pf_release
=
pf_release
;
return
p_pif
;
}
/**
* Misc functions
*
...
...
@@ -681,7 +732,8 @@ static void DeleteEncoder( encoder_t * p_enc )
}
static
filter_t
*
CreateFilter
(
vlc_object_t
*
p_this
,
es_format_t
*
p_fmt_in
,
video_format_t
*
p_fmt_out
)
video_format_t
*
p_fmt_out
,
const
char
*
psz_module
)
{
filter_t
*
p_filter
;
...
...
@@ -697,7 +749,8 @@ static filter_t *CreateFilter( vlc_object_t *p_this, es_format_t *p_fmt_in,
p_filter
->
fmt_out
=
*
p_fmt_in
;
p_filter
->
fmt_out
.
i_codec
=
p_fmt_out
->
i_chroma
;
p_filter
->
fmt_out
.
video
=
*
p_fmt_out
;
p_filter
->
p_module
=
module_Need
(
p_filter
,
"video filter2"
,
0
,
0
);
p_filter
->
p_module
=
module_Need
(
p_filter
,
"video filter2"
,
psz_module
,
0
);
if
(
!
p_filter
->
p_module
)
{
...
...
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