Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Open sidebar
Steve Lhomme
VLC
Commits
bf68c0fe
Commit
bf68c0fe
authored
Oct 16, 2006
by
dionoea
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
noise video filter
parent
56fc9453
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
195 additions
and
2 deletions
+195
-2
configure.ac
configure.ac
+2
-2
modules/video_filter/Modules.am
modules/video_filter/Modules.am
+1
-0
modules/video_filter/noise.c
modules/video_filter/noise.c
+192
-0
No files found.
configure.ac
View file @
bf68c0fe
...
...
@@ -561,7 +561,7 @@ AM_CONDITIONAL(BUILD_GETOPT, ${need_getopt})
if test "${SYS}" != "mingw32" -a "${SYS}" != "mingwce"; then
AC_TYPE_SIGNAL
AC_CHECK_LIB(m,cos,[
VLC_ADD_LDFLAGS([adjust wave ripple psychedelic gradient a52tofloat32 dtstofloat32 x264 goom visual panoramix rotate],[-lm])
VLC_ADD_LDFLAGS([adjust wave ripple psychedelic gradient a52tofloat32 dtstofloat32 x264 goom visual panoramix rotate
noise
],[-lm])
])
AC_CHECK_LIB(m,pow,[
VLC_ADD_LDFLAGS([ffmpeg ffmpegaltivec stream_out_transrate i420_rgb faad twolame equalizer param_eq vlc freetype mpc dmo quicktime realaudio galaktos],[-lm])
...
...
@@ -1150,7 +1150,7 @@ dnl
VLC_ADD_PLUGINS([dummy logger memcpy])
VLC_ADD_PLUGINS([mpgv mpga m4v m4a h264 ps pva avi asf mp4 rawdv nsv real aiff mjpeg demuxdump flac])
VLC_ADD_PLUGINS([cvdsub svcdsub spudec subsdec dvbsub mpeg_audio lpcm a52 dts cinepak flacdec])
VLC_ADD_PLUGINS([deinterlace invert adjust transform wave ripple psychedelic gradient motionblur rv32 rotate])
VLC_ADD_PLUGINS([deinterlace invert adjust transform wave ripple psychedelic gradient motionblur rv32 rotate
noise
])
VLC_ADD_PLUGINS([fixed32tos16 s16tofixed32 u8tofixed32 mono])
VLC_ADD_PLUGINS([trivial_resampler ugly_resampler])
VLC_ADD_PLUGINS([trivial_channel_mixer trivial_mixer])
...
...
modules/video_filter/Modules.am
View file @
bf68c0fe
...
...
@@ -24,4 +24,5 @@ SOURCES_panoramix = panoramix.c
SOURCES_opencv_wrapper = opencv_wrapper.c
SOURCES_opencv_example = opencv_example.cpp filter_event_info.h
SOURCES_rotate = rotate.c
SOURCES_noise = noise.c
noinst_HEADERS = filter_common.h
modules/video_filter/noise.c
0 → 100644
View file @
bf68c0fe
/*****************************************************************************
* noise.c : "add noise to image" video filter
*****************************************************************************
* Copyright (C) 2000-2006 the VideoLAN team
* $Id$
*
* Authors: Antoine Cellerier <dionoea -at- videolan -dot- org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include <stdlib.h>
/* malloc(), free() */
#include <string.h>
#include <math.h>
/* sin(), cos() */
#include <vlc/vlc.h>
#include <vlc/decoder.h>
#include "vlc_filter.h"
/*****************************************************************************
* Local prototypes
*****************************************************************************/
static
int
Create
(
vlc_object_t
*
);
static
void
Destroy
(
vlc_object_t
*
);
static
picture_t
*
Filter
(
filter_t
*
,
picture_t
*
);
#define FILTER_PREFIX "noise-"
/*****************************************************************************
* Module descriptor
*****************************************************************************/
vlc_module_begin
();
set_description
(
_
(
"Noise video filter"
)
);
set_shortname
(
_
(
"Noise"
));
set_capability
(
"video filter2"
,
0
);
set_category
(
CAT_VIDEO
);
set_subcategory
(
SUBCAT_VIDEO_VFILTER
);
add_shortcut
(
"noise"
);
set_callbacks
(
Create
,
Destroy
);
vlc_module_end
();
static
const
char
*
ppsz_filter_options
[]
=
{
NULL
};
/*****************************************************************************
* vout_sys_t: Distort video output method descriptor
*****************************************************************************
* This structure is part of the video output thread descriptor.
* It describes the Distort specific properties of an output thread.
*****************************************************************************/
struct
filter_sys_t
{
mtime_t
last_date
;
};
/*****************************************************************************
* Create: allocates Distort video thread output method
*****************************************************************************
* This function allocates and initializes a Distort vout method.
*****************************************************************************/
static
int
Create
(
vlc_object_t
*
p_this
)
{
filter_t
*
p_filter
=
(
filter_t
*
)
p_this
;
/* Allocate structure */
p_filter
->
p_sys
=
malloc
(
sizeof
(
filter_sys_t
)
);
if
(
p_filter
->
p_sys
==
NULL
)
{
msg_Err
(
p_filter
,
"out of memory"
);
return
VLC_ENOMEM
;
}
config_ChainParse
(
p_filter
,
FILTER_PREFIX
,
ppsz_filter_options
,
p_filter
->
p_cfg
);
p_filter
->
pf_video_filter
=
Filter
;
p_filter
->
p_sys
->
last_date
=
0
;
return
VLC_SUCCESS
;
}
/*****************************************************************************
* Destroy: destroy Distort video thread output method
*****************************************************************************
* Terminate an output method created by DistortCreateOutputMethod
*****************************************************************************/
static
void
Destroy
(
vlc_object_t
*
p_this
)
{
filter_t
*
p_filter
=
(
filter_t
*
)
p_this
;
free
(
p_filter
->
p_sys
);
}
/*****************************************************************************
* Render: displays previously rendered output
*****************************************************************************
* This function send the currently rendered image to Distort image, waits
* until it is displayed and switch the two rendering buffers, preparing next
* frame.
*****************************************************************************/
static
picture_t
*
Filter
(
filter_t
*
p_filter
,
picture_t
*
p_pic
)
{
picture_t
*
p_outpic
;
filter_sys_t
*
p_sys
=
p_filter
->
p_sys
;
int
i_index
;
mtime_t
new_date
=
mdate
();
if
(
!
p_pic
)
return
NULL
;
p_outpic
=
p_filter
->
pf_vout_buffer_new
(
p_filter
);
if
(
!
p_outpic
)
{
msg_Warn
(
p_filter
,
"can't get output picture"
);
if
(
p_pic
->
pf_release
)
p_pic
->
pf_release
(
p_pic
);
return
NULL
;
}
p_sys
->
last_date
=
new_date
;
for
(
i_index
=
0
;
i_index
<
p_pic
->
i_planes
;
i_index
++
)
{
int
i_line
,
i_num_lines
,
i_col
,
i_num_cols
;
uint8_t
black_pixel
;
uint8_t
*
p_in
,
*
p_out
;
p_in
=
p_pic
->
p
[
i_index
].
p_pixels
;
p_out
=
p_outpic
->
p
[
i_index
].
p_pixels
;
i_num_lines
=
p_pic
->
p
[
i_index
].
i_visible_lines
;
i_num_cols
=
p_pic
->
p
[
i_index
].
i_visible_pitch
;
for
(
i_line
=
0
;
i_line
<
i_num_lines
;
i_line
++
)
{
if
(
rand
()
%
8
)
{
/* line isn't noisy */
p_filter
->
p_libvlc
->
pf_memcpy
(
p_out
+
i_line
*
i_num_cols
,
p_in
+
i_line
*
i_num_cols
,
i_num_cols
);
}
else
{
/* this line is noisy */
int
noise_level
=
rand
()
%
8
+
2
;
for
(
i_col
=
0
;
i_col
<
i_num_cols
;
i_col
++
)
{
if
(
rand
()
%
noise_level
)
{
p_out
[
i_line
*
i_num_cols
+
i_col
]
=
p_in
[
i_line
*
i_num_cols
+
i_col
];
}
else
{
p_out
[
i_line
*
i_num_cols
+
i_col
]
=
(
rand
()
%
3
)
*
0x7f
;
}
}
}
}
}
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
;
if
(
p_pic
->
pf_release
)
p_pic
->
pf_release
(
p_pic
);
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