Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-1.1
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-1.1
Commits
45cb9def
Commit
45cb9def
authored
Nov 16, 2003
by
Sam Hocevar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* modules/video_output/caca.c: color ASCII art video output using libcaca.
parent
dd6bbcec
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
204 additions
and
0 deletions
+204
-0
modules/video_output/Modules.am
modules/video_output/Modules.am
+1
-0
modules/video_output/caca.c
modules/video_output/caca.c
+203
-0
No files found.
modules/video_output/Modules.am
View file @
45cb9def
SOURCES_aa = aa.c
SOURCES_caca = caca.c
SOURCES_fb = fb.c
SOURCES_ggi = ggi.c
SOURCES_glide = glide.c
...
...
modules/video_output/caca.c
0 → 100644
View file @
45cb9def
/*****************************************************************************
* caca.c: Color ASCII Art video output plugin using libcaca
*****************************************************************************
* Copyright (C) 2003 VideoLAN
* $Id: caca.c,v 1.1 2003/11/16 22:29:33 sam Exp $
*
* Authors: Sam Hocevar <sam@zoy.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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include <errno.h>
/* ENOMEM */
#include <stdlib.h>
/* free() */
#include <string.h>
/* strerror() */
#include <caca.h>
#include <vlc/vlc.h>
#include <vlc/vout.h>
#include <vlc/intf.h>
#include <vlc_keys.h>
/*****************************************************************************
* Local prototypes
*****************************************************************************/
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
int
Manage
(
vout_thread_t
*
);
static
void
Render
(
vout_thread_t
*
,
picture_t
*
);
static
void
Display
(
vout_thread_t
*
,
picture_t
*
);
/*****************************************************************************
* Module descriptor
*****************************************************************************/
vlc_module_begin
();
set_description
(
_
(
"color ASCII art video output"
)
);
set_capability
(
"video output"
,
12
);
set_callbacks
(
Create
,
Destroy
);
vlc_module_end
();
/*****************************************************************************
* Create: allocates libcaca video output thread
*****************************************************************************
* This function initializes libcaca vout method.
*****************************************************************************/
static
int
Create
(
vlc_object_t
*
p_this
)
{
vout_thread_t
*
p_vout
=
(
vout_thread_t
*
)
p_this
;
if
(
caca_init
()
)
{
msg_Err
(
p_vout
,
"cannot initialize libcaca"
);
return
VLC_EGENERIC
;
}
caca_set_dithering
(
CACA_DITHER_RANDOM
);
p_vout
->
pf_init
=
Init
;
p_vout
->
pf_end
=
End
;
p_vout
->
pf_manage
=
Manage
;
p_vout
->
pf_render
=
Render
;
p_vout
->
pf_display
=
Display
;
return
VLC_SUCCESS
;
}
/*****************************************************************************
* Init: initialize libcaca video output thread
*****************************************************************************/
static
int
Init
(
vout_thread_t
*
p_vout
)
{
int
i_index
;
picture_t
*
p_pic
=
NULL
;
I_OUTPUTPICTURES
=
0
;
p_vout
->
output
.
i_chroma
=
VLC_FOURCC
(
'R'
,
'V'
,
'2'
,
'4'
);
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
->
output
.
i_rmask
=
0x00ff0000
;
p_vout
->
output
.
i_gmask
=
0x0000ff00
;
p_vout
->
output
.
i_bmask
=
0x000000ff
;
/* Find an empty picture slot */
for
(
i_index
=
0
;
i_index
<
VOUT_MAX_PICTURES
;
i_index
++
)
{
if
(
p_vout
->
p_picture
[
i_index
].
i_status
==
FREE_PICTURE
)
{
p_pic
=
p_vout
->
p_picture
+
i_index
;
break
;
}
}
if
(
p_pic
==
NULL
)
{
return
VLC_EGENERIC
;
}
/* Allocate the picture */
p_pic
->
p
->
i_lines
=
p_vout
->
output
.
i_height
;
p_pic
->
p
->
i_pitch
=
4
*
((
p_vout
->
output
.
i_width
+
15
)
&
~
15
);
p_pic
->
p
->
i_pixel_pitch
=
4
;
p_pic
->
p
->
i_visible_pitch
=
4
*
p_vout
->
output
.
i_width
;
p_pic
->
i_planes
=
1
;
p_pic
->
p
->
p_pixels
=
malloc
(
p_pic
->
p
->
i_pitch
*
p_pic
->
p
->
i_lines
);
p_pic
->
i_status
=
DESTROYED_PICTURE
;
p_pic
->
i_type
=
DIRECT_PICTURE
;
PP_OUTPUTPICTURE
[
I_OUTPUTPICTURES
]
=
p_pic
;
I_OUTPUTPICTURES
++
;
return
VLC_SUCCESS
;
}
/*****************************************************************************
* End: terminate libcaca video output thread
*****************************************************************************/
static
void
End
(
vout_thread_t
*
p_vout
)
{
return
;
}
/*****************************************************************************
* Destroy: destroy libcaca video output thread
*****************************************************************************
* Terminate an output method created by AaCreateOutputMethod
*****************************************************************************/
static
void
Destroy
(
vlc_object_t
*
p_this
)
{
caca_end
();
}
/*****************************************************************************
* Manage: handle libcaca events
*****************************************************************************
* This function should be called regularly by video output thread. It manages
* console events. It returns a non null value on error.
*****************************************************************************/
static
int
Manage
(
vout_thread_t
*
p_vout
)
{
int
key
;
vlc_value_t
val
;
while
((
key
=
caca_get_key
()
))
{
switch
(
key
)
{
case
'q'
:
val
.
i_int
=
KEY_MODIFIER_CTRL
|
'q'
;
break
;
case
' '
:
val
.
i_int
=
KEY_SPACE
;
break
;
default:
continue
;
}
var_Set
(
p_vout
->
p_vlc
,
"key-pressed"
,
val
);
}
return
VLC_SUCCESS
;
}
/*****************************************************************************
* Render: render previously calculated output
*****************************************************************************/
static
void
Render
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
)
{
caca_clear
();
caca_blit
(
0
,
0
,
caca_get_width
()
-
1
,
caca_get_height
()
-
1
,
p_pic
->
p
->
p_pixels
,
p_vout
->
output
.
i_width
,
p_vout
->
output
.
i_height
);
}
/*****************************************************************************
* Display: displays previously rendered output
*****************************************************************************/
static
void
Display
(
vout_thread_t
*
p_vout
,
picture_t
*
p_pic
)
{
caca_refresh
();
}
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