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
8777d28f
Commit
8777d28f
authored
Jul 14, 2006
by
Antoine Cellerier
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Invert is now a "video filter2"
parent
ae0b191d
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
33 additions
and
135 deletions
+33
-135
modules/video_filter/invert.c
modules/video_filter/invert.c
+33
-135
No files found.
modules/video_filter/invert.c
View file @
8777d28f
/*****************************************************************************
* invert.c : Invert video plugin for vlc
*****************************************************************************
* Copyright (C) 2000
, 2001, 2002, 2003
the VideoLAN team
* Copyright (C) 2000
-2006
the VideoLAN team
* $Id$
*
* Authors: Samuel Hocevar <sam@zoy.org>
...
...
@@ -28,22 +28,18 @@
#include <string.h>
#include <vlc/vlc.h>
#include <vlc/vout.h>
#include <vlc/sout.h>
#include <vlc/decoder.h>
#include "
filter_common
.h"
#include "
vlc_filter
.h"
/*****************************************************************************
* Local prototypes
*****************************************************************************/
static
int
Create
(
vlc_object_t
*
);
static
void
Destroy
(
vlc_object_t
*
);
static
int
Create
(
vlc_object_t
*
);
static
void
Destroy
(
vlc_object_t
*
);
static
int
Init
(
vout_thread_t
*
);
static
void
End
(
vout_thread_t
*
);
static
void
Render
(
vout_thread_t
*
,
picture_t
*
);
static
int
SendEvents
(
vlc_object_t
*
,
char
const
*
,
vlc_value_t
,
vlc_value_t
,
void
*
);
static
picture_t
*
Filter
(
filter_t
*
,
picture_t
*
);
/*****************************************************************************
* Module descriptor
...
...
@@ -52,8 +48,8 @@ vlc_module_begin();
set_description
(
_
(
"Invert video filter"
)
);
set_shortname
(
N_
(
"Color inversion"
));
set_category
(
CAT_VIDEO
);
set_subcategory
(
SUBCAT_VIDEO_VFILTER
);
set_capability
(
"video filter"
,
0
);
set_subcategory
(
SUBCAT_VIDEO_VFILTER
2
);
set_capability
(
"video filter
2
"
,
0
);
add_shortcut
(
"invert"
);
set_callbacks
(
Create
,
Destroy
);
vlc_module_end
();
...
...
@@ -64,19 +60,10 @@ vlc_module_end();
* This structure is part of the video output thread descriptor.
* It describes the Invert specific properties of an output thread.
*****************************************************************************/
struct
vout
_sys_t
struct
filter
_sys_t
{
vout_thread_t
*
p_vout
;
};
/*****************************************************************************
* Control: control facility for the vout (forwards to child vout)
*****************************************************************************/
static
int
Control
(
vout_thread_t
*
p_vout
,
int
i_query
,
va_list
args
)
{
return
vout_vaControl
(
p_vout
->
p_sys
->
p_vout
,
i_query
,
args
);
}
/*****************************************************************************
* Create: allocates Invert video thread output method
*****************************************************************************
...
...
@@ -84,82 +71,21 @@ static int Control( vout_thread_t *p_vout, int i_query, va_list args )
*****************************************************************************/
static
int
Create
(
vlc_object_t
*
p_this
)
{
vout_thread_t
*
p_vout
=
(
vout_thread
_t
*
)
p_this
;
filter_t
*
p_filter
=
(
filter
_t
*
)
p_this
;
/* Allocate structure */
p_
vout
->
p_sys
=
malloc
(
sizeof
(
vout
_sys_t
)
);
if
(
p_
vout
->
p_sys
==
NULL
)
p_
filter
->
p_sys
=
malloc
(
sizeof
(
filter
_sys_t
)
);
if
(
p_
filter
->
p_sys
==
NULL
)
{
msg_Err
(
p_
vout
,
"out of memory"
);
msg_Err
(
p_
filter
,
"out of memory"
);
return
VLC_ENOMEM
;
}
p_vout
->
pf_init
=
Init
;
p_vout
->
pf_end
=
End
;
p_vout
->
pf_manage
=
NULL
;
p_vout
->
pf_render
=
Render
;
p_vout
->
pf_display
=
NULL
;
p_vout
->
pf_control
=
Control
;
p_filter
->
pf_video_filter
=
Filter
;
return
VLC_SUCCESS
;
}
/*****************************************************************************
* Init: initialize Invert video thread output method
*****************************************************************************/
static
int
Init
(
vout_thread_t
*
p_vout
)
{
int
i_index
;
picture_t
*
p_pic
;
video_format_t
fmt
=
{
0
};
I_OUTPUTPICTURES
=
0
;
/* Initialize the output structure */
p_vout
->
output
.
i_chroma
=
p_vout
->
render
.
i_chroma
;
p_vout
->
output
.
i_width
=
p_vout
->
render
.
i_width
;
p_vout
->
output
.
i_height
=
p_vout
->
render
.
i_height
;
p_vout
->
output
.
i_aspect
=
p_vout
->
render
.
i_aspect
;
p_vout
->
fmt_out
=
p_vout
->
fmt_in
;
fmt
=
p_vout
->
fmt_out
;
/* Try to open the real video output */
msg_Dbg
(
p_vout
,
"spawning the real video output"
);
p_vout
->
p_sys
->
p_vout
=
vout_Create
(
p_vout
,
&
fmt
);
/* Everything failed */
if
(
p_vout
->
p_sys
->
p_vout
==
NULL
)
{
msg_Err
(
p_vout
,
"can't open vout, aborting"
);
return
VLC_EGENERIC
;
}
ALLOCATE_DIRECTBUFFERS
(
VOUT_MAX_PICTURES
);
ADD_CALLBACKS
(
p_vout
->
p_sys
->
p_vout
,
SendEvents
);
ADD_PARENT_CALLBACKS
(
SendEventsToChild
);
return
VLC_SUCCESS
;
}
/*****************************************************************************
* End: terminate Invert video thread output method
*****************************************************************************/
static
void
End
(
vout_thread_t
*
p_vout
)
{
int
i_index
;
/* Free the fake output buffers we allocated */
for
(
i_index
=
I_OUTPUTPICTURES
;
i_index
;
)
{
i_index
--
;
free
(
PP_OUTPUTPICTURE
[
i_index
]
->
p_data_orig
);
}
}
/*****************************************************************************
* Destroy: destroy Invert video thread output method
*****************************************************************************
...
...
@@ -167,18 +93,9 @@ static void End( vout_thread_t *p_vout )
*****************************************************************************/
static
void
Destroy
(
vlc_object_t
*
p_this
)
{
vout_thread_t
*
p_vout
=
(
vout_thread
_t
*
)
p_this
;
filter_t
*
p_filter
=
(
filter
_t
*
)
p_this
;
if
(
p_vout
->
p_sys
->
p_vout
)
{
DEL_CALLBACKS
(
p_vout
->
p_sys
->
p_vout
,
SendEvents
);
vlc_object_detach
(
p_vout
->
p_sys
->
p_vout
);
vout_Destroy
(
p_vout
->
p_sys
->
p_vout
);
}
DEL_PARENT_CALLBACKS
(
SendEventsToChild
);
free
(
p_vout
->
p_sys
);
free
(
p_filter
->
p_sys
);
}
/*****************************************************************************
...
...
@@ -188,25 +105,22 @@ static void Destroy( vlc_object_t *p_this )
* until it is displayed and switch the two rendering buffers, preparing next
* frame.
*****************************************************************************/
static
void
Render
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
)
static
picture_t
*
Filter
(
filter_t
*
p_filter
,
picture_t
*
p_pic
)
{
picture_t
*
p_outpic
;
int
i_index
;
/* This is a new frame. Get a structure from the video_output. */
while
(
(
p_outpic
=
vout_CreatePicture
(
p_vout
->
p_sys
->
p_vout
,
0
,
0
,
0
)
)
==
NULL
)
if
(
!
p_pic
)
return
NULL
;
p_outpic
=
p_filter
->
pf_vout_buffer_new
(
p_filter
);
if
(
!
p_outpic
)
{
if
(
p_vout
->
b_die
||
p_vout
->
b_error
)
{
return
;
}
msleep
(
VOUT_OUTMEM_SLEEP
);
msg_Warn
(
p_filter
,
"can't get output picture"
);
if
(
p_pic
->
pf_release
)
p_pic
->
pf_release
(
p_pic
);
return
NULL
;
}
vout_DatePicture
(
p_vout
->
p_sys
->
p_vout
,
p_outpic
,
p_pic
->
date
);
vout_LinkPicture
(
p_vout
->
p_sys
->
p_vout
,
p_outpic
);
for
(
i_index
=
0
;
i_index
<
p_pic
->
i_planes
;
i_index
++
)
{
uint8_t
*
p_in
,
*
p_in_end
,
*
p_line_end
,
*
p_out
;
...
...
@@ -251,29 +165,13 @@ static void Render( vout_thread_t *p_vout, picture_t *p_pic )
}
}
vout_UnlinkPicture
(
p_vout
->
p_sys
->
p_vout
,
p_outpic
);
p_outpic
->
date
=
p_pic
->
date
;
p_outpic
->
b_force
=
p_pic
->
b_force
;
p_outpic
->
i_nb_fields
=
p_pic
->
i_nb_fields
;
p_outpic
->
b_progressive
=
p_pic
->
b_progressive
;
p_outpic
->
b_top_field_first
=
p_pic
->
b_top_field_first
;
vout_DisplayPicture
(
p_vout
->
p_sys
->
p_vout
,
p_outpic
);
}
p_pic
->
pf_release
(
p_pic
);
/*****************************************************************************
* SendEvents: forward mouse and keyboard events to the parent p_vout
*****************************************************************************/
static
int
SendEvents
(
vlc_object_t
*
p_this
,
char
const
*
psz_var
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
)
{
var_Set
(
(
vlc_object_t
*
)
p_data
,
psz_var
,
newval
);
return
VLC_SUCCESS
;
}
/*****************************************************************************
* SendEventsToChild: forward events to the child/children vout
*****************************************************************************/
static
int
SendEventsToChild
(
vlc_object_t
*
p_this
,
char
const
*
psz_var
,
vlc_value_t
oldval
,
vlc_value_t
newval
,
void
*
p_data
)
{
vout_thread_t
*
p_vout
=
(
vout_thread_t
*
)
p_this
;
var_Set
(
p_vout
->
p_sys
->
p_vout
,
psz_var
,
newval
);
return
VLC_SUCCESS
;
return
p_outpic
;
}
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