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
f102b577
Commit
f102b577
authored
Sep 11, 2007
by
Rafaël Carré
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Same for lxdialog and xvmc
parent
d6008a8b
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
1841 additions
and
1841 deletions
+1841
-1841
lxdialog/checklist.c
lxdialog/checklist.c
+184
-184
lxdialog/dialog.h
lxdialog/dialog.h
+8
-8
lxdialog/inputbox.c
lxdialog/inputbox.c
+132
-132
lxdialog/lxdialog.c
lxdialog/lxdialog.c
+41
-41
lxdialog/menubox.c
lxdialog/menubox.c
+147
-147
lxdialog/msgbox.c
lxdialog/msgbox.c
+23
-23
lxdialog/textbox.c
lxdialog/textbox.c
+350
-350
lxdialog/util.c
lxdialog/util.c
+128
-128
lxdialog/yesno.c
lxdialog/yesno.c
+38
-38
modules/codec/xvmc/cpu_accel.c
modules/codec/xvmc/cpu_accel.c
+4
-4
modules/codec/xvmc/decode.c
modules/codec/xvmc/decode.c
+1
-1
modules/codec/xvmc/header.c
modules/codec/xvmc/header.c
+9
-9
modules/codec/xvmc/motion_comp.c
modules/codec/xvmc/motion_comp.c
+41
-41
modules/codec/xvmc/motion_comp_mmx.c
modules/codec/xvmc/motion_comp_mmx.c
+188
-188
modules/codec/xvmc/mpeg2.h
modules/codec/xvmc/mpeg2.h
+6
-6
modules/codec/xvmc/mpeg2_internal.h
modules/codec/xvmc/mpeg2_internal.h
+5
-5
modules/codec/xvmc/slice.c
modules/codec/xvmc/slice.c
+510
-510
modules/codec/xvmc/slice_xvmc_vld.c
modules/codec/xvmc/slice_xvmc_vld.c
+3
-3
modules/codec/xvmc/vlc.h
modules/codec/xvmc/vlc.h
+16
-16
modules/codec/xvmc/xxmc-config.h
modules/codec/xvmc/xxmc-config.h
+5
-5
modules/codec/xvmc/xxmc.c
modules/codec/xvmc/xxmc.c
+2
-2
No files found.
lxdialog/checklist.c
View file @
f102b577
...
@@ -30,7 +30,7 @@ static int list_width, check_x, item_x, checkflag;
...
@@ -30,7 +30,7 @@ static int list_width, check_x, item_x, checkflag;
*/
*/
static
void
static
void
print_item
(
WINDOW
*
win
,
const
char
*
item
,
int
status
,
print_item
(
WINDOW
*
win
,
const
char
*
item
,
int
status
,
int
choice
,
int
selected
)
int
choice
,
int
selected
)
{
{
int
i
;
int
i
;
...
@@ -38,22 +38,22 @@ print_item (WINDOW * win, const char *item, int status,
...
@@ -38,22 +38,22 @@ print_item (WINDOW * win, const char *item, int status,
wattrset
(
win
,
menubox_attr
);
wattrset
(
win
,
menubox_attr
);
wmove
(
win
,
choice
,
0
);
wmove
(
win
,
choice
,
0
);
for
(
i
=
0
;
i
<
list_width
;
i
++
)
for
(
i
=
0
;
i
<
list_width
;
i
++
)
waddch
(
win
,
' '
);
waddch
(
win
,
' '
);
wmove
(
win
,
choice
,
check_x
);
wmove
(
win
,
choice
,
check_x
);
wattrset
(
win
,
selected
?
check_selected_attr
:
check_attr
);
wattrset
(
win
,
selected
?
check_selected_attr
:
check_attr
);
if
(
checkflag
==
FLAG_CHECK
)
if
(
checkflag
==
FLAG_CHECK
)
wprintw
(
win
,
"[%c]"
,
status
?
'X'
:
' '
);
wprintw
(
win
,
"[%c]"
,
status
?
'X'
:
' '
);
else
else
wprintw
(
win
,
"(%c)"
,
status
?
'X'
:
' '
);
wprintw
(
win
,
"(%c)"
,
status
?
'X'
:
' '
);
wattrset
(
win
,
selected
?
tag_selected_attr
:
tag_attr
);
wattrset
(
win
,
selected
?
tag_selected_attr
:
tag_attr
);
mvwaddch
(
win
,
choice
,
item_x
,
item
[
0
]);
mvwaddch
(
win
,
choice
,
item_x
,
item
[
0
]);
wattrset
(
win
,
selected
?
item_selected_attr
:
item_attr
);
wattrset
(
win
,
selected
?
item_selected_attr
:
item_attr
);
waddstr
(
win
,
(
char
*
)
item
+
1
);
waddstr
(
win
,
(
char
*
)
item
+
1
);
if
(
selected
)
{
if
(
selected
)
{
wmove
(
win
,
choice
,
check_x
+
1
);
wmove
(
win
,
choice
,
check_x
+
1
);
wrefresh
(
win
);
wrefresh
(
win
);
}
}
}
}
...
@@ -62,37 +62,37 @@ print_item (WINDOW * win, const char *item, int status,
...
@@ -62,37 +62,37 @@ print_item (WINDOW * win, const char *item, int status,
*/
*/
static
void
static
void
print_arrows
(
WINDOW
*
win
,
int
choice
,
int
item_no
,
int
scroll
,
print_arrows
(
WINDOW
*
win
,
int
choice
,
int
item_no
,
int
scroll
,
int
y
,
int
x
,
int
height
)
int
y
,
int
x
,
int
height
)
{
{
wmove
(
win
,
y
,
x
);
wmove
(
win
,
y
,
x
);
if
(
scroll
>
0
)
{
if
(
scroll
>
0
)
{
wattrset
(
win
,
uarrow_attr
);
wattrset
(
win
,
uarrow_attr
);
waddch
(
win
,
ACS_UARROW
);
waddch
(
win
,
ACS_UARROW
);
waddstr
(
win
,
"(-)"
);
waddstr
(
win
,
"(-)"
);
}
}
else
{
else
{
wattrset
(
win
,
menubox_attr
);
wattrset
(
win
,
menubox_attr
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
}
}
y
=
y
+
height
+
1
;
y
=
y
+
height
+
1
;
wmove
(
win
,
y
,
x
);
wmove
(
win
,
y
,
x
);
if
((
height
<
item_no
)
&&
(
scroll
+
choice
<
item_no
-
1
))
{
if
((
height
<
item_no
)
&&
(
scroll
+
choice
<
item_no
-
1
))
{
wattrset
(
win
,
darrow_attr
);
wattrset
(
win
,
darrow_attr
);
waddch
(
win
,
ACS_DARROW
);
waddch
(
win
,
ACS_DARROW
);
waddstr
(
win
,
"(+)"
);
waddstr
(
win
,
"(+)"
);
}
}
else
{
else
{
wattrset
(
win
,
menubox_border_attr
);
wattrset
(
win
,
menubox_border_attr
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
}
}
}
}
...
@@ -118,8 +118,8 @@ print_buttons( WINDOW *dialog, int height, int width, int selected)
...
@@ -118,8 +118,8 @@ print_buttons( WINDOW *dialog, int height, int width, int selected)
*/
*/
int
int
dialog_checklist
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
width
,
dialog_checklist
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
width
,
int
list_height
,
int
item_no
,
const
char
*
const
*
items
,
int
flag
)
int
list_height
,
int
item_no
,
const
char
*
const
*
items
,
int
flag
)
{
{
int
i
,
x
,
y
,
box_x
,
box_y
;
int
i
,
x
,
y
,
box_x
,
box_y
;
int
key
=
0
,
button
=
0
,
choice
=
0
,
scroll
=
0
,
max_choice
,
*
status
;
int
key
=
0
,
button
=
0
,
choice
=
0
,
scroll
=
0
,
max_choice
,
*
status
;
...
@@ -129,16 +129,16 @@ dialog_checklist (const char *title, const char *prompt, int height, int width,
...
@@ -129,16 +129,16 @@ dialog_checklist (const char *title, const char *prompt, int height, int width,
/* Allocate space for storing item on/off status */
/* Allocate space for storing item on/off status */
if
((
status
=
malloc
(
sizeof
(
int
)
*
item_no
))
==
NULL
)
{
if
((
status
=
malloc
(
sizeof
(
int
)
*
item_no
))
==
NULL
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
fprintf
(
stderr
,
"
\n
Can't allocate memory in dialog_checklist().
\n
"
);
"
\n
Can't allocate memory in dialog_checklist().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
/* Initializes status */
/* Initializes status */
for
(
i
=
0
;
i
<
item_no
;
i
++
)
{
for
(
i
=
0
;
i
<
item_no
;
i
++
)
{
status
[
i
]
=
!
strcasecmp
(
items
[
i
*
3
+
2
],
"on"
);
status
[
i
]
=
!
strcasecmp
(
items
[
i
*
3
+
2
],
"on"
);
if
(
!
choice
&&
status
[
i
])
if
(
!
choice
&&
status
[
i
])
choice
=
i
;
choice
=
i
;
}
}
...
@@ -157,23 +157,23 @@ dialog_checklist (const char *title, const char *prompt, int height, int width,
...
@@ -157,23 +157,23 @@ dialog_checklist (const char *title, const char *prompt, int height, int width,
wattrset
(
dialog
,
border_attr
);
wattrset
(
dialog
,
border_attr
);
mvwaddch
(
dialog
,
height
-
3
,
0
,
ACS_LTEE
);
mvwaddch
(
dialog
,
height
-
3
,
0
,
ACS_LTEE
);
for
(
i
=
0
;
i
<
width
-
2
;
i
++
)
for
(
i
=
0
;
i
<
width
-
2
;
i
++
)
waddch
(
dialog
,
ACS_HLINE
);
waddch
(
dialog
,
ACS_HLINE
);
wattrset
(
dialog
,
dialog_attr
);
wattrset
(
dialog
,
dialog_attr
);
waddch
(
dialog
,
ACS_RTEE
);
waddch
(
dialog
,
ACS_RTEE
);
if
(
title
!=
NULL
&&
strlen
(
title
)
>=
width
-
2
)
{
if
(
title
!=
NULL
&&
strlen
(
title
)
>=
width
-
2
)
{
/* truncate long title -- mec */
/* truncate long title -- mec */
char
*
title2
=
malloc
(
width
-
2
+
1
);
char
*
title2
=
malloc
(
width
-
2
+
1
);
memcpy
(
title2
,
title
,
width
-
2
);
memcpy
(
title2
,
title
,
width
-
2
);
title2
[
width
-
2
]
=
'\0'
;
title2
[
width
-
2
]
=
'\0'
;
title
=
title2
;
title
=
title2
;
}
}
if
(
title
!=
NULL
)
{
if
(
title
!=
NULL
)
{
wattrset
(
dialog
,
title_attr
);
wattrset
(
dialog
,
title_attr
);
mvwaddch
(
dialog
,
0
,
(
width
-
strlen
(
title
))
/
2
-
1
,
' '
);
mvwaddch
(
dialog
,
0
,
(
width
-
strlen
(
title
))
/
2
-
1
,
' '
);
waddstr
(
dialog
,
(
char
*
)
title
);
waddstr
(
dialog
,
(
char
*
)
title
);
waddch
(
dialog
,
' '
);
waddch
(
dialog
,
' '
);
}
}
wattrset
(
dialog
,
dialog_attr
);
wattrset
(
dialog
,
dialog_attr
);
...
@@ -190,29 +190,29 @@ dialog_checklist (const char *title, const char *prompt, int height, int width,
...
@@ -190,29 +190,29 @@ dialog_checklist (const char *title, const char *prompt, int height, int width,
/* draw a box around the list items */
/* draw a box around the list items */
draw_box
(
dialog
,
box_y
,
box_x
,
list_height
+
2
,
list_width
+
2
,
draw_box
(
dialog
,
box_y
,
box_x
,
list_height
+
2
,
list_width
+
2
,
menubox_border_attr
,
menubox_attr
);
menubox_border_attr
,
menubox_attr
);
/* Find length of longest item in order to center checklist */
/* Find length of longest item in order to center checklist */
check_x
=
0
;
check_x
=
0
;
for
(
i
=
0
;
i
<
item_no
;
i
++
)
for
(
i
=
0
;
i
<
item_no
;
i
++
)
check_x
=
MAX
(
check_x
,
+
strlen
(
items
[
i
*
3
+
1
])
+
4
);
check_x
=
MAX
(
check_x
,
+
strlen
(
items
[
i
*
3
+
1
])
+
4
);
check_x
=
(
list_width
-
check_x
)
/
2
;
check_x
=
(
list_width
-
check_x
)
/
2
;
item_x
=
check_x
+
4
;
item_x
=
check_x
+
4
;
if
(
choice
>=
list_height
)
{
if
(
choice
>=
list_height
)
{
scroll
=
choice
-
list_height
+
1
;
scroll
=
choice
-
list_height
+
1
;
choice
-=
scroll
;
choice
-=
scroll
;
}
}
/* Print the list */
/* Print the list */
for
(
i
=
0
;
i
<
max_choice
;
i
++
)
{
for
(
i
=
0
;
i
<
max_choice
;
i
++
)
{
print_item
(
list
,
items
[(
scroll
+
i
)
*
3
+
1
],
print_item
(
list
,
items
[(
scroll
+
i
)
*
3
+
1
],
status
[
i
+
scroll
],
i
,
i
==
choice
);
status
[
i
+
scroll
],
i
,
i
==
choice
);
}
}
print_arrows
(
dialog
,
choice
,
item_no
,
scroll
,
print_arrows
(
dialog
,
choice
,
item_no
,
scroll
,
box_y
,
box_x
+
check_x
+
5
,
list_height
);
box_y
,
box_x
+
check_x
+
5
,
list_height
);
print_buttons
(
dialog
,
height
,
width
,
0
);
print_buttons
(
dialog
,
height
,
width
,
0
);
...
@@ -221,149 +221,149 @@ dialog_checklist (const char *title, const char *prompt, int height, int width,
...
@@ -221,149 +221,149 @@ dialog_checklist (const char *title, const char *prompt, int height, int width,
doupdate
();
doupdate
();
while
(
key
!=
ESC
)
{
while
(
key
!=
ESC
)
{
key
=
wgetch
(
dialog
);
key
=
wgetch
(
dialog
);
for
(
i
=
0
;
i
<
max_choice
;
i
++
)
for
(
i
=
0
;
i
<
max_choice
;
i
++
)
if
(
toupper
(
key
)
==
toupper
(
items
[(
scroll
+
i
)
*
3
+
1
][
0
]))
if
(
toupper
(
key
)
==
toupper
(
items
[(
scroll
+
i
)
*
3
+
1
][
0
]))
break
;
break
;
if
(
i
<
max_choice
||
key
==
KEY_UP
||
key
==
KEY_DOWN
||
if
(
i
<
max_choice
||
key
==
KEY_UP
||
key
==
KEY_DOWN
||
key
==
'+'
||
key
==
'-'
)
{
key
==
'+'
||
key
==
'-'
)
{
if
(
key
==
KEY_UP
||
key
==
'-'
)
{
if
(
key
==
KEY_UP
||
key
==
'-'
)
{
if
(
!
choice
)
{
if
(
!
choice
)
{
if
(
!
scroll
)
if
(
!
scroll
)
continue
;
continue
;
/* Scroll list down */
/* Scroll list down */
if
(
list_height
>
1
)
{
if
(
list_height
>
1
)
{
/* De-highlight current first item */
/* De-highlight current first item */
print_item
(
list
,
items
[
scroll
*
3
+
1
],
print_item
(
list
,
items
[
scroll
*
3
+
1
],
status
[
scroll
],
0
,
FALSE
);
status
[
scroll
],
0
,
FALSE
);
scrollok
(
list
,
TRUE
);
scrollok
(
list
,
TRUE
);
wscrl
(
list
,
-
1
);
wscrl
(
list
,
-
1
);
scrollok
(
list
,
FALSE
);
scrollok
(
list
,
FALSE
);
}
scroll
--
;
print_item
(
list
,
items
[
scroll
*
3
+
1
],
status
[
scroll
],
0
,
TRUE
);
wnoutrefresh
(
list
);
print_arrows
(
dialog
,
choice
,
item_no
,
scroll
,
box_y
,
box_x
+
check_x
+
5
,
list_height
);
wrefresh
(
dialog
);
continue
;
/* wait for another key press */
}
else
i
=
choice
-
1
;
}
else
if
(
key
==
KEY_DOWN
||
key
==
'+'
)
{
if
(
choice
==
max_choice
-
1
)
{
if
(
scroll
+
choice
>=
item_no
-
1
)
continue
;
/* Scroll list up */
if
(
list_height
>
1
)
{
/* De-highlight current last item before scrolling up */
print_item
(
list
,
items
[(
scroll
+
max_choice
-
1
)
*
3
+
1
],
status
[
scroll
+
max_choice
-
1
],
max_choice
-
1
,
FALSE
);
scrollok
(
list
,
TRUE
);
scroll
(
list
);
scrollok
(
list
,
FALSE
);
}
scroll
++
;
print_item
(
list
,
items
[(
scroll
+
max_choice
-
1
)
*
3
+
1
],
status
[
scroll
+
max_choice
-
1
],
max_choice
-
1
,
TRUE
);
wnoutrefresh
(
list
);
print_arrows
(
dialog
,
choice
,
item_no
,
scroll
,
box_y
,
box_x
+
check_x
+
5
,
list_height
);
wrefresh
(
dialog
);
continue
;
/* wait for another key press */
}
else
i
=
choice
+
1
;
}
if
(
i
!=
choice
)
{
/* De-highlight current item */
print_item
(
list
,
items
[(
scroll
+
choice
)
*
3
+
1
],
status
[
scroll
+
choice
],
choice
,
FALSE
);
/* Highlight new item */
choice
=
i
;
print_item
(
list
,
items
[(
scroll
+
choice
)
*
3
+
1
],
status
[
scroll
+
choice
],
choice
,
TRUE
);
wnoutrefresh
(
list
);
wrefresh
(
dialog
);
}
continue
;
/* wait for another key press */
}
switch
(
key
)
{
case
'H'
:
case
'h'
:
case
'?'
:
delwin
(
dialog
);
free
(
status
);
return
1
;
case
TAB
:
case
KEY_LEFT
:
case
KEY_RIGHT
:
button
=
((
key
==
KEY_LEFT
?
--
button
:
++
button
)
<
0
)
?
1
:
(
button
>
1
?
0
:
button
);
print_buttons
(
dialog
,
height
,
width
,
button
);
wrefresh
(
dialog
);
break
;
case
'S'
:
case
's'
:
case
' '
:
case
'\n'
:
if
(
!
button
)
{
if
(
flag
==
FLAG_CHECK
)
{
status
[
scroll
+
choice
]
=
!
status
[
scroll
+
choice
];
wmove
(
list
,
choice
,
check_x
);
wattrset
(
list
,
check_selected_attr
);
wprintw
(
list
,
"[%c]"
,
status
[
scroll
+
choice
]
?
'X'
:
' '
);
}
else
{
if
(
!
status
[
scroll
+
choice
])
{
for
(
i
=
0
;
i
<
item_no
;
i
++
)
status
[
i
]
=
0
;
status
[
scroll
+
choice
]
=
1
;
for
(
i
=
0
;
i
<
max_choice
;
i
++
)
print_item
(
list
,
items
[(
scroll
+
i
)
*
3
+
1
],
status
[
scroll
+
i
],
i
,
i
==
choice
);
}
}
wnoutrefresh
(
list
);
wrefresh
(
dialog
);
for
(
i
=
0
;
i
<
item_no
;
i
++
)
{
if
(
status
[
i
])
{
if
(
flag
==
FLAG_CHECK
)
{
fprintf
(
stderr
,
"
\"
%s
\"
"
,
items
[
i
*
3
]);
}
else
{
fprintf
(
stderr
,
"%s"
,
items
[
i
*
3
]);
}
}
}
}
}
scroll
--
;
delwin
(
dialog
);
print_item
(
list
,
items
[
scroll
*
3
+
1
],
free
(
status
);
status
[
scroll
],
0
,
TRUE
);
return
button
;
wnoutrefresh
(
list
);
case
'X'
:
case
'x'
:
print_arrows
(
dialog
,
choice
,
item_no
,
scroll
,
key
=
ESC
;
box_y
,
box_x
+
check_x
+
5
,
list_height
);
case
ESC
:
break
;
wrefresh
(
dialog
);
}
continue
;
/* wait for another key press */
/* Now, update everything... */
}
else
doupdate
();
i
=
choice
-
1
;
}
else
if
(
key
==
KEY_DOWN
||
key
==
'+'
)
{
if
(
choice
==
max_choice
-
1
)
{
if
(
scroll
+
choice
>=
item_no
-
1
)
continue
;
/* Scroll list up */
if
(
list_height
>
1
)
{
/* De-highlight current last item before scrolling up */
print_item
(
list
,
items
[(
scroll
+
max_choice
-
1
)
*
3
+
1
],
status
[
scroll
+
max_choice
-
1
],
max_choice
-
1
,
FALSE
);
scrollok
(
list
,
TRUE
);
scroll
(
list
);
scrollok
(
list
,
FALSE
);
}
scroll
++
;
print_item
(
list
,
items
[(
scroll
+
max_choice
-
1
)
*
3
+
1
],
status
[
scroll
+
max_choice
-
1
],
max_choice
-
1
,
TRUE
);
wnoutrefresh
(
list
);
print_arrows
(
dialog
,
choice
,
item_no
,
scroll
,
box_y
,
box_x
+
check_x
+
5
,
list_height
);
wrefresh
(
dialog
);
continue
;
/* wait for another key press */
}
else
i
=
choice
+
1
;
}
if
(
i
!=
choice
)
{
/* De-highlight current item */
print_item
(
list
,
items
[(
scroll
+
choice
)
*
3
+
1
],
status
[
scroll
+
choice
],
choice
,
FALSE
);
/* Highlight new item */
choice
=
i
;
print_item
(
list
,
items
[(
scroll
+
choice
)
*
3
+
1
],
status
[
scroll
+
choice
],
choice
,
TRUE
);
wnoutrefresh
(
list
);
wrefresh
(
dialog
);
}
continue
;
/* wait for another key press */
}
}
switch
(
key
)
{
case
'H'
:
case
'h'
:
case
'?'
:
delwin
(
dialog
);
free
(
status
);
return
1
;
case
TAB
:
case
KEY_LEFT
:
case
KEY_RIGHT
:
button
=
((
key
==
KEY_LEFT
?
--
button
:
++
button
)
<
0
)
?
1
:
(
button
>
1
?
0
:
button
);
print_buttons
(
dialog
,
height
,
width
,
button
);
wrefresh
(
dialog
);
break
;
case
'S'
:
case
's'
:
case
' '
:
case
'\n'
:
if
(
!
button
)
{
if
(
flag
==
FLAG_CHECK
)
{
status
[
scroll
+
choice
]
=
!
status
[
scroll
+
choice
];
wmove
(
list
,
choice
,
check_x
);
wattrset
(
list
,
check_selected_attr
);
wprintw
(
list
,
"[%c]"
,
status
[
scroll
+
choice
]
?
'X'
:
' '
);
}
else
{
if
(
!
status
[
scroll
+
choice
])
{
for
(
i
=
0
;
i
<
item_no
;
i
++
)
status
[
i
]
=
0
;
status
[
scroll
+
choice
]
=
1
;
for
(
i
=
0
;
i
<
max_choice
;
i
++
)
print_item
(
list
,
items
[(
scroll
+
i
)
*
3
+
1
],
status
[
scroll
+
i
],
i
,
i
==
choice
);
}
}
wnoutrefresh
(
list
);
wrefresh
(
dialog
);
for
(
i
=
0
;
i
<
item_no
;
i
++
)
{
if
(
status
[
i
])
{
if
(
flag
==
FLAG_CHECK
)
{
fprintf
(
stderr
,
"
\"
%s
\"
"
,
items
[
i
*
3
]);
}
else
{
fprintf
(
stderr
,
"%s"
,
items
[
i
*
3
]);
}
}
}
}
delwin
(
dialog
);
free
(
status
);
return
button
;
case
'X'
:
case
'x'
:
key
=
ESC
;
case
ESC
:
break
;
}
/* Now, update everything... */
doupdate
();
}
delwin
(
dialog
);
delwin
(
dialog
);
free
(
status
);
free
(
status
);
return
-
1
;
/* ESC pressed */
return
-
1
;
/* ESC pressed */
}
}
lxdialog/dialog.h
View file @
f102b577
...
@@ -85,7 +85,7 @@
...
@@ -85,7 +85,7 @@
#define ACS_DARROW 'v'
#define ACS_DARROW 'v'
#endif
#endif
/*
/*
* Attribute names
* Attribute names
*/
*/
#define screen_attr attributes[0]
#define screen_attr attributes[0]
...
@@ -146,23 +146,23 @@ void color_setup (void);
...
@@ -146,23 +146,23 @@ void color_setup (void);
void
print_autowrap
(
WINDOW
*
win
,
const
char
*
prompt
,
int
width
,
int
y
,
int
x
);
void
print_autowrap
(
WINDOW
*
win
,
const
char
*
prompt
,
int
width
,
int
y
,
int
x
);
void
print_button
(
WINDOW
*
win
,
const
char
*
label
,
int
y
,
int
x
,
int
selected
);
void
print_button
(
WINDOW
*
win
,
const
char
*
label
,
int
y
,
int
x
,
int
selected
);
void
draw_box
(
WINDOW
*
win
,
int
y
,
int
x
,
int
height
,
int
width
,
chtype
box
,
void
draw_box
(
WINDOW
*
win
,
int
y
,
int
x
,
int
height
,
int
width
,
chtype
box
,
chtype
border
);
chtype
border
);
void
draw_shadow
(
WINDOW
*
win
,
int
y
,
int
x
,
int
height
,
int
width
);
void
draw_shadow
(
WINDOW
*
win
,
int
y
,
int
x
,
int
height
,
int
width
);
int
first_alpha
(
const
char
*
string
,
const
char
*
exempt
);
int
first_alpha
(
const
char
*
string
,
const
char
*
exempt
);
int
dialog_yesno
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
width
);
int
dialog_yesno
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
width
);
int
dialog_msgbox
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
dialog_msgbox
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
width
,
int
pause
);
int
width
,
int
pause
);
int
dialog_textbox
(
const
char
*
title
,
const
char
*
file
,
int
height
,
int
width
);
int
dialog_textbox
(
const
char
*
title
,
const
char
*
file
,
int
height
,
int
width
);
int
dialog_menu
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
width
,
int
dialog_menu
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
width
,
int
menu_height
,
const
char
*
choice
,
int
item_no
,
int
menu_height
,
const
char
*
choice
,
int
item_no
,
const
char
*
const
*
items
);
const
char
*
const
*
items
);
int
dialog_checklist
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
dialog_checklist
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
width
,
int
list_height
,
int
item_no
,
int
width
,
int
list_height
,
int
item_no
,
const
char
*
const
*
items
,
int
flag
);
const
char
*
const
*
items
,
int
flag
);
extern
unsigned
char
dialog_input_result
[];
extern
unsigned
char
dialog_input_result
[];
int
dialog_inputbox
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
dialog_inputbox
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
width
,
const
char
*
init
);
int
width
,
const
char
*
init
);
/*
/*
* This is the base for fictitious keys, which activate
* This is the base for fictitious keys, which activate
...
...
lxdialog/inputbox.c
View file @
f102b577
...
@@ -44,7 +44,7 @@ print_buttons(WINDOW *dialog, int height, int width, int selected)
...
@@ -44,7 +44,7 @@ print_buttons(WINDOW *dialog, int height, int width, int selected)
*/
*/
int
int
dialog_inputbox
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
width
,
dialog_inputbox
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
width
,
const
char
*
init
)
const
char
*
init
)
{
{
int
i
,
x
,
y
,
box_y
,
box_x
,
box_width
;
int
i
,
x
,
y
,
box_y
,
box_x
,
box_width
;
int
input_x
=
0
,
scroll
=
0
,
key
=
0
,
button
=
-
1
;
int
input_x
=
0
,
scroll
=
0
,
key
=
0
,
button
=
-
1
;
...
@@ -65,23 +65,23 @@ dialog_inputbox (const char *title, const char *prompt, int height, int width,
...
@@ -65,23 +65,23 @@ dialog_inputbox (const char *title, const char *prompt, int height, int width,
wattrset
(
dialog
,
border_attr
);
wattrset
(
dialog
,
border_attr
);
mvwaddch
(
dialog
,
height
-
3
,
0
,
ACS_LTEE
);
mvwaddch
(
dialog
,
height
-
3
,
0
,
ACS_LTEE
);
for
(
i
=
0
;
i
<
width
-
2
;
i
++
)
for
(
i
=
0
;
i
<
width
-
2
;
i
++
)
waddch
(
dialog
,
ACS_HLINE
);
waddch
(
dialog
,
ACS_HLINE
);
wattrset
(
dialog
,
dialog_attr
);
wattrset
(
dialog
,
dialog_attr
);
waddch
(
dialog
,
ACS_RTEE
);
waddch
(
dialog
,
ACS_RTEE
);
if
(
title
!=
NULL
&&
strlen
(
title
)
>=
width
-
2
)
{
if
(
title
!=
NULL
&&
strlen
(
title
)
>=
width
-
2
)
{
/* truncate long title -- mec */
/* truncate long title -- mec */
char
*
title2
=
malloc
(
width
-
2
+
1
);
char
*
title2
=
malloc
(
width
-
2
+
1
);
memcpy
(
title2
,
title
,
width
-
2
);
memcpy
(
title2
,
title
,
width
-
2
);
title2
[
width
-
2
]
=
'\0'
;
title2
[
width
-
2
]
=
'\0'
;
title
=
title2
;
title
=
title2
;
}
}
if
(
title
!=
NULL
)
{
if
(
title
!=
NULL
)
{
wattrset
(
dialog
,
title_attr
);
wattrset
(
dialog
,
title_attr
);
mvwaddch
(
dialog
,
0
,
(
width
-
strlen
(
title
))
/
2
-
1
,
' '
);
mvwaddch
(
dialog
,
0
,
(
width
-
strlen
(
title
))
/
2
-
1
,
' '
);
waddstr
(
dialog
,
(
char
*
)
title
);
waddstr
(
dialog
,
(
char
*
)
title
);
waddch
(
dialog
,
' '
);
waddch
(
dialog
,
' '
);
}
}
wattrset
(
dialog
,
dialog_attr
);
wattrset
(
dialog
,
dialog_attr
);
...
@@ -93,7 +93,7 @@ dialog_inputbox (const char *title, const char *prompt, int height, int width,
...
@@ -93,7 +93,7 @@ dialog_inputbox (const char *title, const char *prompt, int height, int width,
box_y
=
y
+
2
;
box_y
=
y
+
2
;
box_x
=
(
width
-
box_width
)
/
2
;
box_x
=
(
width
-
box_width
)
/
2
;
draw_box
(
dialog
,
y
+
1
,
box_x
-
1
,
3
,
box_width
+
2
,
draw_box
(
dialog
,
y
+
1
,
box_x
-
1
,
3
,
box_width
+
2
,
border_attr
,
dialog_attr
);
border_attr
,
dialog_attr
);
print_buttons
(
dialog
,
height
,
width
,
0
);
print_buttons
(
dialog
,
height
,
width
,
0
);
...
@@ -102,139 +102,139 @@ dialog_inputbox (const char *title, const char *prompt, int height, int width,
...
@@ -102,139 +102,139 @@ dialog_inputbox (const char *title, const char *prompt, int height, int width,
wattrset
(
dialog
,
inputbox_attr
);
wattrset
(
dialog
,
inputbox_attr
);
if
(
!
init
)
if
(
!
init
)
instr
[
0
]
=
'\0'
;
instr
[
0
]
=
'\0'
;
else
else
strcpy
(
instr
,
init
);
strcpy
(
instr
,
init
);
input_x
=
strlen
(
instr
);
input_x
=
strlen
(
instr
);
if
(
input_x
>=
box_width
)
{
if
(
input_x
>=
box_width
)
{
scroll
=
input_x
-
box_width
+
1
;
scroll
=
input_x
-
box_width
+
1
;
input_x
=
box_width
-
1
;
input_x
=
box_width
-
1
;
for
(
i
=
0
;
i
<
box_width
-
1
;
i
++
)
for
(
i
=
0
;
i
<
box_width
-
1
;
i
++
)
waddch
(
dialog
,
instr
[
scroll
+
i
]);
waddch
(
dialog
,
instr
[
scroll
+
i
]);
}
else
}
else
waddstr
(
dialog
,
instr
);
waddstr
(
dialog
,
instr
);
wmove
(
dialog
,
box_y
,
box_x
+
input_x
);
wmove
(
dialog
,
box_y
,
box_x
+
input_x
);
wrefresh
(
dialog
);
wrefresh
(
dialog
);
while
(
key
!=
ESC
)
{
while
(
key
!=
ESC
)
{
key
=
wgetch
(
dialog
);
key
=
wgetch
(
dialog
);
if
(
button
==
-
1
)
{
/* Input box selected */
if
(
button
==
-
1
)
{
/* Input box selected */
switch
(
key
)
{
switch
(
key
)
{
case
TAB
:
case
TAB
:
case
KEY_UP
:
case
KEY_UP
:
case
KEY_DOWN
:
case
KEY_DOWN
:
break
;
break
;
case
KEY_LEFT
:
case
KEY_LEFT
:
continue
;
continue
;
case
KEY_RIGHT
:
case
KEY_RIGHT
:
continue
;
continue
;
case
KEY_BACKSPACE
:
case
KEY_BACKSPACE
:
case
127
:
case
127
:
if
(
input_x
||
scroll
)
{
if
(
input_x
||
scroll
)
{
wattrset
(
dialog
,
inputbox_attr
);
wattrset
(
dialog
,
inputbox_attr
);
if
(
!
input_x
)
{
if
(
!
input_x
)
{
scroll
=
scroll
<
box_width
-
1
?
scroll
=
scroll
<
box_width
-
1
?
0
:
scroll
-
(
box_width
-
1
);
0
:
scroll
-
(
box_width
-
1
);
wmove
(
dialog
,
box_y
,
box_x
);
wmove
(
dialog
,
box_y
,
box_x
);
for
(
i
=
0
;
i
<
box_width
;
i
++
)
for
(
i
=
0
;
i
<
box_width
;
i
++
)
waddch
(
dialog
,
instr
[
scroll
+
input_x
+
i
]
?
waddch
(
dialog
,
instr
[
scroll
+
input_x
+
i
]
?
instr
[
scroll
+
input_x
+
i
]
:
' '
);
instr
[
scroll
+
input_x
+
i
]
:
' '
);
input_x
=
strlen
(
instr
)
-
scroll
;
input_x
=
strlen
(
instr
)
-
scroll
;
}
else
}
else
input_x
--
;
input_x
--
;
instr
[
scroll
+
input_x
]
=
'\0'
;
instr
[
scroll
+
input_x
]
=
'\0'
;
mvwaddch
(
dialog
,
box_y
,
input_x
+
box_x
,
' '
);
mvwaddch
(
dialog
,
box_y
,
input_x
+
box_x
,
' '
);
wmove
(
dialog
,
box_y
,
input_x
+
box_x
);
wmove
(
dialog
,
box_y
,
input_x
+
box_x
);
wrefresh
(
dialog
);
wrefresh
(
dialog
);
}
}
continue
;
continue
;
default:
default:
if
(
key
<
0x100
&&
isprint
(
key
))
{
if
(
key
<
0x100
&&
isprint
(
key
))
{
if
(
scroll
+
input_x
<
MAX_LEN
)
{
if
(
scroll
+
input_x
<
MAX_LEN
)
{
wattrset
(
dialog
,
inputbox_attr
);
wattrset
(
dialog
,
inputbox_attr
);
instr
[
scroll
+
input_x
]
=
key
;
instr
[
scroll
+
input_x
]
=
key
;
instr
[
scroll
+
input_x
+
1
]
=
'\0'
;
instr
[
scroll
+
input_x
+
1
]
=
'\0'
;
if
(
input_x
==
box_width
-
1
)
{
if
(
input_x
==
box_width
-
1
)
{
scroll
++
;
scroll
++
;
wmove
(
dialog
,
box_y
,
box_x
);
wmove
(
dialog
,
box_y
,
box_x
);
for
(
i
=
0
;
i
<
box_width
-
1
;
i
++
)
for
(
i
=
0
;
i
<
box_width
-
1
;
i
++
)
waddch
(
dialog
,
instr
[
scroll
+
i
]);
waddch
(
dialog
,
instr
[
scroll
+
i
]);
}
else
{
}
else
{
wmove
(
dialog
,
box_y
,
input_x
++
+
box_x
);
wmove
(
dialog
,
box_y
,
input_x
++
+
box_x
);
waddch
(
dialog
,
key
);
waddch
(
dialog
,
key
);
}
}
wrefresh
(
dialog
);
wrefresh
(
dialog
);
}
else
}
else
flash
();
/* Alarm user about overflow */
flash
();
/* Alarm user about overflow */
continue
;
continue
;
}
}
}
}
}
}
switch
(
key
)
{
switch
(
key
)
{
case
'O'
:
case
'O'
:
case
'o'
:
case
'o'
:
delwin
(
dialog
);
delwin
(
dialog
);
return
0
;
return
0
;
case
'H'
:
case
'H'
:
case
'h'
:
case
'h'
:
delwin
(
dialog
);
delwin
(
dialog
);
return
1
;
return
1
;
case
KEY_UP
:
case
KEY_UP
:
case
KEY_LEFT
:
case
KEY_LEFT
:
switch
(
button
)
{
switch
(
button
)
{
case
-
1
:
case
-
1
:
button
=
1
;
/* Indicates "Cancel" button is selected */
button
=
1
;
/* Indicates "Cancel" button is selected */
print_buttons
(
dialog
,
height
,
width
,
1
);
print_buttons
(
dialog
,
height
,
width
,
1
);
break
;
break
;
case
0
:
case
0
:
button
=
-
1
;
/* Indicates input box is selected */
button
=
-
1
;
/* Indicates input box is selected */
print_buttons
(
dialog
,
height
,
width
,
0
);
print_buttons
(
dialog
,
height
,
width
,
0
);
wmove
(
dialog
,
box_y
,
box_x
+
input_x
);
wmove
(
dialog
,
box_y
,
box_x
+
input_x
);
wrefresh
(
dialog
);
wrefresh
(
dialog
);
break
;
break
;
case
1
:
case
1
:
button
=
0
;
/* Indicates "OK" button is selected */
button
=
0
;
/* Indicates "OK" button is selected */
print_buttons
(
dialog
,
height
,
width
,
0
);
print_buttons
(
dialog
,
height
,
width
,
0
);
break
;
break
;
}
}
break
;
break
;
case
TAB
:
case
TAB
:
case
KEY_DOWN
:
case
KEY_DOWN
:
case
KEY_RIGHT
:
case
KEY_RIGHT
:
switch
(
button
)
{
switch
(
button
)
{
case
-
1
:
case
-
1
:
button
=
0
;
/* Indicates "OK" button is selected */
button
=
0
;
/* Indicates "OK" button is selected */
print_buttons
(
dialog
,
height
,
width
,
0
);
print_buttons
(
dialog
,
height
,
width
,
0
);
break
;
break
;
case
0
:
case
0
:
button
=
1
;
/* Indicates "Cancel" button is selected */
button
=
1
;
/* Indicates "Cancel" button is selected */
print_buttons
(
dialog
,
height
,
width
,
1
);
print_buttons
(
dialog
,
height
,
width
,
1
);
break
;
break
;
case
1
:
case
1
:
button
=
-
1
;
/* Indicates input box is selected */
button
=
-
1
;
/* Indicates input box is selected */
print_buttons
(
dialog
,
height
,
width
,
0
);
print_buttons
(
dialog
,
height
,
width
,
0
);
wmove
(
dialog
,
box_y
,
box_x
+
input_x
);
wmove
(
dialog
,
box_y
,
box_x
+
input_x
);
wrefresh
(
dialog
);
wrefresh
(
dialog
);
break
;
break
;
}
}
break
;
break
;
case
' '
:
case
' '
:
case
'\n'
:
case
'\n'
:
delwin
(
dialog
);
delwin
(
dialog
);
return
(
button
==
-
1
?
0
:
button
);
return
(
button
==
-
1
?
0
:
button
);
case
'X'
:
case
'X'
:
case
'x'
:
case
'x'
:
key
=
ESC
;
key
=
ESC
;
case
ESC
:
case
ESC
:
break
;
break
;
}
}
}
}
delwin
(
dialog
);
delwin
(
dialog
);
return
-
1
;
/* ESC pressed */
return
-
1
;
/* ESC pressed */
}
}
lxdialog/lxdialog.c
View file @
f102b577
...
@@ -67,19 +67,19 @@ main (int argc, const char * const * argv)
...
@@ -67,19 +67,19 @@ main (int argc, const char * const * argv)
trace
(
TRACE_CALLS
|
TRACE_UPDATE
);
trace
(
TRACE_CALLS
|
TRACE_UPDATE
);
#endif
#endif
if
(
argc
<
2
)
{
if
(
argc
<
2
)
{
Usage
(
argv
[
0
]);
Usage
(
argv
[
0
]);
exit
(
-
1
);
exit
(
-
1
);
}
}
while
(
offset
<
argc
-
1
&&
!
end_common_opts
)
{
/* Common options */
while
(
offset
<
argc
-
1
&&
!
end_common_opts
)
{
/* Common options */
if
(
!
strcmp
(
argv
[
offset
+
1
],
"--title"
))
{
if
(
!
strcmp
(
argv
[
offset
+
1
],
"--title"
))
{
if
(
argc
-
offset
<
3
||
title
!=
NULL
)
{
if
(
argc
-
offset
<
3
||
title
!=
NULL
)
{
Usage
(
argv
[
0
]);
Usage
(
argv
[
0
]);
exit
(
-
1
);
exit
(
-
1
);
}
else
{
}
else
{
title
=
argv
[
offset
+
2
];
title
=
argv
[
offset
+
2
];
offset
+=
2
;
offset
+=
2
;
}
}
}
else
if
(
!
strcmp
(
argv
[
offset
+
1
],
"--backtitle"
))
{
}
else
if
(
!
strcmp
(
argv
[
offset
+
1
],
"--backtitle"
))
{
if
(
backtitle
!=
NULL
)
{
if
(
backtitle
!=
NULL
)
{
Usage
(
argv
[
0
]);
Usage
(
argv
[
0
]);
...
@@ -88,48 +88,48 @@ main (int argc, const char * const * argv)
...
@@ -88,48 +88,48 @@ main (int argc, const char * const * argv)
backtitle
=
argv
[
offset
+
2
];
backtitle
=
argv
[
offset
+
2
];
offset
+=
2
;
offset
+=
2
;
}
}
}
else
if
(
!
strcmp
(
argv
[
offset
+
1
],
"--clear"
))
{
}
else
if
(
!
strcmp
(
argv
[
offset
+
1
],
"--clear"
))
{
if
(
clear_screen
)
{
/* Hey, "--clear" can't appear twice! */
if
(
clear_screen
)
{
/* Hey, "--clear" can't appear twice! */
Usage
(
argv
[
0
]);
Usage
(
argv
[
0
]);
exit
(
-
1
);
exit
(
-
1
);
}
else
if
(
argc
==
2
)
{
/* we only want to clear the screen */
}
else
if
(
argc
==
2
)
{
/* we only want to clear the screen */
init_dialog
();
init_dialog
();
refresh
();
/* init_dialog() will clear the screen for us */
refresh
();
/* init_dialog() will clear the screen for us */
end_dialog
();
end_dialog
();
return
0
;
return
0
;
}
else
{
}
else
{
clear_screen
=
1
;
clear_screen
=
1
;
offset
++
;
offset
++
;
}
}
}
else
/* no more common options */
}
else
/* no more common options */
end_common_opts
=
1
;
end_common_opts
=
1
;
}
}
if
(
argc
-
1
==
offset
)
{
/* no more options */
if
(
argc
-
1
==
offset
)
{
/* no more options */
Usage
(
argv
[
0
]);
Usage
(
argv
[
0
]);
exit
(
-
1
);
exit
(
-
1
);
}
}
/* use a table to look for the requested mode, to avoid code duplication */
/* use a table to look for the requested mode, to avoid code duplication */
for
(
modePtr
=
modes
;
modePtr
->
name
;
modePtr
++
)
/* look for the mode */
for
(
modePtr
=
modes
;
modePtr
->
name
;
modePtr
++
)
/* look for the mode */
if
(
!
strcmp
(
argv
[
offset
+
1
],
modePtr
->
name
))
if
(
!
strcmp
(
argv
[
offset
+
1
],
modePtr
->
name
))
break
;
break
;
if
(
!
modePtr
->
name
)
if
(
!
modePtr
->
name
)
Usage
(
argv
[
0
]);
Usage
(
argv
[
0
]);
if
(
argc
-
offset
<
modePtr
->
argmin
)
if
(
argc
-
offset
<
modePtr
->
argmin
)
Usage
(
argv
[
0
]);
Usage
(
argv
[
0
]);
if
(
modePtr
->
argmax
&&
argc
-
offset
>
modePtr
->
argmax
)
if
(
modePtr
->
argmax
&&
argc
-
offset
>
modePtr
->
argmax
)
Usage
(
argv
[
0
]);
Usage
(
argv
[
0
]);
init_dialog
();
init_dialog
();
retval
=
(
*
(
modePtr
->
jumper
))
(
title
,
argc
-
offset
,
argv
+
offset
);
retval
=
(
*
(
modePtr
->
jumper
))
(
title
,
argc
-
offset
,
argv
+
offset
);
if
(
clear_screen
)
{
/* clear screen before exit */
if
(
clear_screen
)
{
/* clear screen before exit */
attr_clear
(
stdscr
,
LINES
,
COLS
,
screen_attr
);
attr_clear
(
stdscr
,
LINES
,
COLS
,
screen_attr
);
refresh
();
refresh
();
}
}
end_dialog
();
end_dialog
();
...
@@ -173,21 +173,21 @@ int
...
@@ -173,21 +173,21 @@ int
j_menu
(
const
char
*
t
,
int
ac
,
const
char
*
const
*
av
)
j_menu
(
const
char
*
t
,
int
ac
,
const
char
*
const
*
av
)
{
{
return
dialog_menu
(
t
,
av
[
2
],
atoi
(
av
[
3
]),
atoi
(
av
[
4
]),
return
dialog_menu
(
t
,
av
[
2
],
atoi
(
av
[
3
]),
atoi
(
av
[
4
]),
atoi
(
av
[
5
]),
av
[
6
],
(
ac
-
6
)
/
2
,
av
+
7
);
atoi
(
av
[
5
]),
av
[
6
],
(
ac
-
6
)
/
2
,
av
+
7
);
}
}
int
int
j_checklist
(
const
char
*
t
,
int
ac
,
const
char
*
const
*
av
)
j_checklist
(
const
char
*
t
,
int
ac
,
const
char
*
const
*
av
)
{
{
return
dialog_checklist
(
t
,
av
[
2
],
atoi
(
av
[
3
]),
atoi
(
av
[
4
]),
return
dialog_checklist
(
t
,
av
[
2
],
atoi
(
av
[
3
]),
atoi
(
av
[
4
]),
atoi
(
av
[
5
]),
(
ac
-
6
)
/
3
,
av
+
6
,
FLAG_CHECK
);
atoi
(
av
[
5
]),
(
ac
-
6
)
/
3
,
av
+
6
,
FLAG_CHECK
);
}
}
int
int
j_radiolist
(
const
char
*
t
,
int
ac
,
const
char
*
const
*
av
)
j_radiolist
(
const
char
*
t
,
int
ac
,
const
char
*
const
*
av
)
{
{
return
dialog_checklist
(
t
,
av
[
2
],
atoi
(
av
[
3
]),
atoi
(
av
[
4
]),
return
dialog_checklist
(
t
,
av
[
2
],
atoi
(
av
[
3
]),
atoi
(
av
[
4
]),
atoi
(
av
[
5
]),
(
ac
-
6
)
/
3
,
av
+
6
,
FLAG_RADIO
);
atoi
(
av
[
5
]),
(
ac
-
6
)
/
3
,
av
+
6
,
FLAG_RADIO
);
}
}
int
int
...
...
lxdialog/menubox.c
View file @
f102b577
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
*
*
* *) A bugfix for the Page-Down problem
* *) A bugfix for the Page-Down problem
*
*
* *) Formerly when I used Page Down and Page Up, the cursor would be set
* *) Formerly when I used Page Down and Page Up, the cursor would be set
* to the first position in the menu box. Now lxdialog is a bit
* to the first position in the menu box. Now lxdialog is a bit
* smarter and works more like other menu systems (just have a look at
* smarter and works more like other menu systems (just have a look at
* it).
* it).
...
@@ -80,7 +80,7 @@ print_item (WINDOW * win, const char *item, int choice, int selected, int hotkey
...
@@ -80,7 +80,7 @@ print_item (WINDOW * win, const char *item, int choice, int selected, int hotkey
{
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
menu_width
;
i
++
)
for
(
i
=
0
;
i
<
menu_width
;
i
++
)
waddch
(
win
,
' '
);
waddch
(
win
,
' '
);
}
}
#else
#else
wclrtoeol
(
win
);
wclrtoeol
(
win
);
...
@@ -88,12 +88,12 @@ print_item (WINDOW * win, const char *item, int choice, int selected, int hotkey
...
@@ -88,12 +88,12 @@ print_item (WINDOW * win, const char *item, int choice, int selected, int hotkey
wattrset
(
win
,
selected
?
item_selected_attr
:
item_attr
);
wattrset
(
win
,
selected
?
item_selected_attr
:
item_attr
);
mvwaddstr
(
win
,
choice
,
item_x
,
menu_item
);
mvwaddstr
(
win
,
choice
,
item_x
,
menu_item
);
if
(
hotkey
)
{
if
(
hotkey
)
{
wattrset
(
win
,
selected
?
tag_key_selected_attr
:
tag_key_attr
);
wattrset
(
win
,
selected
?
tag_key_selected_attr
:
tag_key_attr
);
mvwaddch
(
win
,
choice
,
item_x
+
j
,
menu_item
[
j
]);
mvwaddch
(
win
,
choice
,
item_x
+
j
,
menu_item
[
j
]);
}
}
if
(
selected
)
{
if
(
selected
)
{
wmove
(
win
,
choice
,
item_x
+
1
);
wmove
(
win
,
choice
,
item_x
+
1
);
wrefresh
(
win
);
wrefresh
(
win
);
}
}
}
}
...
@@ -102,7 +102,7 @@ print_item (WINDOW * win, const char *item, int choice, int selected, int hotkey
...
@@ -102,7 +102,7 @@ print_item (WINDOW * win, const char *item, int choice, int selected, int hotkey
*/
*/
static
void
static
void
print_arrows
(
WINDOW
*
win
,
int
item_no
,
int
scroll
,
print_arrows
(
WINDOW
*
win
,
int
item_no
,
int
scroll
,
int
y
,
int
x
,
int
height
)
int
y
,
int
x
,
int
height
)
{
{
int
cur_y
,
cur_x
;
int
cur_y
,
cur_x
;
...
@@ -111,32 +111,32 @@ print_arrows (WINDOW * win, int item_no, int scroll,
...
@@ -111,32 +111,32 @@ print_arrows (WINDOW * win, int item_no, int scroll,
wmove
(
win
,
y
,
x
);
wmove
(
win
,
y
,
x
);
if
(
scroll
>
0
)
{
if
(
scroll
>
0
)
{
wattrset
(
win
,
uarrow_attr
);
wattrset
(
win
,
uarrow_attr
);
waddch
(
win
,
ACS_UARROW
);
waddch
(
win
,
ACS_UARROW
);
waddstr
(
win
,
"(-)"
);
waddstr
(
win
,
"(-)"
);
}
}
else
{
else
{
wattrset
(
win
,
menubox_attr
);
wattrset
(
win
,
menubox_attr
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
}
}
y
=
y
+
height
+
1
;
y
=
y
+
height
+
1
;
wmove
(
win
,
y
,
x
);
wmove
(
win
,
y
,
x
);
if
((
height
<
item_no
)
&&
(
scroll
+
height
<
item_no
))
{
if
((
height
<
item_no
)
&&
(
scroll
+
height
<
item_no
))
{
wattrset
(
win
,
darrow_attr
);
wattrset
(
win
,
darrow_attr
);
waddch
(
win
,
ACS_DARROW
);
waddch
(
win
,
ACS_DARROW
);
waddstr
(
win
,
"(+)"
);
waddstr
(
win
,
"(+)"
);
}
}
else
{
else
{
wattrset
(
win
,
menubox_border_attr
);
wattrset
(
win
,
menubox_border_attr
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
waddch
(
win
,
ACS_HLINE
);
}
}
wmove
(
win
,
cur_y
,
cur_x
);
wmove
(
win
,
cur_y
,
cur_x
);
...
@@ -164,8 +164,8 @@ print_buttons (WINDOW *win, int height, int width, int selected)
...
@@ -164,8 +164,8 @@ print_buttons (WINDOW *win, int height, int width, int selected)
*/
*/
int
int
dialog_menu
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
width
,
dialog_menu
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
width
,
int
menu_height
,
const
char
*
current
,
int
item_no
,
int
menu_height
,
const
char
*
current
,
int
item_no
,
const
char
*
const
*
items
)
const
char
*
const
*
items
)
{
{
int
i
,
j
,
x
,
y
,
box_x
,
box_y
;
int
i
,
j
,
x
,
y
,
box_x
,
box_y
;
...
@@ -188,24 +188,24 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
...
@@ -188,24 +188,24 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
wattrset
(
dialog
,
border_attr
);
wattrset
(
dialog
,
border_attr
);
mvwaddch
(
dialog
,
height
-
3
,
0
,
ACS_LTEE
);
mvwaddch
(
dialog
,
height
-
3
,
0
,
ACS_LTEE
);
for
(
i
=
0
;
i
<
width
-
2
;
i
++
)
for
(
i
=
0
;
i
<
width
-
2
;
i
++
)
waddch
(
dialog
,
ACS_HLINE
);
waddch
(
dialog
,
ACS_HLINE
);
wattrset
(
dialog
,
dialog_attr
);
wattrset
(
dialog
,
dialog_attr
);
wbkgdset
(
dialog
,
dialog_attr
&
A_COLOR
);
wbkgdset
(
dialog
,
dialog_attr
&
A_COLOR
);
waddch
(
dialog
,
ACS_RTEE
);
waddch
(
dialog
,
ACS_RTEE
);
if
(
title
!=
NULL
&&
strlen
(
title
)
>=
width
-
2
)
{
if
(
title
!=
NULL
&&
strlen
(
title
)
>=
width
-
2
)
{
/* truncate long title -- mec */
/* truncate long title -- mec */
char
*
title2
=
malloc
(
width
-
2
+
1
);
char
*
title2
=
malloc
(
width
-
2
+
1
);
memcpy
(
title2
,
title
,
width
-
2
);
memcpy
(
title2
,
title
,
width
-
2
);
title2
[
width
-
2
]
=
'\0'
;
title2
[
width
-
2
]
=
'\0'
;
title
=
title2
;
title
=
title2
;
}
}
if
(
title
!=
NULL
)
{
if
(
title
!=
NULL
)
{
wattrset
(
dialog
,
title_attr
);
wattrset
(
dialog
,
title_attr
);
mvwaddch
(
dialog
,
0
,
(
width
-
strlen
(
title
))
/
2
-
1
,
' '
);
mvwaddch
(
dialog
,
0
,
(
width
-
strlen
(
title
))
/
2
-
1
,
' '
);
waddstr
(
dialog
,
(
char
*
)
title
);
waddstr
(
dialog
,
(
char
*
)
title
);
waddch
(
dialog
,
' '
);
waddch
(
dialog
,
' '
);
}
}
wattrset
(
dialog
,
dialog_attr
);
wattrset
(
dialog
,
dialog_attr
);
...
@@ -217,85 +217,85 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
...
@@ -217,85 +217,85 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
/* create new window for the menu */
/* create new window for the menu */
menu
=
subwin
(
dialog
,
menu_height
,
menu_width
,
menu
=
subwin
(
dialog
,
menu_height
,
menu_width
,
y
+
box_y
+
1
,
x
+
box_x
+
1
);
y
+
box_y
+
1
,
x
+
box_x
+
1
);
keypad
(
menu
,
TRUE
);
keypad
(
menu
,
TRUE
);
/* draw a box around the menu items */
/* draw a box around the menu items */
draw_box
(
dialog
,
box_y
,
box_x
,
menu_height
+
2
,
menu_width
+
2
,
draw_box
(
dialog
,
box_y
,
box_x
,
menu_height
+
2
,
menu_width
+
2
,
menubox_border_attr
,
menubox_attr
);
menubox_border_attr
,
menubox_attr
);
/*
/*
* Find length of longest item in order to center menu.
* Find length of longest item in order to center menu.
* Set 'choice' to default item.
* Set 'choice' to default item.
*/
*/
item_x
=
0
;
item_x
=
0
;
for
(
i
=
0
;
i
<
item_no
;
i
++
)
{
for
(
i
=
0
;
i
<
item_no
;
i
++
)
{
item_x
=
MAX
(
item_x
,
MIN
(
menu_width
,
strlen
(
items
[
i
*
2
+
1
])
+
2
));
item_x
=
MAX
(
item_x
,
MIN
(
menu_width
,
strlen
(
items
[
i
*
2
+
1
])
+
2
));
if
(
strcmp
(
current
,
items
[
i
*
2
])
==
0
)
choice
=
i
;
if
(
strcmp
(
current
,
items
[
i
*
2
])
==
0
)
choice
=
i
;
}
}
item_x
=
(
menu_width
-
item_x
)
/
2
;
item_x
=
(
menu_width
-
item_x
)
/
2
;
/* get the scroll info from the temp file */
/* get the scroll info from the temp file */
if
(
(
f
=
fopen
(
"lxdialog.scrltmp"
,
"r"
))
!=
NULL
)
{
if
(
(
f
=
fopen
(
"lxdialog.scrltmp"
,
"r"
))
!=
NULL
)
{
if
(
(
fscanf
(
f
,
"%d
\n
"
,
&
scroll
)
==
1
)
&&
(
scroll
<=
choice
)
&&
if
(
(
fscanf
(
f
,
"%d
\n
"
,
&
scroll
)
==
1
)
&&
(
scroll
<=
choice
)
&&
(
scroll
+
max_choice
>
choice
)
&&
(
scroll
>=
0
)
&&
(
scroll
+
max_choice
>
choice
)
&&
(
scroll
>=
0
)
&&
(
scroll
+
max_choice
<=
item_no
)
)
{
(
scroll
+
max_choice
<=
item_no
)
)
{
first_item
=
scroll
;
first_item
=
scroll
;
choice
=
choice
-
scroll
;
choice
=
choice
-
scroll
;
fclose
(
f
);
fclose
(
f
);
}
else
{
}
else
{
scroll
=
0
;
scroll
=
0
;
remove
(
"lxdialog.scrltmp"
);
remove
(
"lxdialog.scrltmp"
);
fclose
(
f
);
fclose
(
f
);
f
=
NULL
;
f
=
NULL
;
}
}
}
}
if
(
(
choice
>=
max_choice
)
||
(
f
==
NULL
&&
choice
>=
max_choice
/
2
)
)
{
if
(
(
choice
>=
max_choice
)
||
(
f
==
NULL
&&
choice
>=
max_choice
/
2
)
)
{
if
(
choice
>=
item_no
-
max_choice
/
2
)
if
(
choice
>=
item_no
-
max_choice
/
2
)
scroll
=
first_item
=
item_no
-
max_choice
;
scroll
=
first_item
=
item_no
-
max_choice
;
else
else
scroll
=
first_item
=
choice
-
max_choice
/
2
;
scroll
=
first_item
=
choice
-
max_choice
/
2
;
choice
=
choice
-
scroll
;
choice
=
choice
-
scroll
;
}
}
/* Print the menu */
/* Print the menu */
for
(
i
=
0
;
i
<
max_choice
;
i
++
)
{
for
(
i
=
0
;
i
<
max_choice
;
i
++
)
{
print_item
(
menu
,
items
[(
first_item
+
i
)
*
2
+
1
],
i
,
i
==
choice
,
print_item
(
menu
,
items
[(
first_item
+
i
)
*
2
+
1
],
i
,
i
==
choice
,
(
items
[(
first_item
+
i
)
*
2
][
0
]
!=
':'
));
(
items
[(
first_item
+
i
)
*
2
][
0
]
!=
':'
));
}
}
wnoutrefresh
(
menu
);
wnoutrefresh
(
menu
);
print_arrows
(
dialog
,
item_no
,
scroll
,
print_arrows
(
dialog
,
item_no
,
scroll
,
box_y
,
box_x
+
item_x
+
1
,
menu_height
);
box_y
,
box_x
+
item_x
+
1
,
menu_height
);
print_buttons
(
dialog
,
height
,
width
,
0
);
print_buttons
(
dialog
,
height
,
width
,
0
);
wmove
(
menu
,
choice
,
item_x
+
1
);
wmove
(
menu
,
choice
,
item_x
+
1
);
wrefresh
(
menu
);
wrefresh
(
menu
);
while
(
key
!=
ESC
)
{
while
(
key
!=
ESC
)
{
key
=
wgetch
(
menu
);
key
=
wgetch
(
menu
);
if
(
key
<
256
&&
isalpha
(
key
))
key
=
tolower
(
key
);
if
(
key
<
256
&&
isalpha
(
key
))
key
=
tolower
(
key
);
if
(
strchr
(
"ynm"
,
key
))
if
(
strchr
(
"ynm"
,
key
))
i
=
max_choice
;
i
=
max_choice
;
else
{
else
{
for
(
i
=
choice
+
1
;
i
<
max_choice
;
i
++
)
{
for
(
i
=
choice
+
1
;
i
<
max_choice
;
i
++
)
{
j
=
first_alpha
(
items
[(
scroll
+
i
)
*
2
+
1
],
"YyNnMm"
);
j
=
first_alpha
(
items
[(
scroll
+
i
)
*
2
+
1
],
"YyNnMm"
);
if
(
key
==
tolower
(
items
[(
scroll
+
i
)
*
2
+
1
][
j
]))
if
(
key
==
tolower
(
items
[(
scroll
+
i
)
*
2
+
1
][
j
]))
break
;
break
;
}
}
if
(
i
==
max_choice
)
if
(
i
==
max_choice
)
for
(
i
=
0
;
i
<
max_choice
;
i
++
)
{
for
(
i
=
0
;
i
<
max_choice
;
i
++
)
{
j
=
first_alpha
(
items
[(
scroll
+
i
)
*
2
+
1
],
"YyNnMm"
);
j
=
first_alpha
(
items
[(
scroll
+
i
)
*
2
+
1
],
"YyNnMm"
);
if
(
key
==
tolower
(
items
[(
scroll
+
i
)
*
2
+
1
][
j
]))
if
(
key
==
tolower
(
items
[(
scroll
+
i
)
*
2
+
1
][
j
]))
break
;
break
;
}
}
}
}
if
(
i
<
max_choice
||
if
(
i
<
max_choice
||
key
==
KEY_UP
||
key
==
KEY_DOWN
||
key
==
KEY_UP
||
key
==
KEY_DOWN
||
key
==
'-'
||
key
==
'+'
||
key
==
'-'
||
key
==
'+'
||
key
==
KEY_PPAGE
||
key
==
KEY_NPAGE
)
{
key
==
KEY_PPAGE
||
key
==
KEY_NPAGE
)
{
...
@@ -303,9 +303,9 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
...
@@ -303,9 +303,9 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
print_item
(
menu
,
items
[(
scroll
+
choice
)
*
2
+
1
],
choice
,
FALSE
,
print_item
(
menu
,
items
[(
scroll
+
choice
)
*
2
+
1
],
choice
,
FALSE
,
(
items
[(
scroll
+
choice
)
*
2
][
0
]
!=
':'
));
(
items
[(
scroll
+
choice
)
*
2
][
0
]
!=
':'
));
if
(
key
==
KEY_UP
||
key
==
'-'
)
{
if
(
key
==
KEY_UP
||
key
==
'-'
)
{
if
(
choice
<
2
&&
scroll
)
{
if
(
choice
<
2
&&
scroll
)
{
/* Scroll menu down */
/* Scroll menu down */
scrollok
(
menu
,
TRUE
);
scrollok
(
menu
,
TRUE
);
wscrl
(
menu
,
-
1
);
wscrl
(
menu
,
-
1
);
scrollok
(
menu
,
FALSE
);
scrollok
(
menu
,
FALSE
);
...
@@ -314,19 +314,19 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
...
@@ -314,19 +314,19 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
print_item
(
menu
,
items
[
scroll
*
2
+
1
],
0
,
FALSE
,
print_item
(
menu
,
items
[
scroll
*
2
+
1
],
0
,
FALSE
,
(
items
[
scroll
*
2
][
0
]
!=
':'
));
(
items
[
scroll
*
2
][
0
]
!=
':'
));
}
else
}
else
choice
=
MAX
(
choice
-
1
,
0
);
choice
=
MAX
(
choice
-
1
,
0
);
}
else
if
(
key
==
KEY_DOWN
||
key
==
'+'
)
{
}
else
if
(
key
==
KEY_DOWN
||
key
==
'+'
)
{
print_item
(
menu
,
items
[(
scroll
+
choice
)
*
2
+
1
],
choice
,
FALSE
,
print_item
(
menu
,
items
[(
scroll
+
choice
)
*
2
+
1
],
choice
,
FALSE
,
(
items
[(
scroll
+
choice
)
*
2
][
0
]
!=
':'
));
(
items
[(
scroll
+
choice
)
*
2
][
0
]
!=
':'
));
if
((
choice
>
max_choice
-
3
)
&&
if
((
choice
>
max_choice
-
3
)
&&
(
scroll
+
max_choice
<
item_no
)
(
scroll
+
max_choice
<
item_no
)
)
{
)
{
/* Scroll menu up */
/* Scroll menu up */
scrollok
(
menu
,
TRUE
);
scrollok
(
menu
,
TRUE
);
scroll
(
menu
);
scroll
(
menu
);
scrollok
(
menu
,
FALSE
);
scrollok
(
menu
,
FALSE
);
...
@@ -338,14 +338,14 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
...
@@ -338,14 +338,14 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
}
else
}
else
choice
=
MIN
(
choice
+
1
,
max_choice
-
1
);
choice
=
MIN
(
choice
+
1
,
max_choice
-
1
);
}
else
if
(
key
==
KEY_PPAGE
)
{
}
else
if
(
key
==
KEY_PPAGE
)
{
scrollok
(
menu
,
TRUE
);
scrollok
(
menu
,
TRUE
);
for
(
i
=
0
;
(
i
<
max_choice
);
i
++
)
{
for
(
i
=
0
;
(
i
<
max_choice
);
i
++
)
{
if
(
scroll
>
0
)
{
if
(
scroll
>
0
)
{
wscrl
(
menu
,
-
1
);
wscrl
(
menu
,
-
1
);
scroll
--
;
scroll
--
;
print_item
(
menu
,
items
[
scroll
*
2
+
1
],
0
,
FALSE
,
print_item
(
menu
,
items
[
scroll
*
2
+
1
],
0
,
FALSE
,
(
items
[
scroll
*
2
][
0
]
!=
':'
));
(
items
[
scroll
*
2
][
0
]
!=
':'
));
}
else
{
}
else
{
if
(
choice
>
0
)
if
(
choice
>
0
)
choice
--
;
choice
--
;
...
@@ -356,17 +356,17 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
...
@@ -356,17 +356,17 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
}
else
if
(
key
==
KEY_NPAGE
)
{
}
else
if
(
key
==
KEY_NPAGE
)
{
for
(
i
=
0
;
(
i
<
max_choice
);
i
++
)
{
for
(
i
=
0
;
(
i
<
max_choice
);
i
++
)
{
if
(
scroll
+
max_choice
<
item_no
)
{
if
(
scroll
+
max_choice
<
item_no
)
{
scrollok
(
menu
,
TRUE
);
scrollok
(
menu
,
TRUE
);
scroll
(
menu
);
scroll
(
menu
);
scrollok
(
menu
,
FALSE
);
scrollok
(
menu
,
FALSE
);
scroll
++
;
scroll
++
;
print_item
(
menu
,
items
[(
scroll
+
max_choice
-
1
)
*
2
+
1
],
print_item
(
menu
,
items
[(
scroll
+
max_choice
-
1
)
*
2
+
1
],
max_choice
-
1
,
FALSE
,
max_choice
-
1
,
FALSE
,
(
items
[(
scroll
+
max_choice
-
1
)
*
2
][
0
]
!=
':'
));
(
items
[(
scroll
+
max_choice
-
1
)
*
2
][
0
]
!=
':'
));
}
else
{
}
else
{
if
(
choice
+
1
<
max_choice
)
if
(
choice
+
1
<
max_choice
)
choice
++
;
choice
++
;
}
}
}
}
}
else
}
else
...
@@ -381,30 +381,30 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
...
@@ -381,30 +381,30 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
wnoutrefresh
(
dialog
);
wnoutrefresh
(
dialog
);
wrefresh
(
menu
);
wrefresh
(
menu
);
continue
;
/* wait for another key press */
continue
;
/* wait for another key press */
}
}
switch
(
key
)
{
switch
(
key
)
{
case
KEY_LEFT
:
case
KEY_LEFT
:
case
TAB
:
case
TAB
:
case
KEY_RIGHT
:
case
KEY_RIGHT
:
button
=
((
key
==
KEY_LEFT
?
--
button
:
++
button
)
<
0
)
button
=
((
key
==
KEY_LEFT
?
--
button
:
++
button
)
<
0
)
?
2
:
(
button
>
2
?
0
:
button
);
?
2
:
(
button
>
2
?
0
:
button
);
print_buttons
(
dialog
,
height
,
width
,
button
);
print_buttons
(
dialog
,
height
,
width
,
button
);
wrefresh
(
menu
);
wrefresh
(
menu
);
break
;
break
;
case
' '
:
case
' '
:
case
's'
:
case
's'
:
case
'y'
:
case
'y'
:
case
'n'
:
case
'n'
:
case
'm'
:
case
'm'
:
/* save scroll info */
/* save scroll info */
if
(
(
f
=
fopen
(
"lxdialog.scrltmp"
,
"w"
))
!=
NULL
)
{
if
(
(
f
=
fopen
(
"lxdialog.scrltmp"
,
"w"
))
!=
NULL
)
{
fprintf
(
f
,
"%d
\n
"
,
scroll
);
fprintf
(
f
,
"%d
\n
"
,
scroll
);
fclose
(
f
);
fclose
(
f
);
}
}
delwin
(
dialog
);
delwin
(
dialog
);
fprintf
(
stderr
,
"%s
\n
"
,
items
[(
scroll
+
choice
)
*
2
]);
fprintf
(
stderr
,
"%s
\n
"
,
items
[(
scroll
+
choice
)
*
2
]);
switch
(
key
)
{
switch
(
key
)
{
case
's'
:
return
3
;
case
's'
:
return
3
;
...
@@ -413,31 +413,31 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
...
@@ -413,31 +413,31 @@ dialog_menu (const char *title, const char *prompt, int height, int width,
case
'm'
:
return
5
;
case
'm'
:
return
5
;
case
' '
:
return
6
;
case
' '
:
return
6
;
}
}
return
0
;
return
0
;
case
'h'
:
case
'h'
:
case
'?'
:
case
'?'
:
button
=
2
;
button
=
2
;
case
'\n'
:
case
'\n'
:
delwin
(
dialog
);
delwin
(
dialog
);
if
(
button
==
2
)
if
(
button
==
2
)
fprintf
(
stderr
,
"%s
\"
%s
\"\n
"
,
fprintf
(
stderr
,
"%s
\"
%s
\"\n
"
,
items
[(
scroll
+
choice
)
*
2
],
items
[(
scroll
+
choice
)
*
2
],
items
[(
scroll
+
choice
)
*
2
+
1
]
+
items
[(
scroll
+
choice
)
*
2
+
1
]
+
first_alpha
(
items
[(
scroll
+
choice
)
*
2
+
1
],
""
));
first_alpha
(
items
[(
scroll
+
choice
)
*
2
+
1
],
""
));
else
else
fprintf
(
stderr
,
"%s
\n
"
,
items
[(
scroll
+
choice
)
*
2
]);
fprintf
(
stderr
,
"%s
\n
"
,
items
[(
scroll
+
choice
)
*
2
]);
remove
(
"lxdialog.scrltmp"
);
remove
(
"lxdialog.scrltmp"
);
return
button
;
return
button
;
case
'e'
:
case
'e'
:
case
'x'
:
case
'x'
:
key
=
ESC
;
key
=
ESC
;
case
ESC
:
case
ESC
:
break
;
break
;
}
}
}
}
delwin
(
dialog
);
delwin
(
dialog
);
remove
(
"lxdialog.scrltmp"
);
remove
(
"lxdialog.scrltmp"
);
return
-
1
;
/* ESC pressed */
return
-
1
;
/* ESC pressed */
}
}
lxdialog/msgbox.c
View file @
f102b577
...
@@ -27,7 +27,7 @@
...
@@ -27,7 +27,7 @@
*/
*/
int
int
dialog_msgbox
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
width
,
dialog_msgbox
(
const
char
*
title
,
const
char
*
prompt
,
int
height
,
int
width
,
int
pause
)
int
pause
)
{
{
int
i
,
x
,
y
,
key
=
0
;
int
i
,
x
,
y
,
key
=
0
;
WINDOW
*
dialog
;
WINDOW
*
dialog
;
...
@@ -44,40 +44,40 @@ dialog_msgbox (const char *title, const char *prompt, int height, int width,
...
@@ -44,40 +44,40 @@ dialog_msgbox (const char *title, const char *prompt, int height, int width,
draw_box
(
dialog
,
0
,
0
,
height
,
width
,
dialog_attr
,
border_attr
);
draw_box
(
dialog
,
0
,
0
,
height
,
width
,
dialog_attr
,
border_attr
);
if
(
title
!=
NULL
&&
strlen
(
title
)
>=
width
-
2
)
{
if
(
title
!=
NULL
&&
strlen
(
title
)
>=
width
-
2
)
{
/* truncate long title -- mec */
/* truncate long title -- mec */
char
*
title2
=
malloc
(
width
-
2
+
1
);
char
*
title2
=
malloc
(
width
-
2
+
1
);
memcpy
(
title2
,
title
,
width
-
2
);
memcpy
(
title2
,
title
,
width
-
2
);
title2
[
width
-
2
]
=
'\0'
;
title2
[
width
-
2
]
=
'\0'
;
title
=
title2
;
title
=
title2
;
}
}
if
(
title
!=
NULL
)
{
if
(
title
!=
NULL
)
{
wattrset
(
dialog
,
title_attr
);
wattrset
(
dialog
,
title_attr
);
mvwaddch
(
dialog
,
0
,
(
width
-
strlen
(
title
))
/
2
-
1
,
' '
);
mvwaddch
(
dialog
,
0
,
(
width
-
strlen
(
title
))
/
2
-
1
,
' '
);
waddstr
(
dialog
,
(
char
*
)
title
);
waddstr
(
dialog
,
(
char
*
)
title
);
waddch
(
dialog
,
' '
);
waddch
(
dialog
,
' '
);
}
}
wattrset
(
dialog
,
dialog_attr
);
wattrset
(
dialog
,
dialog_attr
);
print_autowrap
(
dialog
,
prompt
,
width
-
2
,
1
,
2
);
print_autowrap
(
dialog
,
prompt
,
width
-
2
,
1
,
2
);
if
(
pause
)
{
if
(
pause
)
{
wattrset
(
dialog
,
border_attr
);
wattrset
(
dialog
,
border_attr
);
mvwaddch
(
dialog
,
height
-
3
,
0
,
ACS_LTEE
);
mvwaddch
(
dialog
,
height
-
3
,
0
,
ACS_LTEE
);
for
(
i
=
0
;
i
<
width
-
2
;
i
++
)
for
(
i
=
0
;
i
<
width
-
2
;
i
++
)
waddch
(
dialog
,
ACS_HLINE
);
waddch
(
dialog
,
ACS_HLINE
);
wattrset
(
dialog
,
dialog_attr
);
wattrset
(
dialog
,
dialog_attr
);
waddch
(
dialog
,
ACS_RTEE
);
waddch
(
dialog
,
ACS_RTEE
);
print_button
(
dialog
,
" Ok "
,
print_button
(
dialog
,
" Ok "
,
height
-
2
,
width
/
2
-
4
,
TRUE
);
height
-
2
,
width
/
2
-
4
,
TRUE
);
wrefresh
(
dialog
);
wrefresh
(
dialog
);
while
(
key
!=
ESC
&&
key
!=
'\n'
&&
key
!=
' '
&&
while
(
key
!=
ESC
&&
key
!=
'\n'
&&
key
!=
' '
&&
key
!=
'O'
&&
key
!=
'o'
&&
key
!=
'X'
&&
key
!=
'x'
)
key
!=
'O'
&&
key
!=
'o'
&&
key
!=
'X'
&&
key
!=
'x'
)
key
=
wgetch
(
dialog
);
key
=
wgetch
(
dialog
);
}
else
{
}
else
{
key
=
'\n'
;
key
=
'\n'
;
wrefresh
(
dialog
);
wrefresh
(
dialog
);
}
}
delwin
(
dialog
);
delwin
(
dialog
);
...
...
lxdialog/textbox.c
View file @
f102b577
...
@@ -42,41 +42,41 @@ dialog_textbox (const char *title, const char *file, int height, int width)
...
@@ -42,41 +42,41 @@ dialog_textbox (const char *title, const char *file, int height, int width)
char
search_term
[
MAX_LEN
+
1
];
char
search_term
[
MAX_LEN
+
1
];
WINDOW
*
dialog
,
*
text
;
WINDOW
*
dialog
,
*
text
;
search_term
[
0
]
=
'\0'
;
/* no search term entered yet */
search_term
[
0
]
=
'\0'
;
/* no search term entered yet */
/* Open input file for reading */
/* Open input file for reading */
if
((
fd
=
open
(
file
,
O_RDONLY
))
==
-
1
)
{
if
((
fd
=
open
(
file
,
O_RDONLY
))
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
fprintf
(
stderr
,
"
\n
Can't open input file in dialog_textbox().
\n
"
);
"
\n
Can't open input file in dialog_textbox().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
/* Get file size. Actually, 'file_size' is the real file size - 1,
/* Get file size. Actually, 'file_size' is the real file size - 1,
since it's only the last byte offset from the beginning */
since it's only the last byte offset from the beginning */
if
((
file_size
=
lseek
(
fd
,
0
,
SEEK_END
))
==
-
1
)
{
if
((
file_size
=
lseek
(
fd
,
0
,
SEEK_END
))
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
"
\n
Error getting file size in dialog_textbox().
\n
"
);
fprintf
(
stderr
,
"
\n
Error getting file size in dialog_textbox().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
/* Restore file pointer to beginning of file after getting file size */
/* Restore file pointer to beginning of file after getting file size */
if
(
lseek
(
fd
,
0
,
SEEK_SET
)
==
-
1
)
{
if
(
lseek
(
fd
,
0
,
SEEK_SET
)
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
"
\n
Error moving file pointer in dialog_textbox().
\n
"
);
fprintf
(
stderr
,
"
\n
Error moving file pointer in dialog_textbox().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
/* Allocate space for read buffer */
/* Allocate space for read buffer */
if
((
buf
=
malloc
(
BUF_SIZE
+
1
))
==
NULL
)
{
if
((
buf
=
malloc
(
BUF_SIZE
+
1
))
==
NULL
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
"
\n
Can't allocate memory in dialog_textbox().
\n
"
);
fprintf
(
stderr
,
"
\n
Can't allocate memory in dialog_textbox().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
if
((
bytes_read
=
read
(
fd
,
buf
,
BUF_SIZE
))
==
-
1
)
{
if
((
bytes_read
=
read
(
fd
,
buf
,
BUF_SIZE
))
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
"
\n
Error reading file in dialog_textbox().
\n
"
);
fprintf
(
stderr
,
"
\n
Error reading file in dialog_textbox().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
buf
[
bytes_read
]
=
'\0'
;
/* mark end of valid data */
buf
[
bytes_read
]
=
'\0'
;
/* mark end of valid data */
page
=
buf
;
/* page is pointer to start of page to be displayed */
page
=
buf
;
/* page is pointer to start of page to be displayed */
/* center dialog box on screen */
/* center dialog box on screen */
x
=
(
COLS
-
width
)
/
2
;
x
=
(
COLS
-
width
)
/
2
;
...
@@ -101,223 +101,223 @@ dialog_textbox (const char *title, const char *file, int height, int width)
...
@@ -101,223 +101,223 @@ dialog_textbox (const char *title, const char *file, int height, int width)
wattrset
(
dialog
,
border_attr
);
wattrset
(
dialog
,
border_attr
);
mvwaddch
(
dialog
,
height
-
3
,
0
,
ACS_LTEE
);
mvwaddch
(
dialog
,
height
-
3
,
0
,
ACS_LTEE
);
for
(
i
=
0
;
i
<
width
-
2
;
i
++
)
for
(
i
=
0
;
i
<
width
-
2
;
i
++
)
waddch
(
dialog
,
ACS_HLINE
);
waddch
(
dialog
,
ACS_HLINE
);
wattrset
(
dialog
,
dialog_attr
);
wattrset
(
dialog
,
dialog_attr
);
wbkgdset
(
dialog
,
dialog_attr
&
A_COLOR
);
wbkgdset
(
dialog
,
dialog_attr
&
A_COLOR
);
waddch
(
dialog
,
ACS_RTEE
);
waddch
(
dialog
,
ACS_RTEE
);
if
(
title
!=
NULL
&&
strlen
(
title
)
>=
width
-
2
)
{
if
(
title
!=
NULL
&&
strlen
(
title
)
>=
width
-
2
)
{
/* truncate long title -- mec */
/* truncate long title -- mec */
char
*
title2
=
malloc
(
width
-
2
+
1
);
char
*
title2
=
malloc
(
width
-
2
+
1
);
memcpy
(
title2
,
title
,
width
-
2
);
memcpy
(
title2
,
title
,
width
-
2
);
title2
[
width
-
2
]
=
'\0'
;
title2
[
width
-
2
]
=
'\0'
;
title
=
title2
;
title
=
title2
;
}
}
if
(
title
!=
NULL
)
{
if
(
title
!=
NULL
)
{
wattrset
(
dialog
,
title_attr
);
wattrset
(
dialog
,
title_attr
);
mvwaddch
(
dialog
,
0
,
(
width
-
strlen
(
title
))
/
2
-
1
,
' '
);
mvwaddch
(
dialog
,
0
,
(
width
-
strlen
(
title
))
/
2
-
1
,
' '
);
waddstr
(
dialog
,
(
char
*
)
title
);
waddstr
(
dialog
,
(
char
*
)
title
);
waddch
(
dialog
,
' '
);
waddch
(
dialog
,
' '
);
}
}
print_button
(
dialog
,
" Exit "
,
height
-
2
,
width
/
2
-
4
,
TRUE
);
print_button
(
dialog
,
" Exit "
,
height
-
2
,
width
/
2
-
4
,
TRUE
);
wnoutrefresh
(
dialog
);
wnoutrefresh
(
dialog
);
getyx
(
dialog
,
cur_y
,
cur_x
);
/* Save cursor position */
getyx
(
dialog
,
cur_y
,
cur_x
);
/* Save cursor position */
/* Print first page of text */
/* Print first page of text */
attr_clear
(
text
,
height
-
4
,
width
-
2
,
dialog_attr
);
attr_clear
(
text
,
height
-
4
,
width
-
2
,
dialog_attr
);
print_page
(
text
,
height
-
4
,
width
-
2
);
print_page
(
text
,
height
-
4
,
width
-
2
);
print_position
(
dialog
,
height
,
width
);
print_position
(
dialog
,
height
,
width
);
wmove
(
dialog
,
cur_y
,
cur_x
);
/* Restore cursor position */
wmove
(
dialog
,
cur_y
,
cur_x
);
/* Restore cursor position */
wrefresh
(
dialog
);
wrefresh
(
dialog
);
while
((
key
!=
ESC
)
&&
(
key
!=
'\n'
))
{
while
((
key
!=
ESC
)
&&
(
key
!=
'\n'
))
{
key
=
wgetch
(
dialog
);
key
=
wgetch
(
dialog
);
switch
(
key
)
{
switch
(
key
)
{
case
'E'
:
/* Exit */
case
'E'
:
/* Exit */
case
'e'
:
case
'e'
:
case
'X'
:
case
'X'
:
case
'x'
:
case
'x'
:
delwin
(
dialog
);
delwin
(
dialog
);
free
(
buf
);
free
(
buf
);
close
(
fd
);
close
(
fd
);
return
0
;
return
0
;
case
'g'
:
/* First page */
case
'g'
:
/* First page */
case
KEY_HOME
:
case
KEY_HOME
:
if
(
!
begin_reached
)
{
if
(
!
begin_reached
)
{
begin_reached
=
1
;
begin_reached
=
1
;
/* First page not in buffer? */
/* First page not in buffer? */
if
((
fpos
=
lseek
(
fd
,
0
,
SEEK_CUR
))
==
-
1
)
{
if
((
fpos
=
lseek
(
fd
,
0
,
SEEK_CUR
))
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
fprintf
(
stderr
,
"
\n
Error moving file pointer in dialog_textbox().
\n
"
);
"
\n
Error moving file pointer in dialog_textbox().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
if
(
fpos
>
bytes_read
)
{
/* Yes, we have to read it in */
if
(
fpos
>
bytes_read
)
{
/* Yes, we have to read it in */
if
(
lseek
(
fd
,
0
,
SEEK_SET
)
==
-
1
)
{
if
(
lseek
(
fd
,
0
,
SEEK_SET
)
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
"
\n
Error moving file pointer in "
fprintf
(
stderr
,
"
\n
Error moving file pointer in "
"dialog_textbox().
\n
"
);
"dialog_textbox().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
if
((
bytes_read
=
read
(
fd
,
buf
,
BUF_SIZE
))
==
-
1
)
{
if
((
bytes_read
=
read
(
fd
,
buf
,
BUF_SIZE
))
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
fprintf
(
stderr
,
"
\n
Error reading file in dialog_textbox().
\n
"
);
"
\n
Error reading file in dialog_textbox().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
buf
[
bytes_read
]
=
'\0'
;
buf
[
bytes_read
]
=
'\0'
;
}
}
page
=
buf
;
page
=
buf
;
print_page
(
text
,
height
-
4
,
width
-
2
);
print_page
(
text
,
height
-
4
,
width
-
2
);
print_position
(
dialog
,
height
,
width
);
print_position
(
dialog
,
height
,
width
);
wmove
(
dialog
,
cur_y
,
cur_x
);
/* Restore cursor position */
wmove
(
dialog
,
cur_y
,
cur_x
);
/* Restore cursor position */
wrefresh
(
dialog
);
wrefresh
(
dialog
);
}
}
break
;
break
;
case
'G'
:
/* Last page */
case
'G'
:
/* Last page */
case
KEY_END
:
case
KEY_END
:
end_reached
=
1
;
end_reached
=
1
;
/* Last page not in buffer? */
/* Last page not in buffer? */
if
((
fpos
=
lseek
(
fd
,
0
,
SEEK_CUR
))
==
-
1
)
{
if
((
fpos
=
lseek
(
fd
,
0
,
SEEK_CUR
))
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
fprintf
(
stderr
,
"
\n
Error moving file pointer in dialog_textbox().
\n
"
);
"
\n
Error moving file pointer in dialog_textbox().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
if
(
fpos
<
file_size
)
{
/* Yes, we have to read it in */
if
(
fpos
<
file_size
)
{
/* Yes, we have to read it in */
if
(
lseek
(
fd
,
-
BUF_SIZE
,
SEEK_END
)
==
-
1
)
{
if
(
lseek
(
fd
,
-
BUF_SIZE
,
SEEK_END
)
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
fprintf
(
stderr
,
"
\n
Error moving file pointer in dialog_textbox().
\n
"
);
"
\n
Error moving file pointer in dialog_textbox().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
if
((
bytes_read
=
read
(
fd
,
buf
,
BUF_SIZE
))
==
-
1
)
{
if
((
bytes_read
=
read
(
fd
,
buf
,
BUF_SIZE
))
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
fprintf
(
stderr
,
"
\n
Error reading file in dialog_textbox().
\n
"
);
"
\n
Error reading file in dialog_textbox().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
buf
[
bytes_read
]
=
'\0'
;
buf
[
bytes_read
]
=
'\0'
;
}
}
page
=
buf
+
bytes_read
;
page
=
buf
+
bytes_read
;
back_lines
(
height
-
4
);
back_lines
(
height
-
4
);
print_page
(
text
,
height
-
4
,
width
-
2
);
print_page
(
text
,
height
-
4
,
width
-
2
);
print_position
(
dialog
,
height
,
width
);
print_position
(
dialog
,
height
,
width
);
wmove
(
dialog
,
cur_y
,
cur_x
);
/* Restore cursor position */
wmove
(
dialog
,
cur_y
,
cur_x
);
/* Restore cursor position */
wrefresh
(
dialog
);
wrefresh
(
dialog
);
break
;
break
;
case
'K'
:
/* Previous line */
case
'K'
:
/* Previous line */
case
'k'
:
case
'k'
:
case
KEY_UP
:
case
KEY_UP
:
if
(
!
begin_reached
)
{
if
(
!
begin_reached
)
{
back_lines
(
page_length
+
1
);
back_lines
(
page_length
+
1
);
/* We don't call print_page() here but use scrolling to ensure
/* We don't call print_page() here but use scrolling to ensure
faster screen update. However, 'end_reached' and
faster screen update. However, 'end_reached' and
'page_length' should still be updated, and 'page' should
'page_length' should still be updated, and 'page' should
point to start of next page. This is done by calling
point to start of next page. This is done by calling
get_line() in the following 'for' loop. */
get_line() in the following 'for' loop. */
scrollok
(
text
,
TRUE
);
scrollok
(
text
,
TRUE
);
wscrl
(
text
,
-
1
);
/* Scroll text region down one line */
wscrl
(
text
,
-
1
);
/* Scroll text region down one line */
scrollok
(
text
,
FALSE
);
scrollok
(
text
,
FALSE
);
page_length
=
0
;
page_length
=
0
;
passed_end
=
0
;
passed_end
=
0
;
for
(
i
=
0
;
i
<
height
-
4
;
i
++
)
{
for
(
i
=
0
;
i
<
height
-
4
;
i
++
)
{
if
(
!
i
)
{
if
(
!
i
)
{
/* print first line of page */
/* print first line of page */
print_line
(
text
,
0
,
width
-
2
);
print_line
(
text
,
0
,
width
-
2
);
wnoutrefresh
(
text
);
wnoutrefresh
(
text
);
}
else
}
else
/* Called to update 'end_reached' and 'page' */
/* Called to update 'end_reached' and 'page' */
get_line
();
get_line
();
if
(
!
passed_end
)
if
(
!
passed_end
)
page_length
++
;
page_length
++
;
if
(
end_reached
&&
!
passed_end
)
if
(
end_reached
&&
!
passed_end
)
passed_end
=
1
;
passed_end
=
1
;
}
}
print_position
(
dialog
,
height
,
width
);
print_position
(
dialog
,
height
,
width
);
wmove
(
dialog
,
cur_y
,
cur_x
);
/* Restore cursor position */
wmove
(
dialog
,
cur_y
,
cur_x
);
/* Restore cursor position */
wrefresh
(
dialog
);
wrefresh
(
dialog
);
}
}
break
;
break
;
case
'B'
:
/* Previous page */
case
'B'
:
/* Previous page */
case
'b'
:
case
'b'
:
case
KEY_PPAGE
:
case
KEY_PPAGE
:
if
(
begin_reached
)
if
(
begin_reached
)
break
;
break
;
back_lines
(
page_length
+
height
-
4
);
back_lines
(
page_length
+
height
-
4
);
print_page
(
text
,
height
-
4
,
width
-
2
);
print_page
(
text
,
height
-
4
,
width
-
2
);
print_position
(
dialog
,
height
,
width
);
print_position
(
dialog
,
height
,
width
);
wmove
(
dialog
,
cur_y
,
cur_x
);
wmove
(
dialog
,
cur_y
,
cur_x
);
wrefresh
(
dialog
);
wrefresh
(
dialog
);
break
;
break
;
case
'J'
:
/* Next line */
case
'J'
:
/* Next line */
case
'j'
:
case
'j'
:
case
KEY_DOWN
:
case
KEY_DOWN
:
if
(
!
end_reached
)
{
if
(
!
end_reached
)
{
begin_reached
=
0
;
begin_reached
=
0
;
scrollok
(
text
,
TRUE
);
scrollok
(
text
,
TRUE
);
scroll
(
text
);
/* Scroll text region up one line */
scroll
(
text
);
/* Scroll text region up one line */
scrollok
(
text
,
FALSE
);
scrollok
(
text
,
FALSE
);
print_line
(
text
,
height
-
5
,
width
-
2
);
print_line
(
text
,
height
-
5
,
width
-
2
);
wnoutrefresh
(
text
);
wnoutrefresh
(
text
);
print_position
(
dialog
,
height
,
width
);
print_position
(
dialog
,
height
,
width
);
wmove
(
dialog
,
cur_y
,
cur_x
);
/* Restore cursor position */
wmove
(
dialog
,
cur_y
,
cur_x
);
/* Restore cursor position */
wrefresh
(
dialog
);
wrefresh
(
dialog
);
}
}
break
;
break
;
case
KEY_NPAGE
:
/* Next page */
case
KEY_NPAGE
:
/* Next page */
case
' '
:
case
' '
:
if
(
end_reached
)
if
(
end_reached
)
break
;
break
;
begin_reached
=
0
;
begin_reached
=
0
;
print_page
(
text
,
height
-
4
,
width
-
2
);
print_page
(
text
,
height
-
4
,
width
-
2
);
print_position
(
dialog
,
height
,
width
);
print_position
(
dialog
,
height
,
width
);
wmove
(
dialog
,
cur_y
,
cur_x
);
wmove
(
dialog
,
cur_y
,
cur_x
);
wrefresh
(
dialog
);
wrefresh
(
dialog
);
break
;
break
;
case
'0'
:
/* Beginning of line */
case
'0'
:
/* Beginning of line */
case
'H'
:
/* Scroll left */
case
'H'
:
/* Scroll left */
case
'h'
:
case
'h'
:
case
KEY_LEFT
:
case
KEY_LEFT
:
if
(
hscroll
<=
0
)
if
(
hscroll
<=
0
)
break
;
break
;
if
(
key
==
'0'
)
if
(
key
==
'0'
)
hscroll
=
0
;
hscroll
=
0
;
else
else
hscroll
--
;
hscroll
--
;
/* Reprint current page to scroll horizontally */
/* Reprint current page to scroll horizontally */
back_lines
(
page_length
);
back_lines
(
page_length
);
print_page
(
text
,
height
-
4
,
width
-
2
);
print_page
(
text
,
height
-
4
,
width
-
2
);
wmove
(
dialog
,
cur_y
,
cur_x
);
wmove
(
dialog
,
cur_y
,
cur_x
);
wrefresh
(
dialog
);
wrefresh
(
dialog
);
break
;
break
;
case
'L'
:
/* Scroll right */
case
'L'
:
/* Scroll right */
case
'l'
:
case
'l'
:
case
KEY_RIGHT
:
case
KEY_RIGHT
:
if
(
hscroll
>=
MAX_LEN
)
if
(
hscroll
>=
MAX_LEN
)
break
;
break
;
hscroll
++
;
hscroll
++
;
/* Reprint current page to scroll horizontally */
/* Reprint current page to scroll horizontally */
back_lines
(
page_length
);
back_lines
(
page_length
);
print_page
(
text
,
height
-
4
,
width
-
2
);
print_page
(
text
,
height
-
4
,
width
-
2
);
wmove
(
dialog
,
cur_y
,
cur_x
);
wmove
(
dialog
,
cur_y
,
cur_x
);
wrefresh
(
dialog
);
wrefresh
(
dialog
);
break
;
break
;
case
ESC
:
case
ESC
:
break
;
break
;
}
}
}
}
delwin
(
dialog
);
delwin
(
dialog
);
free
(
buf
);
free
(
buf
);
close
(
fd
);
close
(
fd
);
return
-
1
;
/* ESC pressed */
return
-
1
;
/* ESC pressed */
}
}
/*
/*
...
@@ -335,102 +335,102 @@ back_lines (int n)
...
@@ -335,102 +335,102 @@ back_lines (int n)
The code inside 'if' basically does a '--page' to move one
The code inside 'if' basically does a '--page' to move one
character backward so as to skip '\n' of the previous line */
character backward so as to skip '\n' of the previous line */
if
(
!
end_reached
)
{
if
(
!
end_reached
)
{
/* Either beginning of buffer or beginning of file reached? */
/* Either beginning of buffer or beginning of file reached? */
if
(
page
==
buf
)
{
if
(
page
==
buf
)
{
if
((
fpos
=
lseek
(
fd
,
0
,
SEEK_CUR
))
==
-
1
)
{
if
((
fpos
=
lseek
(
fd
,
0
,
SEEK_CUR
))
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
"
\n
Error moving file pointer in "
fprintf
(
stderr
,
"
\n
Error moving file pointer in "
"back_lines().
\n
"
);
"back_lines().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
if
(
fpos
>
bytes_read
)
{
/* Not beginning of file yet */
if
(
fpos
>
bytes_read
)
{
/* Not beginning of file yet */
/* We've reached beginning of buffer, but not beginning of
/* We've reached beginning of buffer, but not beginning of
file yet, so read previous part of file into buffer.
file yet, so read previous part of file into buffer.
Note that we only move backward for BUF_SIZE/2 bytes,
Note that we only move backward for BUF_SIZE/2 bytes,
but not BUF_SIZE bytes to avoid re-reading again in
but not BUF_SIZE bytes to avoid re-reading again in
print_page() later */
print_page() later */
/* Really possible to move backward BUF_SIZE/2 bytes? */
/* Really possible to move backward BUF_SIZE/2 bytes? */
if
(
fpos
<
BUF_SIZE
/
2
+
bytes_read
)
{
if
(
fpos
<
BUF_SIZE
/
2
+
bytes_read
)
{
/* No, move less then */
/* No, move less then */
if
(
lseek
(
fd
,
0
,
SEEK_SET
)
==
-
1
)
{
if
(
lseek
(
fd
,
0
,
SEEK_SET
)
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
"
\n
Error moving file pointer in "
fprintf
(
stderr
,
"
\n
Error moving file pointer in "
"back_lines().
\n
"
);
"back_lines().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
page
=
buf
+
fpos
-
bytes_read
;
page
=
buf
+
fpos
-
bytes_read
;
}
else
{
/* Move backward BUF_SIZE/2 bytes */
}
else
{
/* Move backward BUF_SIZE/2 bytes */
if
(
lseek
(
fd
,
-
(
BUF_SIZE
/
2
+
bytes_read
),
SEEK_CUR
)
if
(
lseek
(
fd
,
-
(
BUF_SIZE
/
2
+
bytes_read
),
SEEK_CUR
)
==
-
1
)
{
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
"
\n
Error moving file pointer "
fprintf
(
stderr
,
"
\n
Error moving file pointer "
"in back_lines().
\n
"
);
"in back_lines().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
page
=
buf
+
BUF_SIZE
/
2
;
page
=
buf
+
BUF_SIZE
/
2
;
}
}
if
((
bytes_read
=
read
(
fd
,
buf
,
BUF_SIZE
))
==
-
1
)
{
if
((
bytes_read
=
read
(
fd
,
buf
,
BUF_SIZE
))
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
"
\n
Error reading file in back_lines().
\n
"
);
fprintf
(
stderr
,
"
\n
Error reading file in back_lines().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
buf
[
bytes_read
]
=
'\0'
;
buf
[
bytes_read
]
=
'\0'
;
}
else
{
/* Beginning of file reached */
}
else
{
/* Beginning of file reached */
begin_reached
=
1
;
begin_reached
=
1
;
return
;
return
;
}
}
}
}
if
(
*
(
--
page
)
!=
'\n'
)
{
/* '--page' here */
if
(
*
(
--
page
)
!=
'\n'
)
{
/* '--page' here */
/* Something's wrong... */
/* Something's wrong... */
endwin
();
endwin
();
fprintf
(
stderr
,
"
\n
Internal error in back_lines().
\n
"
);
fprintf
(
stderr
,
"
\n
Internal error in back_lines().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
}
}
/* Go back 'n' lines */
/* Go back 'n' lines */
for
(
i
=
0
;
i
<
n
;
i
++
)
for
(
i
=
0
;
i
<
n
;
i
++
)
do
{
do
{
if
(
page
==
buf
)
{
if
(
page
==
buf
)
{
if
((
fpos
=
lseek
(
fd
,
0
,
SEEK_CUR
))
==
-
1
)
{
if
((
fpos
=
lseek
(
fd
,
0
,
SEEK_CUR
))
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
fprintf
(
stderr
,
"
\n
Error moving file pointer in back_lines().
\n
"
);
"
\n
Error moving file pointer in back_lines().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
if
(
fpos
>
bytes_read
)
{
if
(
fpos
>
bytes_read
)
{
/* Really possible to move backward BUF_SIZE/2 bytes? */
/* Really possible to move backward BUF_SIZE/2 bytes? */
if
(
fpos
<
BUF_SIZE
/
2
+
bytes_read
)
{
if
(
fpos
<
BUF_SIZE
/
2
+
bytes_read
)
{
/* No, move less then */
/* No, move less then */
if
(
lseek
(
fd
,
0
,
SEEK_SET
)
==
-
1
)
{
if
(
lseek
(
fd
,
0
,
SEEK_SET
)
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
"
\n
Error moving file pointer "
fprintf
(
stderr
,
"
\n
Error moving file pointer "
"in back_lines().
\n
"
);
"in back_lines().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
page
=
buf
+
fpos
-
bytes_read
;
page
=
buf
+
fpos
-
bytes_read
;
}
else
{
/* Move backward BUF_SIZE/2 bytes */
}
else
{
/* Move backward BUF_SIZE/2 bytes */
if
(
lseek
(
fd
,
-
(
BUF_SIZE
/
2
+
bytes_read
),
if
(
lseek
(
fd
,
-
(
BUF_SIZE
/
2
+
bytes_read
),
SEEK_CUR
)
==
-
1
)
{
SEEK_CUR
)
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
"
\n
Error moving file pointer"
fprintf
(
stderr
,
"
\n
Error moving file pointer"
" in back_lines().
\n
"
);
" in back_lines().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
page
=
buf
+
BUF_SIZE
/
2
;
page
=
buf
+
BUF_SIZE
/
2
;
}
}
if
((
bytes_read
=
read
(
fd
,
buf
,
BUF_SIZE
))
==
-
1
)
{
if
((
bytes_read
=
read
(
fd
,
buf
,
BUF_SIZE
))
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
"
\n
Error reading file in "
fprintf
(
stderr
,
"
\n
Error reading file in "
"back_lines().
\n
"
);
"back_lines().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
buf
[
bytes_read
]
=
'\0'
;
buf
[
bytes_read
]
=
'\0'
;
}
else
{
/* Beginning of file reached */
}
else
{
/* Beginning of file reached */
begin_reached
=
1
;
begin_reached
=
1
;
return
;
return
;
}
}
}
}
}
while
(
*
(
--
page
)
!=
'\n'
);
}
while
(
*
(
--
page
)
!=
'\n'
);
page
++
;
page
++
;
}
}
...
@@ -444,11 +444,11 @@ print_page (WINDOW * win, int height, int width)
...
@@ -444,11 +444,11 @@ print_page (WINDOW * win, int height, int width)
page_length
=
0
;
page_length
=
0
;
for
(
i
=
0
;
i
<
height
;
i
++
)
{
for
(
i
=
0
;
i
<
height
;
i
++
)
{
print_line
(
win
,
i
,
width
);
print_line
(
win
,
i
,
width
);
if
(
!
passed_end
)
if
(
!
passed_end
)
page_length
++
;
page_length
++
;
if
(
end_reached
&&
!
passed_end
)
if
(
end_reached
&&
!
passed_end
)
passed_end
=
1
;
passed_end
=
1
;
}
}
wnoutrefresh
(
win
);
wnoutrefresh
(
win
);
}
}
...
@@ -463,8 +463,8 @@ print_line (WINDOW * win, int row, int width)
...
@@ -463,8 +463,8 @@ print_line (WINDOW * win, int row, int width)
char
*
line
;
char
*
line
;
line
=
get_line
();
line
=
get_line
();
line
+=
MIN
(
strlen
(
line
),
hscroll
);
/* Scroll horizontally */
line
+=
MIN
(
strlen
(
line
),
hscroll
);
/* Scroll horizontally */
wmove
(
win
,
row
,
0
);
/* move cursor to correct line */
wmove
(
win
,
row
,
0
);
/* move cursor to correct line */
waddch
(
win
,
' '
);
waddch
(
win
,
' '
);
waddnstr
(
win
,
line
,
MIN
(
strlen
(
line
),
width
-
2
));
waddnstr
(
win
,
line
,
MIN
(
strlen
(
line
),
width
-
2
));
...
@@ -474,7 +474,7 @@ print_line (WINDOW * win, int row, int width)
...
@@ -474,7 +474,7 @@ print_line (WINDOW * win, int row, int width)
{
{
int
i
;
int
i
;
for
(
i
=
0
;
i
<
width
-
x
;
i
++
)
for
(
i
=
0
;
i
<
width
-
x
;
i
++
)
waddch
(
win
,
' '
);
waddch
(
win
,
' '
);
}
}
#else
#else
wclrtoeol
(
win
);
wclrtoeol
(
win
);
...
@@ -494,42 +494,42 @@ get_line (void)
...
@@ -494,42 +494,42 @@ get_line (void)
end_reached
=
0
;
end_reached
=
0
;
while
(
*
page
!=
'\n'
)
{
while
(
*
page
!=
'\n'
)
{
if
(
*
page
==
'\0'
)
{
if
(
*
page
==
'\0'
)
{
/* Either end of file or end of buffer reached */
/* Either end of file or end of buffer reached */
if
((
fpos
=
lseek
(
fd
,
0
,
SEEK_CUR
))
==
-
1
)
{
if
((
fpos
=
lseek
(
fd
,
0
,
SEEK_CUR
))
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
"
\n
Error moving file pointer in "
fprintf
(
stderr
,
"
\n
Error moving file pointer in "
"get_line().
\n
"
);
"get_line().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
if
(
fpos
<
file_size
)
{
/* Not end of file yet */
if
(
fpos
<
file_size
)
{
/* Not end of file yet */
/* We've reached end of buffer, but not end of file yet,
/* We've reached end of buffer, but not end of file yet,
so read next part of file into buffer */
so read next part of file into buffer */
if
((
bytes_read
=
read
(
fd
,
buf
,
BUF_SIZE
))
==
-
1
)
{
if
((
bytes_read
=
read
(
fd
,
buf
,
BUF_SIZE
))
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
"
\n
Error reading file in get_line().
\n
"
);
fprintf
(
stderr
,
"
\n
Error reading file in get_line().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
buf
[
bytes_read
]
=
'\0'
;
buf
[
bytes_read
]
=
'\0'
;
page
=
buf
;
page
=
buf
;
}
else
{
}
else
{
if
(
!
end_reached
)
if
(
!
end_reached
)
end_reached
=
1
;
end_reached
=
1
;
break
;
break
;
}
}
}
else
if
(
i
<
MAX_LEN
)
}
else
if
(
i
<
MAX_LEN
)
line
[
i
++
]
=
*
(
page
++
);
line
[
i
++
]
=
*
(
page
++
);
else
{
else
{
/* Truncate lines longer than MAX_LEN characters */
/* Truncate lines longer than MAX_LEN characters */
if
(
i
==
MAX_LEN
)
if
(
i
==
MAX_LEN
)
line
[
i
++
]
=
'\0'
;
line
[
i
++
]
=
'\0'
;
page
++
;
page
++
;
}
}
}
}
if
(
i
<=
MAX_LEN
)
if
(
i
<=
MAX_LEN
)
line
[
i
]
=
'\0'
;
line
[
i
]
=
'\0'
;
if
(
!
end_reached
)
if
(
!
end_reached
)
page
++
;
/* move pass '\n' */
page
++
;
/* move pass '\n' */
return
line
;
return
line
;
}
}
...
@@ -543,14 +543,14 @@ print_position (WINDOW * win, int height, int width)
...
@@ -543,14 +543,14 @@ print_position (WINDOW * win, int height, int width)
int
fpos
,
percent
;
int
fpos
,
percent
;
if
((
fpos
=
lseek
(
fd
,
0
,
SEEK_CUR
))
==
-
1
)
{
if
((
fpos
=
lseek
(
fd
,
0
,
SEEK_CUR
))
==
-
1
)
{
endwin
();
endwin
();
fprintf
(
stderr
,
"
\n
Error moving file pointer in print_position().
\n
"
);
fprintf
(
stderr
,
"
\n
Error moving file pointer in print_position().
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
wattrset
(
win
,
position_indicator_attr
);
wattrset
(
win
,
position_indicator_attr
);
wbkgdset
(
win
,
position_indicator_attr
&
A_COLOR
);
wbkgdset
(
win
,
position_indicator_attr
&
A_COLOR
);
percent
=
!
file_size
?
percent
=
!
file_size
?
100
:
((
fpos
-
bytes_read
+
page
-
buf
)
*
100
)
/
file_size
;
100
:
((
fpos
-
bytes_read
+
page
-
buf
)
*
100
)
/
file_size
;
wmove
(
win
,
height
-
3
,
width
-
9
);
wmove
(
win
,
height
-
3
,
width
-
9
);
wprintw
(
win
,
"(%3d%%)"
,
percent
);
wprintw
(
win
,
"(%3d%%)"
,
percent
);
}
}
lxdialog/util.c
View file @
f102b577
...
@@ -29,40 +29,40 @@ const char *backtitle = NULL;
...
@@ -29,40 +29,40 @@ const char *backtitle = NULL;
const
char
*
dialog_result
;
const
char
*
dialog_result
;
/*
/*
* Attribute values, default is for mono display
* Attribute values, default is for mono display
*/
*/
chtype
attributes
[]
=
chtype
attributes
[]
=
{
{
A_NORMAL
,
/* screen_attr */
A_NORMAL
,
/* screen_attr */
A_NORMAL
,
/* shadow_attr */
A_NORMAL
,
/* shadow_attr */
A_NORMAL
,
/* dialog_attr */
A_NORMAL
,
/* dialog_attr */
A_BOLD
,
/* title_attr */
A_BOLD
,
/* title_attr */
A_NORMAL
,
/* border_attr */
A_NORMAL
,
/* border_attr */
A_REVERSE
,
/* button_active_attr */
A_REVERSE
,
/* button_active_attr */
A_DIM
,
/* button_inactive_attr */
A_DIM
,
/* button_inactive_attr */
A_REVERSE
,
/* button_key_active_attr */
A_REVERSE
,
/* button_key_active_attr */
A_BOLD
,
/* button_key_inactive_attr */
A_BOLD
,
/* button_key_inactive_attr */
A_REVERSE
,
/* button_label_active_attr */
A_REVERSE
,
/* button_label_active_attr */
A_NORMAL
,
/* button_label_inactive_attr */
A_NORMAL
,
/* button_label_inactive_attr */
A_NORMAL
,
/* inputbox_attr */
A_NORMAL
,
/* inputbox_attr */
A_NORMAL
,
/* inputbox_border_attr */
A_NORMAL
,
/* inputbox_border_attr */
A_NORMAL
,
/* searchbox_attr */
A_NORMAL
,
/* searchbox_attr */
A_BOLD
,
/* searchbox_title_attr */
A_BOLD
,
/* searchbox_title_attr */
A_NORMAL
,
/* searchbox_border_attr */
A_NORMAL
,
/* searchbox_border_attr */
A_BOLD
,
/* position_indicator_attr */
A_BOLD
,
/* position_indicator_attr */
A_NORMAL
,
/* menubox_attr */
A_NORMAL
,
/* menubox_attr */
A_NORMAL
,
/* menubox_border_attr */
A_NORMAL
,
/* menubox_border_attr */
A_NORMAL
,
/* item_attr */
A_NORMAL
,
/* item_attr */
A_REVERSE
,
/* item_selected_attr */
A_REVERSE
,
/* item_selected_attr */
A_BOLD
,
/* tag_attr */
A_BOLD
,
/* tag_attr */
A_REVERSE
,
/* tag_selected_attr */
A_REVERSE
,
/* tag_selected_attr */
A_BOLD
,
/* tag_key_attr */
A_BOLD
,
/* tag_key_attr */
A_REVERSE
,
/* tag_key_selected_attr */
A_REVERSE
,
/* tag_key_selected_attr */
A_BOLD
,
/* check_attr */
A_BOLD
,
/* check_attr */
A_REVERSE
,
/* check_selected_attr */
A_REVERSE
,
/* check_selected_attr */
A_BOLD
,
/* uarrow_attr */
A_BOLD
,
/* uarrow_attr */
A_BOLD
/* darrow_attr */
A_BOLD
/* darrow_attr */
};
};
...
@@ -103,7 +103,7 @@ int color_table[][3] =
...
@@ -103,7 +103,7 @@ int color_table[][3] =
{
CHECK_SELECTED_FG
,
CHECK_SELECTED_BG
,
CHECK_SELECTED_HL
},
{
CHECK_SELECTED_FG
,
CHECK_SELECTED_BG
,
CHECK_SELECTED_HL
},
{
UARROW_FG
,
UARROW_BG
,
UARROW_HL
},
{
UARROW_FG
,
UARROW_BG
,
UARROW_HL
},
{
DARROW_FG
,
DARROW_BG
,
DARROW_HL
},
{
DARROW_FG
,
DARROW_BG
,
DARROW_HL
},
};
/* color_table */
};
/* color_table */
/*
/*
* Set window to attribute 'attr'
* Set window to attribute 'attr'
...
@@ -115,9 +115,9 @@ attr_clear (WINDOW * win, int height, int width, chtype attr)
...
@@ -115,9 +115,9 @@ attr_clear (WINDOW * win, int height, int width, chtype attr)
wattrset
(
win
,
attr
);
wattrset
(
win
,
attr
);
for
(
i
=
0
;
i
<
height
;
i
++
)
{
for
(
i
=
0
;
i
<
height
;
i
++
)
{
wmove
(
win
,
i
,
0
);
wmove
(
win
,
i
,
0
);
for
(
j
=
0
;
j
<
width
;
j
++
)
for
(
j
=
0
;
j
<
width
;
j
++
)
waddch
(
win
,
' '
);
waddch
(
win
,
' '
);
}
}
touchwin
(
win
);
touchwin
(
win
);
}
}
...
@@ -144,14 +144,14 @@ void dialog_clear (void)
...
@@ -144,14 +144,14 @@ void dialog_clear (void)
void
void
init_dialog
(
void
)
init_dialog
(
void
)
{
{
initscr
();
/* Init curses */
initscr
();
/* Init curses */
keypad
(
stdscr
,
TRUE
);
keypad
(
stdscr
,
TRUE
);
cbreak
();
cbreak
();
noecho
();
noecho
();
if
(
use_colors
)
/* Set up colors */
if
(
use_colors
)
/* Set up colors */
color_setup
();
color_setup
();
dialog_clear
();
dialog_clear
();
...
@@ -165,16 +165,16 @@ color_setup (void)
...
@@ -165,16 +165,16 @@ color_setup (void)
{
{
int
i
;
int
i
;
if
(
has_colors
())
{
/* Terminal supports color? */
if
(
has_colors
())
{
/* Terminal supports color? */
start_color
();
start_color
();
/* Initialize color pairs */
/* Initialize color pairs */
for
(
i
=
0
;
i
<
ATTRIBUTE_COUNT
;
i
++
)
for
(
i
=
0
;
i
<
ATTRIBUTE_COUNT
;
i
++
)
init_pair
(
i
+
1
,
color_table
[
i
][
0
],
color_table
[
i
][
1
]);
init_pair
(
i
+
1
,
color_table
[
i
][
0
],
color_table
[
i
][
1
]);
/* Setup color attributes */
/* Setup color attributes */
for
(
i
=
0
;
i
<
ATTRIBUTE_COUNT
;
i
++
)
for
(
i
=
0
;
i
<
ATTRIBUTE_COUNT
;
i
++
)
attributes
[
i
]
=
C_ATTR
(
color_table
[
i
][
2
],
i
+
1
);
attributes
[
i
]
=
C_ATTR
(
color_table
[
i
][
2
],
i
+
1
);
}
}
}
}
...
@@ -204,50 +204,50 @@ print_autowrap (WINDOW * win, const char *prompt, int width, int y, int x)
...
@@ -204,50 +204,50 @@ print_autowrap (WINDOW * win, const char *prompt, int width, int y, int x)
strcpy
(
tempstr
,
prompt
);
strcpy
(
tempstr
,
prompt
);
prompt_len
=
strlen
(
tempstr
);
prompt_len
=
strlen
(
tempstr
);
/*
/*
* Remove newlines
* Remove newlines
*/
*/
for
(
i
=
0
;
i
<
prompt_len
;
i
++
)
{
for
(
i
=
0
;
i
<
prompt_len
;
i
++
)
{
if
(
tempstr
[
i
]
==
'\n'
)
tempstr
[
i
]
=
' '
;
if
(
tempstr
[
i
]
==
'\n'
)
tempstr
[
i
]
=
' '
;
}
}
if
(
prompt_len
<=
width
-
x
*
2
)
{
/* If prompt is short */
if
(
prompt_len
<=
width
-
x
*
2
)
{
/* If prompt is short */
wmove
(
win
,
y
,
(
width
-
prompt_len
)
/
2
);
wmove
(
win
,
y
,
(
width
-
prompt_len
)
/
2
);
waddstr
(
win
,
tempstr
);
waddstr
(
win
,
tempstr
);
}
else
{
}
else
{
cur_x
=
x
;
cur_x
=
x
;
cur_y
=
y
;
cur_y
=
y
;
newl
=
1
;
newl
=
1
;
word
=
tempstr
;
word
=
tempstr
;
while
(
word
&&
*
word
)
{
while
(
word
&&
*
word
)
{
sp
=
index
(
word
,
' '
);
sp
=
index
(
word
,
' '
);
if
(
sp
)
if
(
sp
)
*
sp
++
=
0
;
*
sp
++
=
0
;
/* Wrap to next line if either the word does not fit,
/* Wrap to next line if either the word does not fit,
or it is the first word of a new sentence, and it is
or it is the first word of a new sentence, and it is
short, and the next word does not fit. */
short, and the next word does not fit. */
room
=
width
-
cur_x
;
room
=
width
-
cur_x
;
wlen
=
strlen
(
word
);
wlen
=
strlen
(
word
);
if
(
wlen
>
room
||
if
(
wlen
>
room
||
(
newl
&&
wlen
<
4
&&
sp
&&
wlen
+
1
+
strlen
(
sp
)
>
room
(
newl
&&
wlen
<
4
&&
sp
&&
wlen
+
1
+
strlen
(
sp
)
>
room
&&
(
!
(
sp2
=
index
(
sp
,
' '
))
||
wlen
+
1
+
(
sp2
-
sp
)
>
room
)))
{
&&
(
!
(
sp2
=
index
(
sp
,
' '
))
||
wlen
+
1
+
(
sp2
-
sp
)
>
room
)))
{
cur_y
++
;
cur_y
++
;
cur_x
=
x
;
cur_x
=
x
;
}
}
wmove
(
win
,
cur_y
,
cur_x
);
wmove
(
win
,
cur_y
,
cur_x
);
waddstr
(
win
,
word
);
waddstr
(
win
,
word
);
getyx
(
win
,
cur_y
,
cur_x
);
getyx
(
win
,
cur_y
,
cur_x
);
cur_x
++
;
cur_x
++
;
if
(
sp
&&
*
sp
==
' '
)
{
if
(
sp
&&
*
sp
==
' '
)
{
cur_x
++
;
/* double space */
cur_x
++
;
/* double space */
while
(
*++
sp
==
' '
);
while
(
*++
sp
==
' '
);
newl
=
1
;
newl
=
1
;
}
else
}
else
newl
=
0
;
newl
=
0
;
word
=
sp
;
word
=
sp
;
}
}
}
}
}
}
...
@@ -265,14 +265,14 @@ print_button (WINDOW * win, const char *label, int y, int x, int selected)
...
@@ -265,14 +265,14 @@ print_button (WINDOW * win, const char *label, int y, int x, int selected)
temp
=
strspn
(
label
,
" "
);
temp
=
strspn
(
label
,
" "
);
label
+=
temp
;
label
+=
temp
;
wattrset
(
win
,
selected
?
button_label_active_attr
wattrset
(
win
,
selected
?
button_label_active_attr
:
button_label_inactive_attr
);
:
button_label_inactive_attr
);
for
(
i
=
0
;
i
<
temp
;
i
++
)
for
(
i
=
0
;
i
<
temp
;
i
++
)
waddch
(
win
,
' '
);
waddch
(
win
,
' '
);
wattrset
(
win
,
selected
?
button_key_active_attr
wattrset
(
win
,
selected
?
button_key_active_attr
:
button_key_inactive_attr
);
:
button_key_inactive_attr
);
waddch
(
win
,
label
[
0
]);
waddch
(
win
,
label
[
0
]);
wattrset
(
win
,
selected
?
button_label_active_attr
wattrset
(
win
,
selected
?
button_label_active_attr
:
button_label_inactive_attr
);
:
button_label_inactive_attr
);
waddstr
(
win
,
(
char
*
)
label
+
1
);
waddstr
(
win
,
(
char
*
)
label
+
1
);
wattrset
(
win
,
selected
?
button_active_attr
:
button_inactive_attr
);
wattrset
(
win
,
selected
?
button_active_attr
:
button_inactive_attr
);
waddstr
(
win
,
">"
);
waddstr
(
win
,
">"
);
...
@@ -284,32 +284,32 @@ print_button (WINDOW * win, const char *label, int y, int x, int selected)
...
@@ -284,32 +284,32 @@ print_button (WINDOW * win, const char *label, int y, int x, int selected)
*/
*/
void
void
draw_box
(
WINDOW
*
win
,
int
y
,
int
x
,
int
height
,
int
width
,
draw_box
(
WINDOW
*
win
,
int
y
,
int
x
,
int
height
,
int
width
,
chtype
box
,
chtype
border
)
chtype
box
,
chtype
border
)
{
{
int
i
,
j
;
int
i
,
j
;
wattrset
(
win
,
0
);
wattrset
(
win
,
0
);
for
(
i
=
0
;
i
<
height
;
i
++
)
{
for
(
i
=
0
;
i
<
height
;
i
++
)
{
wmove
(
win
,
y
+
i
,
x
);
wmove
(
win
,
y
+
i
,
x
);
for
(
j
=
0
;
j
<
width
;
j
++
)
for
(
j
=
0
;
j
<
width
;
j
++
)
if
(
!
i
&&
!
j
)
if
(
!
i
&&
!
j
)
waddch
(
win
,
border
|
ACS_ULCORNER
);
waddch
(
win
,
border
|
ACS_ULCORNER
);
else
if
(
i
==
height
-
1
&&
!
j
)
else
if
(
i
==
height
-
1
&&
!
j
)
waddch
(
win
,
border
|
ACS_LLCORNER
);
waddch
(
win
,
border
|
ACS_LLCORNER
);
else
if
(
!
i
&&
j
==
width
-
1
)
else
if
(
!
i
&&
j
==
width
-
1
)
waddch
(
win
,
box
|
ACS_URCORNER
);
waddch
(
win
,
box
|
ACS_URCORNER
);
else
if
(
i
==
height
-
1
&&
j
==
width
-
1
)
else
if
(
i
==
height
-
1
&&
j
==
width
-
1
)
waddch
(
win
,
box
|
ACS_LRCORNER
);
waddch
(
win
,
box
|
ACS_LRCORNER
);
else
if
(
!
i
)
else
if
(
!
i
)
waddch
(
win
,
border
|
ACS_HLINE
);
waddch
(
win
,
border
|
ACS_HLINE
);
else
if
(
i
==
height
-
1
)
else
if
(
i
==
height
-
1
)
waddch
(
win
,
box
|
ACS_HLINE
);
waddch
(
win
,
box
|
ACS_HLINE
);
else
if
(
!
j
)
else
if
(
!
j
)
waddch
(
win
,
border
|
ACS_VLINE
);
waddch
(
win
,
border
|
ACS_VLINE
);
else
if
(
j
==
width
-
1
)
else
if
(
j
==
width
-
1
)
waddch
(
win
,
box
|
ACS_VLINE
);
waddch
(
win
,
box
|
ACS_VLINE
);
else
else
waddch
(
win
,
box
|
' '
);
waddch
(
win
,
box
|
' '
);
}
}
}
}
...
@@ -322,17 +322,17 @@ draw_shadow (WINDOW * win, int y, int x, int height, int width)
...
@@ -322,17 +322,17 @@ draw_shadow (WINDOW * win, int y, int x, int height, int width)
{
{
int
i
;
int
i
;
if
(
has_colors
())
{
/* Whether terminal supports color? */
if
(
has_colors
())
{
/* Whether terminal supports color? */
wattrset
(
win
,
shadow_attr
);
wattrset
(
win
,
shadow_attr
);
wmove
(
win
,
y
+
height
,
x
+
2
);
wmove
(
win
,
y
+
height
,
x
+
2
);
for
(
i
=
0
;
i
<
width
;
i
++
)
for
(
i
=
0
;
i
<
width
;
i
++
)
waddch
(
win
,
winch
(
win
)
&
A_CHARTEXT
);
waddch
(
win
,
winch
(
win
)
&
A_CHARTEXT
);
for
(
i
=
y
+
1
;
i
<
y
+
height
+
1
;
i
++
)
{
for
(
i
=
y
+
1
;
i
<
y
+
height
+
1
;
i
++
)
{
wmove
(
win
,
i
,
x
+
width
);
wmove
(
win
,
i
,
x
+
width
);
waddch
(
win
,
winch
(
win
)
&
A_CHARTEXT
);
waddch
(
win
,
winch
(
win
)
&
A_CHARTEXT
);
waddch
(
win
,
winch
(
win
)
&
A_CHARTEXT
);
waddch
(
win
,
winch
(
win
)
&
A_CHARTEXT
);
}
}
wnoutrefresh
(
win
);
wnoutrefresh
(
win
);
}
}
}
}
...
@@ -342,18 +342,18 @@ draw_shadow (WINDOW * win, int y, int x, int height, int width)
...
@@ -342,18 +342,18 @@ draw_shadow (WINDOW * win, int y, int x, int height, int width)
int
int
first_alpha
(
const
char
*
string
,
const
char
*
exempt
)
first_alpha
(
const
char
*
string
,
const
char
*
exempt
)
{
{
int
i
,
in_paren
=
0
,
c
;
int
i
,
in_paren
=
0
,
c
;
for
(
i
=
0
;
i
<
strlen
(
string
);
i
++
)
{
for
(
i
=
0
;
i
<
strlen
(
string
);
i
++
)
{
c
=
tolower
(
string
[
i
]);
c
=
tolower
(
string
[
i
]);
if
(
strchr
(
"<[("
,
c
))
++
in_paren
;
if
(
strchr
(
"<[("
,
c
))
++
in_paren
;
if
(
strchr
(
">])"
,
c
))
--
in_paren
;
if
(
strchr
(
">])"
,
c
))
--
in_paren
;
if
((
!
in_paren
)
&&
isalpha
(
c
)
&&
if
((
!
in_paren
)
&&
isalpha
(
c
)
&&
strchr
(
exempt
,
c
)
==
0
)
strchr
(
exempt
,
c
)
==
0
)
return
i
;
return
i
;
}
}
return
0
;
return
0
;
}
}
lxdialog/yesno.c
View file @
f102b577
...
@@ -59,23 +59,23 @@ dialog_yesno (const char *title, const char *prompt, int height, int width)
...
@@ -59,23 +59,23 @@ dialog_yesno (const char *title, const char *prompt, int height, int width)
wattrset
(
dialog
,
border_attr
);
wattrset
(
dialog
,
border_attr
);
mvwaddch
(
dialog
,
height
-
3
,
0
,
ACS_LTEE
);
mvwaddch
(
dialog
,
height
-
3
,
0
,
ACS_LTEE
);
for
(
i
=
0
;
i
<
width
-
2
;
i
++
)
for
(
i
=
0
;
i
<
width
-
2
;
i
++
)
waddch
(
dialog
,
ACS_HLINE
);
waddch
(
dialog
,
ACS_HLINE
);
wattrset
(
dialog
,
dialog_attr
);
wattrset
(
dialog
,
dialog_attr
);
waddch
(
dialog
,
ACS_RTEE
);
waddch
(
dialog
,
ACS_RTEE
);
if
(
title
!=
NULL
&&
strlen
(
title
)
>=
width
-
2
)
{
if
(
title
!=
NULL
&&
strlen
(
title
)
>=
width
-
2
)
{
/* truncate long title -- mec */
/* truncate long title -- mec */
char
*
title2
=
malloc
(
width
-
2
+
1
);
char
*
title2
=
malloc
(
width
-
2
+
1
);
memcpy
(
title2
,
title
,
width
-
2
);
memcpy
(
title2
,
title
,
width
-
2
);
title2
[
width
-
2
]
=
'\0'
;
title2
[
width
-
2
]
=
'\0'
;
title
=
title2
;
title
=
title2
;
}
}
if
(
title
!=
NULL
)
{
if
(
title
!=
NULL
)
{
wattrset
(
dialog
,
title_attr
);
wattrset
(
dialog
,
title_attr
);
mvwaddch
(
dialog
,
0
,
(
width
-
strlen
(
title
))
/
2
-
1
,
' '
);
mvwaddch
(
dialog
,
0
,
(
width
-
strlen
(
title
))
/
2
-
1
,
' '
);
waddstr
(
dialog
,
(
char
*
)
title
);
waddstr
(
dialog
,
(
char
*
)
title
);
waddch
(
dialog
,
' '
);
waddch
(
dialog
,
' '
);
}
}
wattrset
(
dialog
,
dialog_attr
);
wattrset
(
dialog
,
dialog_attr
);
...
@@ -84,35 +84,35 @@ dialog_yesno (const char *title, const char *prompt, int height, int width)
...
@@ -84,35 +84,35 @@ dialog_yesno (const char *title, const char *prompt, int height, int width)
print_buttons
(
dialog
,
height
,
width
,
0
);
print_buttons
(
dialog
,
height
,
width
,
0
);
while
(
key
!=
ESC
)
{
while
(
key
!=
ESC
)
{
key
=
wgetch
(
dialog
);
key
=
wgetch
(
dialog
);
switch
(
key
)
{
switch
(
key
)
{
case
'Y'
:
case
'Y'
:
case
'y'
:
case
'y'
:
delwin
(
dialog
);
delwin
(
dialog
);
return
0
;
return
0
;
case
'N'
:
case
'N'
:
case
'n'
:
case
'n'
:
delwin
(
dialog
);
delwin
(
dialog
);
return
1
;
return
1
;
case
TAB
:
case
TAB
:
case
KEY_LEFT
:
case
KEY_LEFT
:
case
KEY_RIGHT
:
case
KEY_RIGHT
:
button
=
((
key
==
KEY_LEFT
?
--
button
:
++
button
)
<
0
)
button
=
((
key
==
KEY_LEFT
?
--
button
:
++
button
)
<
0
)
?
1
:
(
button
>
1
?
0
:
button
);
?
1
:
(
button
>
1
?
0
:
button
);
print_buttons
(
dialog
,
height
,
width
,
button
);
print_buttons
(
dialog
,
height
,
width
,
button
);
wrefresh
(
dialog
);
wrefresh
(
dialog
);
break
;
break
;
case
' '
:
case
' '
:
case
'\n'
:
case
'\n'
:
delwin
(
dialog
);
delwin
(
dialog
);
return
button
;
return
button
;
case
ESC
:
case
ESC
:
break
;
break
;
}
}
}
}
delwin
(
dialog
);
delwin
(
dialog
);
return
-
1
;
/* ESC pressed */
return
-
1
;
/* ESC pressed */
}
}
modules/codec/xvmc/cpu_accel.c
View file @
f102b577
...
@@ -81,15 +81,15 @@ static inline uint32_t arch_accel( void )
...
@@ -81,15 +81,15 @@ static inline uint32_t arch_accel( void )
AMD
=
(
ebx
==
0x68747541
)
&&
(
ecx
==
0x444d4163
)
&&
(
edx
==
0x69746e65
);
AMD
=
(
ebx
==
0x68747541
)
&&
(
ecx
==
0x444d4163
)
&&
(
edx
==
0x69746e65
);
cpuid
(
0x00000001
,
eax
,
ebx
,
ecx
,
edx
);
cpuid
(
0x00000001
,
eax
,
ebx
,
ecx
,
edx
);
if
(
!
(
edx
&
0x00800000
))
/* no MMX */
if
(
!
(
edx
&
0x00800000
))
/* no MMX */
return
0
;
return
0
;
caps
=
MPEG2_ACCEL_X86_MMX
;
caps
=
MPEG2_ACCEL_X86_MMX
;
if
(
edx
&
0x02000000
)
/* SSE - identical to AMD MMX extensions */
if
(
edx
&
0x02000000
)
/* SSE - identical to AMD MMX extensions */
caps
=
MPEG2_ACCEL_X86_MMX
|
MPEG2_ACCEL_X86_MMXEXT
;
caps
=
MPEG2_ACCEL_X86_MMX
|
MPEG2_ACCEL_X86_MMXEXT
;
cpuid
(
0x80000000
,
eax
,
ebx
,
ecx
,
edx
);
cpuid
(
0x80000000
,
eax
,
ebx
,
ecx
,
edx
);
if
(
eax
<
0x80000001
)
/* no extended capabilities */
if
(
eax
<
0x80000001
)
/* no extended capabilities */
return
caps
;
return
caps
;
cpuid
(
0x80000001
,
eax
,
ebx
,
ecx
,
edx
);
cpuid
(
0x80000001
,
eax
,
ebx
,
ecx
,
edx
);
...
@@ -97,7 +97,7 @@ static inline uint32_t arch_accel( void )
...
@@ -97,7 +97,7 @@ static inline uint32_t arch_accel( void )
if
(
edx
&
0x80000000
)
if
(
edx
&
0x80000000
)
caps
|=
MPEG2_ACCEL_X86_3DNOW
;
caps
|=
MPEG2_ACCEL_X86_3DNOW
;
if
(
AMD
&&
(
edx
&
0x00400000
))
/* AMD MMX extensions */
if
(
AMD
&&
(
edx
&
0x00400000
))
/* AMD MMX extensions */
caps
|=
MPEG2_ACCEL_X86_MMXEXT
;
caps
|=
MPEG2_ACCEL_X86_MMXEXT
;
return
caps
;
return
caps
;
...
...
modules/codec/xvmc/decode.c
View file @
f102b577
...
@@ -99,7 +99,7 @@ static inline int copy_chunk( mpeg2dec_t * mpeg2dec, int bytes )
...
@@ -99,7 +99,7 @@ static inline int copy_chunk( mpeg2dec_t * mpeg2dec, int bytes )
mpeg2dec
->
shift
=
0xffffff00
;
mpeg2dec
->
shift
=
0xffffff00
;
mpeg2dec
->
chunk_size
=
chunk_ptr
-
mpeg2dec
->
chunk_start
-
3
;
mpeg2dec
->
chunk_size
=
chunk_ptr
-
mpeg2dec
->
chunk_start
-
3
;
mpeg2dec
->
chunk_ptr
=
chunk_ptr
+
1
;
mpeg2dec
->
chunk_ptr
=
chunk_ptr
+
1
;
copied
=
current
-
mpeg2dec
->
buf_start
;
copied
=
current
-
mpeg2dec
->
buf_start
;
mpeg2dec
->
buf_start
=
current
;
mpeg2dec
->
buf_start
=
current
;
return
copied
;
return
copied
;
...
...
modules/codec/xvmc/header.c
View file @
f102b577
...
@@ -108,7 +108,7 @@ void mpeg2_header_state_init( mpeg2dec_t *mpeg2dec )
...
@@ -108,7 +108,7 @@ void mpeg2_header_state_init( mpeg2dec_t *mpeg2dec )
}
}
mpeg2dec
->
decoder
.
coding_type
=
I_TYPE
;
mpeg2dec
->
decoder
.
coding_type
=
I_TYPE
;
mpeg2dec
->
decoder
.
convert
=
NULL
;
mpeg2dec
->
decoder
.
convert
=
NULL
;
mpeg2dec
->
decoder
.
convert_id
=
NULL
;
mpeg2dec
->
decoder
.
convert_id
=
NULL
;
mpeg2dec
->
decoder
.
load_intra_quantizer_matrix
=
1
;
mpeg2dec
->
decoder
.
load_intra_quantizer_matrix
=
1
;
mpeg2dec
->
decoder
.
load_non_intra_quantizer_matrix
=
1
;
mpeg2dec
->
decoder
.
load_non_intra_quantizer_matrix
=
1
;
mpeg2dec
->
picture
=
mpeg2dec
->
pictures
;
mpeg2dec
->
picture
=
mpeg2dec
->
pictures
;
...
@@ -249,11 +249,11 @@ static int sequence_ext( mpeg2dec_t * mpeg2dec )
...
@@ -249,11 +249,11 @@ static int sequence_ext( mpeg2dec_t * mpeg2dec )
switch
(
buffer
[
1
]
&
6
)
switch
(
buffer
[
1
]
&
6
)
{
{
case
0
:
/* invalid */
case
0
:
/* invalid */
return
1
;
return
1
;
case
2
:
/* 4:2:0 */
case
2
:
/* 4:2:0 */
sequence
->
chroma_height
>>=
1
;
sequence
->
chroma_height
>>=
1
;
case
4
:
/* 4:2:2 */
case
4
:
/* 4:2:2 */
sequence
->
chroma_width
>>=
1
;
sequence
->
chroma_width
>>=
1
;
}
}
...
@@ -337,13 +337,13 @@ static inline void finalize_sequence( mpeg2_sequence_t * sequence )
...
@@ -337,13 +337,13 @@ static inline void finalize_sequence( mpeg2_sequence_t * sequence )
sequence
->
pixel_width
=
sequence
->
pixel_height
=
1
;
sequence
->
pixel_width
=
sequence
->
pixel_height
=
1
;
return
;
return
;
case
3
:
/* 720x576 16:9 */
case
3
:
/* 720x576 16:9 */
sequence
->
pixel_width
=
64
;
sequence
->
pixel_height
=
45
;
sequence
->
pixel_width
=
64
;
sequence
->
pixel_height
=
45
;
return
;
return
;
case
6
:
/* 720x480 16:9 */
case
6
:
/* 720x480 16:9 */
sequence
->
pixel_width
=
32
;
sequence
->
pixel_height
=
27
;
sequence
->
pixel_width
=
32
;
sequence
->
pixel_height
=
27
;
return
;
return
;
case
12
:
/* 720*480 4:3 */
case
12
:
/* 720*480 4:3 */
sequence
->
pixel_width
=
8
;
sequence
->
pixel_height
=
9
;
sequence
->
pixel_width
=
8
;
sequence
->
pixel_height
=
9
;
return
;
return
;
default:
default:
height
=
88
*
sequence
->
pixel_width
+
1171
;
height
=
88
*
sequence
->
pixel_width
+
1171
;
...
@@ -577,7 +577,7 @@ int mpeg2_header_picture( mpeg2dec_t * mpeg2dec )
...
@@ -577,7 +577,7 @@ int mpeg2_header_picture( mpeg2dec_t * mpeg2dec )
decoder
->
concealment_motion_vectors
=
0
;
decoder
->
concealment_motion_vectors
=
0
;
decoder
->
scan
=
mpeg2_scan_norm
;
decoder
->
scan
=
mpeg2_scan_norm
;
decoder
->
picture_structure
=
FRAME_PICTURE
;
decoder
->
picture_structure
=
FRAME_PICTURE
;
mpeg2dec
->
copy_matrix
=
0
;
mpeg2dec
->
copy_matrix
=
0
;
return
0
;
return
0
;
}
}
...
@@ -814,7 +814,7 @@ void mpeg2_header_picture_finalize( mpeg2dec_t * mpeg2dec, uint32_t accels )
...
@@ -814,7 +814,7 @@ void mpeg2_header_picture_finalize( mpeg2dec_t * mpeg2dec, uint32_t accels )
else
else
{
{
/* decoder->second_field = 1; */
/* decoder->second_field = 1; */
mpeg2dec
->
picture
++
;
/* second field picture */
mpeg2dec
->
picture
++
;
/* second field picture */
*
(
mpeg2dec
->
picture
)
=
mpeg2dec
->
new_picture
;
*
(
mpeg2dec
->
picture
)
=
mpeg2dec
->
new_picture
;
mpeg2dec
->
info
.
current_picture_2nd
=
mpeg2dec
->
picture
;
mpeg2dec
->
info
.
current_picture_2nd
=
mpeg2dec
->
picture
;
if
(
low_delay
||
decoder
->
coding_type
==
B_TYPE
)
if
(
low_delay
||
decoder
->
coding_type
==
B_TYPE
)
...
...
modules/codec/xvmc/motion_comp.c
View file @
f102b577
...
@@ -50,53 +50,53 @@ void mpeg2_mc_init (uint32_t accel)
...
@@ -50,53 +50,53 @@ void mpeg2_mc_init (uint32_t accel)
#define predict_x(i) (avg2 (ref[i], ref[i+1]))
#define predict_x(i) (avg2 (ref[i], ref[i+1]))
#define predict_y(i) (avg2 (ref[i], (ref+stride)[i]))
#define predict_y(i) (avg2 (ref[i], (ref+stride)[i]))
#define predict_xy(i) (avg4 (ref[i], ref[i+1], \
#define predict_xy(i) (avg4 (ref[i], ref[i+1], \
(ref+stride)[i], (ref+stride)[i+1]))
(ref+stride)[i], (ref+stride)[i+1]))
#define put(predictor,i) dest[i] = predictor (i)
#define put(predictor,i) dest[i] = predictor (i)
#define avg(predictor,i) dest[i] = avg2 (predictor (i), dest[i])
#define avg(predictor,i) dest[i] = avg2 (predictor (i), dest[i])
/* mc function template */
/* mc function template */
#define MC_FUNC(op,xy)
\
#define MC_FUNC(op,xy)
\
static void MC_##op##_##xy##_16_c (uint8_t * dest, const uint8_t * ref,
\
static void MC_##op##_##xy##_16_c (uint8_t * dest, const uint8_t * ref,
\
const int stride, int height)
\
const int stride, int height)
\
{
\
{
\
do {
\
do {
\
op (predict_##xy, 0);
\
op (predict_##xy, 0);
\
op (predict_##xy, 1);
\
op (predict_##xy, 1);
\
op (predict_##xy, 2);
\
op (predict_##xy, 2);
\
op (predict_##xy, 3);
\
op (predict_##xy, 3);
\
op (predict_##xy, 4);
\
op (predict_##xy, 4);
\
op (predict_##xy, 5);
\
op (predict_##xy, 5);
\
op (predict_##xy, 6);
\
op (predict_##xy, 6);
\
op (predict_##xy, 7);
\
op (predict_##xy, 7);
\
op (predict_##xy, 8);
\
op (predict_##xy, 8);
\
op (predict_##xy, 9);
\
op (predict_##xy, 9);
\
op (predict_##xy, 10);
\
op (predict_##xy, 10);
\
op (predict_##xy, 11);
\
op (predict_##xy, 11);
\
op (predict_##xy, 12);
\
op (predict_##xy, 12);
\
op (predict_##xy, 13);
\
op (predict_##xy, 13);
\
op (predict_##xy, 14);
\
op (predict_##xy, 14);
\
op (predict_##xy, 15);
\
op (predict_##xy, 15);
\
ref += stride;
\
ref += stride;
\
dest += stride;
\
dest += stride;
\
} while (--height);
\
} while (--height);
\
}
\
}
\
static void MC_##op##_##xy##_8_c (uint8_t * dest, const uint8_t * ref,
\
static void MC_##op##_##xy##_8_c (uint8_t * dest, const uint8_t * ref,
\
const int stride, int height)
\
const int stride, int height)
\
{
\
{
\
do {
\
do {
\
op (predict_##xy, 0);
\
op (predict_##xy, 0);
\
op (predict_##xy, 1);
\
op (predict_##xy, 1);
\
op (predict_##xy, 2);
\
op (predict_##xy, 2);
\
op (predict_##xy, 3);
\
op (predict_##xy, 3);
\
op (predict_##xy, 4);
\
op (predict_##xy, 4);
\
op (predict_##xy, 5);
\
op (predict_##xy, 5);
\
op (predict_##xy, 6);
\
op (predict_##xy, 6);
\
op (predict_##xy, 7);
\
op (predict_##xy, 7);
\
ref += stride;
\
ref += stride;
\
dest += stride;
\
dest += stride;
\
} while (--height);
\
} while (--height);
\
}
}
/* definitions of the actual mc functions */
/* definitions of the actual mc functions */
...
...
modules/codec/xvmc/motion_comp_mmx.c
View file @
f102b577
...
@@ -67,175 +67,175 @@ static inline void mmx_zero_reg ()
...
@@ -67,175 +67,175 @@ static inline void mmx_zero_reg ()
}
}
static
inline
void
mmx_average_2_U8
(
uint8_t
*
dest
,
const
uint8_t
*
src1
,
static
inline
void
mmx_average_2_U8
(
uint8_t
*
dest
,
const
uint8_t
*
src1
,
const
uint8_t
*
src2
)
const
uint8_t
*
src2
)
{
{
/* *dest = (*src1 + *src2 + 1)/ 2; */
/* *dest = (*src1 + *src2 + 1)/ 2; */
movq_m2r
(
*
src1
,
mm1
);
/* load 8 src1 bytes */
movq_m2r
(
*
src1
,
mm1
);
/* load 8 src1 bytes */
movq_r2r
(
mm1
,
mm2
);
/* copy 8 src1 bytes */
movq_r2r
(
mm1
,
mm2
);
/* copy 8 src1 bytes */
movq_m2r
(
*
src2
,
mm3
);
/* load 8 src2 bytes */
movq_m2r
(
*
src2
,
mm3
);
/* load 8 src2 bytes */
movq_r2r
(
mm3
,
mm4
);
/* copy 8 src2 bytes */
movq_r2r
(
mm3
,
mm4
);
/* copy 8 src2 bytes */
pxor_r2r
(
mm1
,
mm3
);
/* xor src1 and src2 */
pxor_r2r
(
mm1
,
mm3
);
/* xor src1 and src2 */
pand_m2r
(
mask1
,
mm3
);
/* mask lower bits */
pand_m2r
(
mask1
,
mm3
);
/* mask lower bits */
psrlq_i2r
(
1
,
mm3
);
/* /2 */
psrlq_i2r
(
1
,
mm3
);
/* /2 */
por_r2r
(
mm2
,
mm4
);
/* or src1 and src2 */
por_r2r
(
mm2
,
mm4
);
/* or src1 and src2 */
psubb_r2r
(
mm3
,
mm4
);
/* subtract subresults */
psubb_r2r
(
mm3
,
mm4
);
/* subtract subresults */
movq_r2m
(
mm4
,
*
dest
);
/* store result in dest */
movq_r2m
(
mm4
,
*
dest
);
/* store result in dest */
}
}
static
inline
void
mmx_interp_average_2_U8
(
uint8_t
*
dest
,
static
inline
void
mmx_interp_average_2_U8
(
uint8_t
*
dest
,
const
uint8_t
*
src1
,
const
uint8_t
*
src1
,
const
uint8_t
*
src2
)
const
uint8_t
*
src2
)
{
{
/* *dest = (*dest + (*src1 + *src2 + 1)/ 2 + 1)/ 2; */
/* *dest = (*dest + (*src1 + *src2 + 1)/ 2 + 1)/ 2; */
movq_m2r
(
*
dest
,
mm1
);
/* load 8 dest bytes */
movq_m2r
(
*
dest
,
mm1
);
/* load 8 dest bytes */
movq_r2r
(
mm1
,
mm2
);
/* copy 8 dest bytes */
movq_r2r
(
mm1
,
mm2
);
/* copy 8 dest bytes */
movq_m2r
(
*
src1
,
mm3
);
/* load 8 src1 bytes */
movq_m2r
(
*
src1
,
mm3
);
/* load 8 src1 bytes */
movq_r2r
(
mm3
,
mm4
);
/* copy 8 src1 bytes */
movq_r2r
(
mm3
,
mm4
);
/* copy 8 src1 bytes */
movq_m2r
(
*
src2
,
mm5
);
/* load 8 src2 bytes */
movq_m2r
(
*
src2
,
mm5
);
/* load 8 src2 bytes */
movq_r2r
(
mm5
,
mm6
);
/* copy 8 src2 bytes */
movq_r2r
(
mm5
,
mm6
);
/* copy 8 src2 bytes */
pxor_r2r
(
mm3
,
mm5
);
/* xor src1 and src2 */
pxor_r2r
(
mm3
,
mm5
);
/* xor src1 and src2 */
pand_m2r
(
mask1
,
mm5
);
/* mask lower bits */
pand_m2r
(
mask1
,
mm5
);
/* mask lower bits */
psrlq_i2r
(
1
,
mm5
);
/* /2 */
psrlq_i2r
(
1
,
mm5
);
/* /2 */
por_r2r
(
mm4
,
mm6
);
/* or src1 and src2 */
por_r2r
(
mm4
,
mm6
);
/* or src1 and src2 */
psubb_r2r
(
mm5
,
mm6
);
/* subtract subresults */
psubb_r2r
(
mm5
,
mm6
);
/* subtract subresults */
movq_r2r
(
mm6
,
mm5
);
/* copy subresult */
movq_r2r
(
mm6
,
mm5
);
/* copy subresult */
pxor_r2r
(
mm1
,
mm5
);
/* xor srcavg and dest */
pxor_r2r
(
mm1
,
mm5
);
/* xor srcavg and dest */
pand_m2r
(
mask1
,
mm5
);
/* mask lower bits */
pand_m2r
(
mask1
,
mm5
);
/* mask lower bits */
psrlq_i2r
(
1
,
mm5
);
/* /2 */
psrlq_i2r
(
1
,
mm5
);
/* /2 */
por_r2r
(
mm2
,
mm6
);
/* or srcavg and dest */
por_r2r
(
mm2
,
mm6
);
/* or srcavg and dest */
psubb_r2r
(
mm5
,
mm6
);
/* subtract subresults */
psubb_r2r
(
mm5
,
mm6
);
/* subtract subresults */
movq_r2m
(
mm6
,
*
dest
);
/* store result in dest */
movq_r2m
(
mm6
,
*
dest
);
/* store result in dest */
}
}
static
inline
void
mmx_average_4_U8
(
uint8_t
*
dest
,
const
uint8_t
*
src1
,
static
inline
void
mmx_average_4_U8
(
uint8_t
*
dest
,
const
uint8_t
*
src1
,
const
uint8_t
*
src2
,
const
uint8_t
*
src2
,
const
uint8_t
*
src3
,
const
uint8_t
*
src3
,
const
uint8_t
*
src4
)
const
uint8_t
*
src4
)
{
{
/* *dest = (*src1 + *src2 + *src3 + *src4 + 2)/ 4; */
/* *dest = (*src1 + *src2 + *src3 + *src4 + 2)/ 4; */
movq_m2r
(
*
src1
,
mm1
);
/* load 8 src1 bytes */
movq_m2r
(
*
src1
,
mm1
);
/* load 8 src1 bytes */
movq_r2r
(
mm1
,
mm2
);
/* copy 8 src1 bytes */
movq_r2r
(
mm1
,
mm2
);
/* copy 8 src1 bytes */
punpcklbw_r2r
(
mm0
,
mm1
);
/* unpack low src1 bytes */
punpcklbw_r2r
(
mm0
,
mm1
);
/* unpack low src1 bytes */
punpckhbw_r2r
(
mm0
,
mm2
);
/* unpack high src1 bytes */
punpckhbw_r2r
(
mm0
,
mm2
);
/* unpack high src1 bytes */
movq_m2r
(
*
src2
,
mm3
);
/* load 8 src2 bytes */
movq_m2r
(
*
src2
,
mm3
);
/* load 8 src2 bytes */
movq_r2r
(
mm3
,
mm4
);
/* copy 8 src2 bytes */
movq_r2r
(
mm3
,
mm4
);
/* copy 8 src2 bytes */
punpcklbw_r2r
(
mm0
,
mm3
);
/* unpack low src2 bytes */
punpcklbw_r2r
(
mm0
,
mm3
);
/* unpack low src2 bytes */
punpckhbw_r2r
(
mm0
,
mm4
);
/* unpack high src2 bytes */
punpckhbw_r2r
(
mm0
,
mm4
);
/* unpack high src2 bytes */
paddw_r2r
(
mm3
,
mm1
);
/* add lows */
paddw_r2r
(
mm3
,
mm1
);
/* add lows */
paddw_r2r
(
mm4
,
mm2
);
/* add highs */
paddw_r2r
(
mm4
,
mm2
);
/* add highs */
/* now have partials in mm1 and mm2 */
/* now have partials in mm1 and mm2 */
movq_m2r
(
*
src3
,
mm3
);
/* load 8 src3 bytes */
movq_m2r
(
*
src3
,
mm3
);
/* load 8 src3 bytes */
movq_r2r
(
mm3
,
mm4
);
/* copy 8 src3 bytes */
movq_r2r
(
mm3
,
mm4
);
/* copy 8 src3 bytes */
punpcklbw_r2r
(
mm0
,
mm3
);
/* unpack low src3 bytes */
punpcklbw_r2r
(
mm0
,
mm3
);
/* unpack low src3 bytes */
punpckhbw_r2r
(
mm0
,
mm4
);
/* unpack high src3 bytes */
punpckhbw_r2r
(
mm0
,
mm4
);
/* unpack high src3 bytes */
paddw_r2r
(
mm3
,
mm1
);
/* add lows */
paddw_r2r
(
mm3
,
mm1
);
/* add lows */
paddw_r2r
(
mm4
,
mm2
);
/* add highs */
paddw_r2r
(
mm4
,
mm2
);
/* add highs */
movq_m2r
(
*
src4
,
mm5
);
/* load 8 src4 bytes */
movq_m2r
(
*
src4
,
mm5
);
/* load 8 src4 bytes */
movq_r2r
(
mm5
,
mm6
);
/* copy 8 src4 bytes */
movq_r2r
(
mm5
,
mm6
);
/* copy 8 src4 bytes */
punpcklbw_r2r
(
mm0
,
mm5
);
/* unpack low src4 bytes */
punpcklbw_r2r
(
mm0
,
mm5
);
/* unpack low src4 bytes */
punpckhbw_r2r
(
mm0
,
mm6
);
/* unpack high src4 bytes */
punpckhbw_r2r
(
mm0
,
mm6
);
/* unpack high src4 bytes */
paddw_r2r
(
mm5
,
mm1
);
/* add lows */
paddw_r2r
(
mm5
,
mm1
);
/* add lows */
paddw_r2r
(
mm6
,
mm2
);
/* add highs */
paddw_r2r
(
mm6
,
mm2
);
/* add highs */
/* now have subtotal in mm1 and mm2 */
/* now have subtotal in mm1 and mm2 */
paddw_m2r
(
round4
,
mm1
);
paddw_m2r
(
round4
,
mm1
);
psraw_i2r
(
2
,
mm1
);
/* /4 */
psraw_i2r
(
2
,
mm1
);
/* /4 */
paddw_m2r
(
round4
,
mm2
);
paddw_m2r
(
round4
,
mm2
);
psraw_i2r
(
2
,
mm2
);
/* /4 */
psraw_i2r
(
2
,
mm2
);
/* /4 */
packuswb_r2r
(
mm2
,
mm1
);
/* pack (w/ saturation) */
packuswb_r2r
(
mm2
,
mm1
);
/* pack (w/ saturation) */
movq_r2m
(
mm1
,
*
dest
);
/* store result in dest */
movq_r2m
(
mm1
,
*
dest
);
/* store result in dest */
}
}
static
inline
void
mmx_interp_average_4_U8
(
uint8_t
*
dest
,
static
inline
void
mmx_interp_average_4_U8
(
uint8_t
*
dest
,
const
uint8_t
*
src1
,
const
uint8_t
*
src1
,
const
uint8_t
*
src2
,
const
uint8_t
*
src2
,
const
uint8_t
*
src3
,
const
uint8_t
*
src3
,
const
uint8_t
*
src4
)
const
uint8_t
*
src4
)
{
{
/* *dest = (*dest + (*src1 + *src2 + *src3 + *src4 + 2)/ 4 + 1)/ 2; */
/* *dest = (*dest + (*src1 + *src2 + *src3 + *src4 + 2)/ 4 + 1)/ 2; */
movq_m2r
(
*
src1
,
mm1
);
/* load 8 src1 bytes */
movq_m2r
(
*
src1
,
mm1
);
/* load 8 src1 bytes */
movq_r2r
(
mm1
,
mm2
);
/* copy 8 src1 bytes */
movq_r2r
(
mm1
,
mm2
);
/* copy 8 src1 bytes */
punpcklbw_r2r
(
mm0
,
mm1
);
/* unpack low src1 bytes */
punpcklbw_r2r
(
mm0
,
mm1
);
/* unpack low src1 bytes */
punpckhbw_r2r
(
mm0
,
mm2
);
/* unpack high src1 bytes */
punpckhbw_r2r
(
mm0
,
mm2
);
/* unpack high src1 bytes */
movq_m2r
(
*
src2
,
mm3
);
/* load 8 src2 bytes */
movq_m2r
(
*
src2
,
mm3
);
/* load 8 src2 bytes */
movq_r2r
(
mm3
,
mm4
);
/* copy 8 src2 bytes */
movq_r2r
(
mm3
,
mm4
);
/* copy 8 src2 bytes */
punpcklbw_r2r
(
mm0
,
mm3
);
/* unpack low src2 bytes */
punpcklbw_r2r
(
mm0
,
mm3
);
/* unpack low src2 bytes */
punpckhbw_r2r
(
mm0
,
mm4
);
/* unpack high src2 bytes */
punpckhbw_r2r
(
mm0
,
mm4
);
/* unpack high src2 bytes */
paddw_r2r
(
mm3
,
mm1
);
/* add lows */
paddw_r2r
(
mm3
,
mm1
);
/* add lows */
paddw_r2r
(
mm4
,
mm2
);
/* add highs */
paddw_r2r
(
mm4
,
mm2
);
/* add highs */
/* now have partials in mm1 and mm2 */
/* now have partials in mm1 and mm2 */
movq_m2r
(
*
src3
,
mm3
);
/* load 8 src3 bytes */
movq_m2r
(
*
src3
,
mm3
);
/* load 8 src3 bytes */
movq_r2r
(
mm3
,
mm4
);
/* copy 8 src3 bytes */
movq_r2r
(
mm3
,
mm4
);
/* copy 8 src3 bytes */
punpcklbw_r2r
(
mm0
,
mm3
);
/* unpack low src3 bytes */
punpcklbw_r2r
(
mm0
,
mm3
);
/* unpack low src3 bytes */
punpckhbw_r2r
(
mm0
,
mm4
);
/* unpack high src3 bytes */
punpckhbw_r2r
(
mm0
,
mm4
);
/* unpack high src3 bytes */
paddw_r2r
(
mm3
,
mm1
);
/* add lows */
paddw_r2r
(
mm3
,
mm1
);
/* add lows */
paddw_r2r
(
mm4
,
mm2
);
/* add highs */
paddw_r2r
(
mm4
,
mm2
);
/* add highs */
movq_m2r
(
*
src4
,
mm5
);
/* load 8 src4 bytes */
movq_m2r
(
*
src4
,
mm5
);
/* load 8 src4 bytes */
movq_r2r
(
mm5
,
mm6
);
/* copy 8 src4 bytes */
movq_r2r
(
mm5
,
mm6
);
/* copy 8 src4 bytes */
punpcklbw_r2r
(
mm0
,
mm5
);
/* unpack low src4 bytes */
punpcklbw_r2r
(
mm0
,
mm5
);
/* unpack low src4 bytes */
punpckhbw_r2r
(
mm0
,
mm6
);
/* unpack high src4 bytes */
punpckhbw_r2r
(
mm0
,
mm6
);
/* unpack high src4 bytes */
paddw_r2r
(
mm5
,
mm1
);
/* add lows */
paddw_r2r
(
mm5
,
mm1
);
/* add lows */
paddw_r2r
(
mm6
,
mm2
);
/* add highs */
paddw_r2r
(
mm6
,
mm2
);
/* add highs */
paddw_m2r
(
round4
,
mm1
);
paddw_m2r
(
round4
,
mm1
);
psraw_i2r
(
2
,
mm1
);
/* /4 */
psraw_i2r
(
2
,
mm1
);
/* /4 */
paddw_m2r
(
round4
,
mm2
);
paddw_m2r
(
round4
,
mm2
);
psraw_i2r
(
2
,
mm2
);
/* /4 */
psraw_i2r
(
2
,
mm2
);
/* /4 */
/* now have subtotal/4 in mm1 and mm2 */
/* now have subtotal/4 in mm1 and mm2 */
movq_m2r
(
*
dest
,
mm3
);
/* load 8 dest bytes */
movq_m2r
(
*
dest
,
mm3
);
/* load 8 dest bytes */
movq_r2r
(
mm3
,
mm4
);
/* copy 8 dest bytes */
movq_r2r
(
mm3
,
mm4
);
/* copy 8 dest bytes */
packuswb_r2r
(
mm2
,
mm1
);
/* pack (w/ saturation) */
packuswb_r2r
(
mm2
,
mm1
);
/* pack (w/ saturation) */
movq_r2r
(
mm1
,
mm2
);
/* copy subresult */
movq_r2r
(
mm1
,
mm2
);
/* copy subresult */
pxor_r2r
(
mm1
,
mm3
);
/* xor srcavg and dest */
pxor_r2r
(
mm1
,
mm3
);
/* xor srcavg and dest */
pand_m2r
(
mask1
,
mm3
);
/* mask lower bits */
pand_m2r
(
mask1
,
mm3
);
/* mask lower bits */
psrlq_i2r
(
1
,
mm3
);
/* /2 */
psrlq_i2r
(
1
,
mm3
);
/* /2 */
por_r2r
(
mm2
,
mm4
);
/* or srcavg and dest */
por_r2r
(
mm2
,
mm4
);
/* or srcavg and dest */
psubb_r2r
(
mm3
,
mm4
);
/* subtract subresults */
psubb_r2r
(
mm3
,
mm4
);
/* subtract subresults */
movq_r2m
(
mm4
,
*
dest
);
/* store result in dest */
movq_r2m
(
mm4
,
*
dest
);
/* store result in dest */
}
}
/*-----------------------------------------------------------------------*/
/*-----------------------------------------------------------------------*/
static
inline
void
MC_avg_mmx
(
const
int
width
,
int
height
,
uint8_t
*
dest
,
static
inline
void
MC_avg_mmx
(
const
int
width
,
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
)
const
uint8_t
*
ref
,
const
int
stride
)
{
{
mmx_zero_reg
();
mmx_zero_reg
();
...
@@ -252,13 +252,13 @@ static inline void MC_avg_mmx (const int width, int height, uint8_t * dest,
...
@@ -252,13 +252,13 @@ static inline void MC_avg_mmx (const int width, int height, uint8_t * dest,
}
}
static
void
MC_avg_o_16_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_o_16_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg_mmx
(
16
,
height
,
dest
,
ref
,
stride
);
MC_avg_mmx
(
16
,
height
,
dest
,
ref
,
stride
);
}
}
static
void
MC_avg_o_8_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_o_8_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg_mmx
(
8
,
height
,
dest
,
ref
,
stride
);
MC_avg_mmx
(
8
,
height
,
dest
,
ref
,
stride
);
}
}
...
@@ -266,19 +266,19 @@ static void MC_avg_o_8_mmx (uint8_t * dest, const uint8_t * ref,
...
@@ -266,19 +266,19 @@ static void MC_avg_o_8_mmx (uint8_t * dest, const uint8_t * ref,
/*-----------------------------------------------------------------------*/
/*-----------------------------------------------------------------------*/
static
inline
void
MC_put_mmx
(
const
int
width
,
int
height
,
uint8_t
*
dest
,
static
inline
void
MC_put_mmx
(
const
int
width
,
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
)
const
uint8_t
*
ref
,
const
int
stride
)
{
{
mmx_zero_reg
();
mmx_zero_reg
();
do
do
{
{
movq_m2r
(
*
ref
,
mm1
);
/* load 8 ref bytes */
movq_m2r
(
*
ref
,
mm1
);
/* load 8 ref bytes */
movq_r2m
(
mm1
,
*
dest
);
/* store 8 bytes at curr */
movq_r2m
(
mm1
,
*
dest
);
/* store 8 bytes at curr */
if
(
width
==
16
)
if
(
width
==
16
)
{
{
movq_m2r
(
*
(
ref
+
8
),
mm1
);
/* load 8 ref bytes */
movq_m2r
(
*
(
ref
+
8
),
mm1
);
/* load 8 ref bytes */
movq_r2m
(
mm1
,
*
(
dest
+
8
));
/* store 8 bytes at curr */
movq_r2m
(
mm1
,
*
(
dest
+
8
));
/* store 8 bytes at curr */
}
}
dest
+=
stride
;
dest
+=
stride
;
ref
+=
stride
;
ref
+=
stride
;
...
@@ -286,13 +286,13 @@ static inline void MC_put_mmx (const int width, int height, uint8_t * dest,
...
@@ -286,13 +286,13 @@ static inline void MC_put_mmx (const int width, int height, uint8_t * dest,
}
}
static
void
MC_put_o_16_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_o_16_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put_mmx
(
16
,
height
,
dest
,
ref
,
stride
);
MC_put_mmx
(
16
,
height
,
dest
,
ref
,
stride
);
}
}
static
void
MC_put_o_8_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_o_8_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put_mmx
(
8
,
height
,
dest
,
ref
,
stride
);
MC_put_mmx
(
8
,
height
,
dest
,
ref
,
stride
);
}
}
...
@@ -301,7 +301,7 @@ static void MC_put_o_8_mmx (uint8_t * dest, const uint8_t * ref,
...
@@ -301,7 +301,7 @@ static void MC_put_o_8_mmx (uint8_t * dest, const uint8_t * ref,
/* Half pixel interpolation in the x direction */
/* Half pixel interpolation in the x direction */
static
inline
void
MC_avg_x_mmx
(
const
int
width
,
int
height
,
uint8_t
*
dest
,
static
inline
void
MC_avg_x_mmx
(
const
int
width
,
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
)
const
uint8_t
*
ref
,
const
int
stride
)
{
{
mmx_zero_reg
();
mmx_zero_reg
();
...
@@ -318,13 +318,13 @@ static inline void MC_avg_x_mmx (const int width, int height, uint8_t * dest,
...
@@ -318,13 +318,13 @@ static inline void MC_avg_x_mmx (const int width, int height, uint8_t * dest,
}
}
static
void
MC_avg_x_16_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_x_16_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg_x_mmx
(
16
,
height
,
dest
,
ref
,
stride
);
MC_avg_x_mmx
(
16
,
height
,
dest
,
ref
,
stride
);
}
}
static
void
MC_avg_x_8_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_x_8_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg_x_mmx
(
8
,
height
,
dest
,
ref
,
stride
);
MC_avg_x_mmx
(
8
,
height
,
dest
,
ref
,
stride
);
}
}
...
@@ -332,7 +332,7 @@ static void MC_avg_x_8_mmx (uint8_t * dest, const uint8_t * ref,
...
@@ -332,7 +332,7 @@ static void MC_avg_x_8_mmx (uint8_t * dest, const uint8_t * ref,
/*-----------------------------------------------------------------------*/
/*-----------------------------------------------------------------------*/
static
inline
void
MC_put_x_mmx
(
const
int
width
,
int
height
,
uint8_t
*
dest
,
static
inline
void
MC_put_x_mmx
(
const
int
width
,
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
)
const
uint8_t
*
ref
,
const
int
stride
)
{
{
mmx_zero_reg
();
mmx_zero_reg
();
...
@@ -349,13 +349,13 @@ static inline void MC_put_x_mmx (const int width, int height, uint8_t * dest,
...
@@ -349,13 +349,13 @@ static inline void MC_put_x_mmx (const int width, int height, uint8_t * dest,
}
}
static
void
MC_put_x_16_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_x_16_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put_x_mmx
(
16
,
height
,
dest
,
ref
,
stride
);
MC_put_x_mmx
(
16
,
height
,
dest
,
ref
,
stride
);
}
}
static
void
MC_put_x_8_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_x_8_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put_x_mmx
(
8
,
height
,
dest
,
ref
,
stride
);
MC_put_x_mmx
(
8
,
height
,
dest
,
ref
,
stride
);
}
}
...
@@ -363,7 +363,7 @@ static void MC_put_x_8_mmx (uint8_t * dest, const uint8_t * ref,
...
@@ -363,7 +363,7 @@ static void MC_put_x_8_mmx (uint8_t * dest, const uint8_t * ref,
/*-----------------------------------------------------------------------*/
/*-----------------------------------------------------------------------*/
static
inline
void
MC_avg_xy_mmx
(
const
int
width
,
int
height
,
uint8_t
*
dest
,
static
inline
void
MC_avg_xy_mmx
(
const
int
width
,
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
)
const
uint8_t
*
ref
,
const
int
stride
)
{
{
const
uint8_t
*
ref_next
=
ref
+
stride
;
const
uint8_t
*
ref_next
=
ref
+
stride
;
...
@@ -384,13 +384,13 @@ static inline void MC_avg_xy_mmx (const int width, int height, uint8_t * dest,
...
@@ -384,13 +384,13 @@ static inline void MC_avg_xy_mmx (const int width, int height, uint8_t * dest,
}
}
static
void
MC_avg_xy_16_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_xy_16_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg_xy_mmx
(
16
,
height
,
dest
,
ref
,
stride
);
MC_avg_xy_mmx
(
16
,
height
,
dest
,
ref
,
stride
);
}
}
static
void
MC_avg_xy_8_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_xy_8_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg_xy_mmx
(
8
,
height
,
dest
,
ref
,
stride
);
MC_avg_xy_mmx
(
8
,
height
,
dest
,
ref
,
stride
);
}
}
...
@@ -398,7 +398,7 @@ static void MC_avg_xy_8_mmx (uint8_t * dest, const uint8_t * ref,
...
@@ -398,7 +398,7 @@ static void MC_avg_xy_8_mmx (uint8_t * dest, const uint8_t * ref,
/*-----------------------------------------------------------------------*/
/*-----------------------------------------------------------------------*/
static
inline
void
MC_put_xy_mmx
(
const
int
width
,
int
height
,
uint8_t
*
dest
,
static
inline
void
MC_put_xy_mmx
(
const
int
width
,
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
)
const
uint8_t
*
ref
,
const
int
stride
)
{
{
const
uint8_t
*
ref_next
=
ref
+
stride
;
const
uint8_t
*
ref_next
=
ref
+
stride
;
...
@@ -418,13 +418,13 @@ static inline void MC_put_xy_mmx (const int width, int height, uint8_t * dest,
...
@@ -418,13 +418,13 @@ static inline void MC_put_xy_mmx (const int width, int height, uint8_t * dest,
}
}
static
void
MC_put_xy_16_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_xy_16_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put_xy_mmx
(
16
,
height
,
dest
,
ref
,
stride
);
MC_put_xy_mmx
(
16
,
height
,
dest
,
ref
,
stride
);
}
}
static
void
MC_put_xy_8_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_xy_8_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put_xy_mmx
(
8
,
height
,
dest
,
ref
,
stride
);
MC_put_xy_mmx
(
8
,
height
,
dest
,
ref
,
stride
);
}
}
...
@@ -432,7 +432,7 @@ static void MC_put_xy_8_mmx (uint8_t * dest, const uint8_t * ref,
...
@@ -432,7 +432,7 @@ static void MC_put_xy_8_mmx (uint8_t * dest, const uint8_t * ref,
/*-----------------------------------------------------------------------*/
/*-----------------------------------------------------------------------*/
static
inline
void
MC_avg_y_mmx
(
const
int
width
,
int
height
,
uint8_t
*
dest
,
static
inline
void
MC_avg_y_mmx
(
const
int
width
,
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
)
const
uint8_t
*
ref
,
const
int
stride
)
{
{
const
uint8_t
*
ref_next
=
ref
+
stride
;
const
uint8_t
*
ref_next
=
ref
+
stride
;
...
@@ -452,13 +452,13 @@ static inline void MC_avg_y_mmx (const int width, int height, uint8_t * dest,
...
@@ -452,13 +452,13 @@ static inline void MC_avg_y_mmx (const int width, int height, uint8_t * dest,
}
}
static
void
MC_avg_y_16_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_y_16_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg_y_mmx
(
16
,
height
,
dest
,
ref
,
stride
);
MC_avg_y_mmx
(
16
,
height
,
dest
,
ref
,
stride
);
}
}
static
void
MC_avg_y_8_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_y_8_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg_y_mmx
(
8
,
height
,
dest
,
ref
,
stride
);
MC_avg_y_mmx
(
8
,
height
,
dest
,
ref
,
stride
);
}
}
...
@@ -466,7 +466,7 @@ static void MC_avg_y_8_mmx (uint8_t * dest, const uint8_t * ref,
...
@@ -466,7 +466,7 @@ static void MC_avg_y_8_mmx (uint8_t * dest, const uint8_t * ref,
/*-----------------------------------------------------------------------*/
/*-----------------------------------------------------------------------*/
static
inline
void
MC_put_y_mmx
(
const
int
width
,
int
height
,
uint8_t
*
dest
,
static
inline
void
MC_put_y_mmx
(
const
int
width
,
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
)
const
uint8_t
*
ref
,
const
int
stride
)
{
{
const
uint8_t
*
ref_next
=
ref
+
stride
;
const
uint8_t
*
ref_next
=
ref
+
stride
;
...
@@ -486,13 +486,13 @@ static inline void MC_put_y_mmx (const int width, int height, uint8_t * dest,
...
@@ -486,13 +486,13 @@ static inline void MC_put_y_mmx (const int width, int height, uint8_t * dest,
}
}
static
void
MC_put_y_16_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_y_16_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put_y_mmx
(
16
,
height
,
dest
,
ref
,
stride
);
MC_put_y_mmx
(
16
,
height
,
dest
,
ref
,
stride
);
}
}
static
void
MC_put_y_8_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_y_8_mmx
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put_y_mmx
(
8
,
height
,
dest
,
ref
,
stride
);
MC_put_y_mmx
(
8
,
height
,
dest
,
ref
,
stride
);
}
}
...
@@ -502,20 +502,20 @@ MPEG2_MC_EXTERN (mmx)
...
@@ -502,20 +502,20 @@ MPEG2_MC_EXTERN (mmx)
/* CPU_MMXEXT/CPU_3DNOW adaptation layer */
/* CPU_MMXEXT/CPU_3DNOW adaptation layer */
#define pavg_r2r(src,dest)
\
#define pavg_r2r(src,dest)
\
do {
\
do {
\
if (cpu == CPU_MMXEXT)
\
if (cpu == CPU_MMXEXT)
\
pavgb_r2r (src, dest);
\
pavgb_r2r (src, dest);
\
else
\
else
\
pavgusb_r2r (src, dest);
\
pavgusb_r2r (src, dest);
\
} while (0)
} while (0)
#define pavg_m2r(src,dest)
\
#define pavg_m2r(src,dest)
\
do {
\
do {
\
if (cpu == CPU_MMXEXT)
\
if (cpu == CPU_MMXEXT)
\
pavgb_m2r (src, dest);
\
pavgb_m2r (src, dest);
\
else
\
else
\
pavgusb_m2r (src, dest);
\
pavgusb_m2r (src, dest);
\
} while (0)
} while (0)
...
@@ -523,7 +523,7 @@ do { \
...
@@ -523,7 +523,7 @@ do { \
static
inline
void
MC_put1_8
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
inline
void
MC_put1_8
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
)
const
int
stride
)
{
{
do
{
do
{
movq_m2r
(
*
ref
,
mm0
);
movq_m2r
(
*
ref
,
mm0
);
...
@@ -534,7 +534,7 @@ static inline void MC_put1_8 (int height, uint8_t * dest, const uint8_t * ref,
...
@@ -534,7 +534,7 @@ static inline void MC_put1_8 (int height, uint8_t * dest, const uint8_t * ref,
}
}
static
inline
void
MC_put1_16
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
inline
void
MC_put1_16
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
)
const
int
stride
)
{
{
do
{
do
{
movq_m2r
(
*
ref
,
mm0
);
movq_m2r
(
*
ref
,
mm0
);
...
@@ -547,7 +547,7 @@ static inline void MC_put1_16 (int height, uint8_t * dest, const uint8_t * ref,
...
@@ -547,7 +547,7 @@ static inline void MC_put1_16 (int height, uint8_t * dest, const uint8_t * ref,
}
}
static
inline
void
MC_avg1_8
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
inline
void
MC_avg1_8
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
,
const
int
cpu
)
const
int
stride
,
const
int
cpu
)
{
{
do
{
do
{
movq_m2r
(
*
ref
,
mm0
);
movq_m2r
(
*
ref
,
mm0
);
...
@@ -559,7 +559,7 @@ static inline void MC_avg1_8 (int height, uint8_t * dest, const uint8_t * ref,
...
@@ -559,7 +559,7 @@ static inline void MC_avg1_8 (int height, uint8_t * dest, const uint8_t * ref,
}
}
static
inline
void
MC_avg1_16
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
inline
void
MC_avg1_16
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
,
const
int
cpu
)
const
int
stride
,
const
int
cpu
)
{
{
do
{
do
{
movq_m2r
(
*
ref
,
mm0
);
movq_m2r
(
*
ref
,
mm0
);
...
@@ -574,8 +574,8 @@ static inline void MC_avg1_16 (int height, uint8_t * dest, const uint8_t * ref,
...
@@ -574,8 +574,8 @@ static inline void MC_avg1_16 (int height, uint8_t * dest, const uint8_t * ref,
}
}
static
inline
void
MC_put2_8
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
inline
void
MC_put2_8
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
,
const
int
offset
,
const
int
stride
,
const
int
offset
,
const
int
cpu
)
const
int
cpu
)
{
{
do
{
do
{
movq_m2r
(
*
ref
,
mm0
);
movq_m2r
(
*
ref
,
mm0
);
...
@@ -587,8 +587,8 @@ static inline void MC_put2_8 (int height, uint8_t * dest, const uint8_t * ref,
...
@@ -587,8 +587,8 @@ static inline void MC_put2_8 (int height, uint8_t * dest, const uint8_t * ref,
}
}
static
inline
void
MC_put2_16
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
inline
void
MC_put2_16
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
,
const
int
offset
,
const
int
stride
,
const
int
offset
,
const
int
cpu
)
const
int
cpu
)
{
{
do
{
do
{
movq_m2r
(
*
ref
,
mm0
);
movq_m2r
(
*
ref
,
mm0
);
...
@@ -603,8 +603,8 @@ static inline void MC_put2_16 (int height, uint8_t * dest, const uint8_t * ref,
...
@@ -603,8 +603,8 @@ static inline void MC_put2_16 (int height, uint8_t * dest, const uint8_t * ref,
}
}
static
inline
void
MC_avg2_8
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
inline
void
MC_avg2_8
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
,
const
int
offset
,
const
int
stride
,
const
int
offset
,
const
int
cpu
)
const
int
cpu
)
{
{
do
{
do
{
movq_m2r
(
*
ref
,
mm0
);
movq_m2r
(
*
ref
,
mm0
);
...
@@ -617,8 +617,8 @@ static inline void MC_avg2_8 (int height, uint8_t * dest, const uint8_t * ref,
...
@@ -617,8 +617,8 @@ static inline void MC_avg2_8 (int height, uint8_t * dest, const uint8_t * ref,
}
}
static
inline
void
MC_avg2_16
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
inline
void
MC_avg2_16
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
,
const
int
offset
,
const
int
stride
,
const
int
offset
,
const
int
cpu
)
const
int
cpu
)
{
{
do
{
do
{
movq_m2r
(
*
ref
,
mm0
);
movq_m2r
(
*
ref
,
mm0
);
...
@@ -637,7 +637,7 @@ static inline void MC_avg2_16 (int height, uint8_t * dest, const uint8_t * ref,
...
@@ -637,7 +637,7 @@ static inline void MC_avg2_16 (int height, uint8_t * dest, const uint8_t * ref,
static
mmx_t
mask_one
=
{
0x0101010101010101LL
};
static
mmx_t
mask_one
=
{
0x0101010101010101LL
};
static
inline
void
MC_put4_8
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
inline
void
MC_put4_8
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
,
const
int
cpu
)
const
int
stride
,
const
int
cpu
)
{
{
movq_m2r
(
*
ref
,
mm0
);
movq_m2r
(
*
ref
,
mm0
);
movq_m2r
(
*
(
ref
+
1
),
mm1
);
movq_m2r
(
*
(
ref
+
1
),
mm1
);
...
@@ -670,13 +670,13 @@ static inline void MC_put4_8 (int height, uint8_t * dest, const uint8_t * ref,
...
@@ -670,13 +670,13 @@ static inline void MC_put4_8 (int height, uint8_t * dest, const uint8_t * ref,
movq_r2m
(
mm0
,
*
dest
);
movq_r2m
(
mm0
,
*
dest
);
dest
+=
stride
;
dest
+=
stride
;
movq_r2r
(
mm6
,
mm7
);
/* unroll ! */
movq_r2r
(
mm6
,
mm7
);
/* unroll ! */
movq_r2r
(
mm2
,
mm0
);
/* unroll ! */
movq_r2r
(
mm2
,
mm0
);
/* unroll ! */
}
while
(
--
height
);
}
while
(
--
height
);
}
}
static
inline
void
MC_put4_16
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
inline
void
MC_put4_16
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
,
const
int
cpu
)
const
int
stride
,
const
int
cpu
)
{
{
do
{
do
{
movq_m2r
(
*
ref
,
mm0
);
movq_m2r
(
*
ref
,
mm0
);
...
@@ -722,7 +722,7 @@ static inline void MC_put4_16 (int height, uint8_t * dest, const uint8_t * ref,
...
@@ -722,7 +722,7 @@ static inline void MC_put4_16 (int height, uint8_t * dest, const uint8_t * ref,
}
}
static
inline
void
MC_avg4_8
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
inline
void
MC_avg4_8
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
,
const
int
cpu
)
const
int
stride
,
const
int
cpu
)
{
{
do
{
do
{
movq_m2r
(
*
ref
,
mm0
);
movq_m2r
(
*
ref
,
mm0
);
...
@@ -751,7 +751,7 @@ static inline void MC_avg4_8 (int height, uint8_t * dest, const uint8_t * ref,
...
@@ -751,7 +751,7 @@ static inline void MC_avg4_8 (int height, uint8_t * dest, const uint8_t * ref,
}
}
static
inline
void
MC_avg4_16
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
inline
void
MC_avg4_16
(
int
height
,
uint8_t
*
dest
,
const
uint8_t
*
ref
,
const
int
stride
,
const
int
cpu
)
const
int
stride
,
const
int
cpu
)
{
{
do
{
do
{
movq_m2r
(
*
ref
,
mm0
);
movq_m2r
(
*
ref
,
mm0
);
...
@@ -801,97 +801,97 @@ static inline void MC_avg4_16 (int height, uint8_t * dest, const uint8_t * ref,
...
@@ -801,97 +801,97 @@ static inline void MC_avg4_16 (int height, uint8_t * dest, const uint8_t * ref,
}
}
static
void
MC_avg_o_16_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_o_16_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg1_16
(
height
,
dest
,
ref
,
stride
,
CPU_MMXEXT
);
MC_avg1_16
(
height
,
dest
,
ref
,
stride
,
CPU_MMXEXT
);
}
}
static
void
MC_avg_o_8_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_o_8_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg1_8
(
height
,
dest
,
ref
,
stride
,
CPU_MMXEXT
);
MC_avg1_8
(
height
,
dest
,
ref
,
stride
,
CPU_MMXEXT
);
}
}
static
void
MC_put_o_16_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_o_16_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put1_16
(
height
,
dest
,
ref
,
stride
);
MC_put1_16
(
height
,
dest
,
ref
,
stride
);
}
}
static
void
MC_put_o_8_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_o_8_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put1_8
(
height
,
dest
,
ref
,
stride
);
MC_put1_8
(
height
,
dest
,
ref
,
stride
);
}
}
static
void
MC_avg_x_16_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_x_16_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg2_16
(
height
,
dest
,
ref
,
stride
,
1
,
CPU_MMXEXT
);
MC_avg2_16
(
height
,
dest
,
ref
,
stride
,
1
,
CPU_MMXEXT
);
}
}
static
void
MC_avg_x_8_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_x_8_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg2_8
(
height
,
dest
,
ref
,
stride
,
1
,
CPU_MMXEXT
);
MC_avg2_8
(
height
,
dest
,
ref
,
stride
,
1
,
CPU_MMXEXT
);
}
}
static
void
MC_put_x_16_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_x_16_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put2_16
(
height
,
dest
,
ref
,
stride
,
1
,
CPU_MMXEXT
);
MC_put2_16
(
height
,
dest
,
ref
,
stride
,
1
,
CPU_MMXEXT
);
}
}
static
void
MC_put_x_8_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_x_8_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put2_8
(
height
,
dest
,
ref
,
stride
,
1
,
CPU_MMXEXT
);
MC_put2_8
(
height
,
dest
,
ref
,
stride
,
1
,
CPU_MMXEXT
);
}
}
static
void
MC_avg_y_16_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_y_16_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg2_16
(
height
,
dest
,
ref
,
stride
,
stride
,
CPU_MMXEXT
);
MC_avg2_16
(
height
,
dest
,
ref
,
stride
,
stride
,
CPU_MMXEXT
);
}
}
static
void
MC_avg_y_8_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_y_8_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg2_8
(
height
,
dest
,
ref
,
stride
,
stride
,
CPU_MMXEXT
);
MC_avg2_8
(
height
,
dest
,
ref
,
stride
,
stride
,
CPU_MMXEXT
);
}
}
static
void
MC_put_y_16_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_y_16_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put2_16
(
height
,
dest
,
ref
,
stride
,
stride
,
CPU_MMXEXT
);
MC_put2_16
(
height
,
dest
,
ref
,
stride
,
stride
,
CPU_MMXEXT
);
}
}
static
void
MC_put_y_8_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_y_8_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put2_8
(
height
,
dest
,
ref
,
stride
,
stride
,
CPU_MMXEXT
);
MC_put2_8
(
height
,
dest
,
ref
,
stride
,
stride
,
CPU_MMXEXT
);
}
}
static
void
MC_avg_xy_16_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_xy_16_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg4_16
(
height
,
dest
,
ref
,
stride
,
CPU_MMXEXT
);
MC_avg4_16
(
height
,
dest
,
ref
,
stride
,
CPU_MMXEXT
);
}
}
static
void
MC_avg_xy_8_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_xy_8_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg4_8
(
height
,
dest
,
ref
,
stride
,
CPU_MMXEXT
);
MC_avg4_8
(
height
,
dest
,
ref
,
stride
,
CPU_MMXEXT
);
}
}
static
void
MC_put_xy_16_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_xy_16_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put4_16
(
height
,
dest
,
ref
,
stride
,
CPU_MMXEXT
);
MC_put4_16
(
height
,
dest
,
ref
,
stride
,
CPU_MMXEXT
);
}
}
static
void
MC_put_xy_8_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_xy_8_mmxext
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put4_8
(
height
,
dest
,
ref
,
stride
,
CPU_MMXEXT
);
MC_put4_8
(
height
,
dest
,
ref
,
stride
,
CPU_MMXEXT
);
}
}
...
@@ -899,97 +899,97 @@ static void MC_put_xy_8_mmxext (uint8_t * dest, const uint8_t * ref,
...
@@ -899,97 +899,97 @@ static void MC_put_xy_8_mmxext (uint8_t * dest, const uint8_t * ref,
MPEG2_MC_EXTERN
(
mmxext
)
MPEG2_MC_EXTERN
(
mmxext
)
static
void
MC_avg_o_16_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_o_16_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg1_16
(
height
,
dest
,
ref
,
stride
,
CPU_3DNOW
);
MC_avg1_16
(
height
,
dest
,
ref
,
stride
,
CPU_3DNOW
);
}
}
static
void
MC_avg_o_8_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_o_8_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg1_8
(
height
,
dest
,
ref
,
stride
,
CPU_3DNOW
);
MC_avg1_8
(
height
,
dest
,
ref
,
stride
,
CPU_3DNOW
);
}
}
static
void
MC_put_o_16_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_o_16_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put1_16
(
height
,
dest
,
ref
,
stride
);
MC_put1_16
(
height
,
dest
,
ref
,
stride
);
}
}
static
void
MC_put_o_8_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_o_8_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put1_8
(
height
,
dest
,
ref
,
stride
);
MC_put1_8
(
height
,
dest
,
ref
,
stride
);
}
}
static
void
MC_avg_x_16_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_x_16_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg2_16
(
height
,
dest
,
ref
,
stride
,
1
,
CPU_3DNOW
);
MC_avg2_16
(
height
,
dest
,
ref
,
stride
,
1
,
CPU_3DNOW
);
}
}
static
void
MC_avg_x_8_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_x_8_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg2_8
(
height
,
dest
,
ref
,
stride
,
1
,
CPU_3DNOW
);
MC_avg2_8
(
height
,
dest
,
ref
,
stride
,
1
,
CPU_3DNOW
);
}
}
static
void
MC_put_x_16_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_x_16_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put2_16
(
height
,
dest
,
ref
,
stride
,
1
,
CPU_3DNOW
);
MC_put2_16
(
height
,
dest
,
ref
,
stride
,
1
,
CPU_3DNOW
);
}
}
static
void
MC_put_x_8_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_x_8_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put2_8
(
height
,
dest
,
ref
,
stride
,
1
,
CPU_3DNOW
);
MC_put2_8
(
height
,
dest
,
ref
,
stride
,
1
,
CPU_3DNOW
);
}
}
static
void
MC_avg_y_16_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_y_16_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg2_16
(
height
,
dest
,
ref
,
stride
,
stride
,
CPU_3DNOW
);
MC_avg2_16
(
height
,
dest
,
ref
,
stride
,
stride
,
CPU_3DNOW
);
}
}
static
void
MC_avg_y_8_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_y_8_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg2_8
(
height
,
dest
,
ref
,
stride
,
stride
,
CPU_3DNOW
);
MC_avg2_8
(
height
,
dest
,
ref
,
stride
,
stride
,
CPU_3DNOW
);
}
}
static
void
MC_put_y_16_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_y_16_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put2_16
(
height
,
dest
,
ref
,
stride
,
stride
,
CPU_3DNOW
);
MC_put2_16
(
height
,
dest
,
ref
,
stride
,
stride
,
CPU_3DNOW
);
}
}
static
void
MC_put_y_8_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_y_8_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put2_8
(
height
,
dest
,
ref
,
stride
,
stride
,
CPU_3DNOW
);
MC_put2_8
(
height
,
dest
,
ref
,
stride
,
stride
,
CPU_3DNOW
);
}
}
static
void
MC_avg_xy_16_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_xy_16_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg4_16
(
height
,
dest
,
ref
,
stride
,
CPU_3DNOW
);
MC_avg4_16
(
height
,
dest
,
ref
,
stride
,
CPU_3DNOW
);
}
}
static
void
MC_avg_xy_8_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_avg_xy_8_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_avg4_8
(
height
,
dest
,
ref
,
stride
,
CPU_3DNOW
);
MC_avg4_8
(
height
,
dest
,
ref
,
stride
,
CPU_3DNOW
);
}
}
static
void
MC_put_xy_16_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_xy_16_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put4_16
(
height
,
dest
,
ref
,
stride
,
CPU_3DNOW
);
MC_put4_16
(
height
,
dest
,
ref
,
stride
,
CPU_3DNOW
);
}
}
static
void
MC_put_xy_8_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
static
void
MC_put_xy_8_3dnow
(
uint8_t
*
dest
,
const
uint8_t
*
ref
,
int
stride
,
int
height
)
int
stride
,
int
height
)
{
{
MC_put4_8
(
height
,
dest
,
ref
,
stride
,
CPU_3DNOW
);
MC_put4_8
(
height
,
dest
,
ref
,
stride
,
CPU_3DNOW
);
}
}
...
...
modules/codec/xvmc/mpeg2.h
View file @
f102b577
...
@@ -25,7 +25,7 @@
...
@@ -25,7 +25,7 @@
#define MPEG2_H
#define MPEG2_H
#define MPEG2_VERSION(a,b,c) (((a)<<16)|((b)<<8)|(c))
#define MPEG2_VERSION(a,b,c) (((a)<<16)|((b)<<8)|(c))
#define MPEG2_RELEASE MPEG2_VERSION (0, 4, 0)
/* 0.4.0 */
#define MPEG2_RELEASE MPEG2_VERSION (0, 4, 0)
/* 0.4.0 */
#define SEQ_FLAG_MPEG2 1
#define SEQ_FLAG_MPEG2 1
#define SEQ_FLAG_CONSTRAINED_PARAMETERS 2
#define SEQ_FLAG_CONSTRAINED_PARAMETERS 2
...
@@ -154,9 +154,9 @@ typedef enum
...
@@ -154,9 +154,9 @@ typedef enum
}
mpeg2_convert_stage_t
;
}
mpeg2_convert_stage_t
;
typedef
int
mpeg2_convert_t
(
int
stage
,
void
*
id
,
typedef
int
mpeg2_convert_t
(
int
stage
,
void
*
id
,
const
mpeg2_sequence_t
*
sequence
,
int
stride
,
const
mpeg2_sequence_t
*
sequence
,
int
stride
,
uint32_t
accel
,
void
*
arg
,
uint32_t
accel
,
void
*
arg
,
mpeg2_convert_init_t
*
result
);
mpeg2_convert_init_t
*
result
);
int
mpeg2_convert
(
mpeg2dec_t
*
mpeg2dec
,
mpeg2_convert_t
convert
,
void
*
arg
);
int
mpeg2_convert
(
mpeg2dec_t
*
mpeg2dec
,
mpeg2_convert_t
convert
,
void
*
arg
);
int
mpeg2_stride
(
mpeg2dec_t
*
mpeg2dec
,
int
stride
);
int
mpeg2_stride
(
mpeg2dec_t
*
mpeg2dec
,
int
stride
);
void
mpeg2_set_buf
(
mpeg2dec_t
*
mpeg2dec
,
uint8_t
*
buf
[
3
],
void
*
id
);
void
mpeg2_set_buf
(
mpeg2dec_t
*
mpeg2dec
,
uint8_t
*
buf
[
3
],
void
*
id
);
...
@@ -188,7 +188,7 @@ void mpeg2_slice_region (mpeg2dec_t * mpeg2dec, int start, int end);
...
@@ -188,7 +188,7 @@ void mpeg2_slice_region (mpeg2dec_t * mpeg2dec, int start, int end);
void
mpeg2_tag_picture
(
mpeg2dec_t
*
mpeg2dec
,
uint32_t
tag
,
uint32_t
tag2
);
void
mpeg2_tag_picture
(
mpeg2dec_t
*
mpeg2dec
,
uint32_t
tag
,
uint32_t
tag2
);
void
mpeg2_init_fbuf
(
mpeg2_decoder_t
*
decoder
,
uint8_t
*
current_fbuf
[
3
],
void
mpeg2_init_fbuf
(
mpeg2_decoder_t
*
decoder
,
uint8_t
*
current_fbuf
[
3
],
uint8_t
*
forward_fbuf
[
3
],
uint8_t
*
backward_fbuf
[
3
]);
uint8_t
*
forward_fbuf
[
3
],
uint8_t
*
backward_fbuf
[
3
]);
typedef
enum
typedef
enum
{
{
...
@@ -202,6 +202,6 @@ typedef enum
...
@@ -202,6 +202,6 @@ typedef enum
void
*
mpeg2_malloc
(
unsigned
size
,
mpeg2_alloc_t
reason
);
void
*
mpeg2_malloc
(
unsigned
size
,
mpeg2_alloc_t
reason
);
void
mpeg2_free
(
void
*
buf
);
void
mpeg2_free
(
void
*
buf
);
void
mpeg2_malloc_hooks
(
void
*
malloc
(
unsigned
,
mpeg2_alloc_t
),
void
mpeg2_malloc_hooks
(
void
*
malloc
(
unsigned
,
mpeg2_alloc_t
),
int
free
(
void
*
));
int
free
(
void
*
));
#endif
/* MPEG2_H */
#endif
/* MPEG2_H */
modules/codec/xvmc/mpeg2_internal.h
View file @
f102b577
...
@@ -66,9 +66,9 @@ struct mpeg2_decoder_s
...
@@ -66,9 +66,9 @@ struct mpeg2_decoder_s
/* next inside a slice, and is never used outside of mpeg2_slice() */
/* next inside a slice, and is never used outside of mpeg2_slice() */
/* bit parsing stuff */
/* bit parsing stuff */
uint32_t
bitstream_buf
;
/* current 32 bit working set */
uint32_t
bitstream_buf
;
/* current 32 bit working set */
int
bitstream_bits
;
/* used bits in working set */
int
bitstream_bits
;
/* used bits in working set */
const
uint8_t
*
bitstream_ptr
;
/* buffer with stream data */
const
uint8_t
*
bitstream_ptr
;
/* buffer with stream data */
uint8_t
*
dest
[
3
];
uint8_t
*
dest
[
3
];
...
@@ -203,7 +203,7 @@ struct mpeg2dec_s
...
@@ -203,7 +203,7 @@ struct mpeg2dec_s
mpeg2_picture_t
new_picture
;
mpeg2_picture_t
new_picture
;
mpeg2_picture_t
pictures
[
4
];
mpeg2_picture_t
pictures
[
4
];
mpeg2_picture_t
*
picture
;
mpeg2_picture_t
*
picture
;
/*const*/
mpeg2_fbuf_t
*
fbuf
[
3
];
/* 0: current fbuf, 1-2: prediction fbufs */
/*const*/
mpeg2_fbuf_t
*
fbuf
[
3
];
/* 0: current fbuf, 1-2: prediction fbufs */
fbuf_alloc_t
fbuf_alloc
[
3
];
fbuf_alloc_t
fbuf_alloc
[
3
];
int
custom_fbuf
;
int
custom_fbuf
;
...
@@ -281,7 +281,7 @@ typedef struct {
...
@@ -281,7 +281,7 @@ typedef struct {
mpeg2_mc_fct
*
avg
[
8
];
mpeg2_mc_fct
*
avg
[
8
];
}
mpeg2_mc_t
;
}
mpeg2_mc_t
;
#define MPEG2_MC_EXTERN(x) mpeg2_mc_t mpeg2_mc_##x = {
\
#define MPEG2_MC_EXTERN(x) mpeg2_mc_t mpeg2_mc_##x = {
\
{MC_put_o_16_##x, MC_put_x_16_##x, MC_put_y_16_##x, MC_put_xy_16_##x, \
{MC_put_o_16_##x, MC_put_x_16_##x, MC_put_y_16_##x, MC_put_xy_16_##x, \
MC_put_o_8_##x, MC_put_x_8_##x, MC_put_y_8_##x, MC_put_xy_8_##x}, \
MC_put_o_8_##x, MC_put_x_8_##x, MC_put_y_8_##x, MC_put_xy_8_##x}, \
{MC_avg_o_16_##x, MC_avg_x_16_##x, MC_avg_y_16_##x, MC_avg_xy_16_##x, \
{MC_avg_o_16_##x, MC_avg_x_16_##x, MC_avg_y_16_##x, MC_avg_xy_16_##x, \
...
...
modules/codec/xvmc/slice.c
View file @
f102b577
...
@@ -37,7 +37,7 @@ extern void (* mpeg2_cpu_state_restore) (cpu_state_t * state);
...
@@ -37,7 +37,7 @@ extern void (* mpeg2_cpu_state_restore) (cpu_state_t * state);
#include "vlc.h"
#include "vlc.h"
static
inline
int
get_motion_delta
(
mpeg2_decoder_t
*
const
decoder
,
static
inline
int
get_motion_delta
(
mpeg2_decoder_t
*
const
decoder
,
const
int
f_code
)
const
int
f_code
)
{
{
#define bit_buf (decoder->bitstream_buf)
#define bit_buf (decoder->bitstream_buf)
#define bits (decoder->bitstream_bits)
#define bits (decoder->bitstream_bits)
...
@@ -112,292 +112,292 @@ static inline int get_dmv (mpeg2_decoder_t * const decoder)
...
@@ -112,292 +112,292 @@ static inline int get_dmv (mpeg2_decoder_t * const decoder)
#undef bit_ptr
#undef bit_ptr
}
}
#define MOTION_420(table,ref,motion_x,motion_y,size,y)
\
#define MOTION_420(table,ref,motion_x,motion_y,size,y)
\
pos_x = 2 * decoder->offset + motion_x;
\
pos_x = 2 * decoder->offset + motion_x;
\
pos_y = 2 * decoder->v_offset + motion_y + 2 * y;
\
pos_y = 2 * decoder->v_offset + motion_y + 2 * y;
\
if (unlikely (pos_x > decoder->limit_x)) {
\
if (unlikely (pos_x > decoder->limit_x)) {
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
motion_x = pos_x - 2 * decoder->offset;
\
motion_x = pos_x - 2 * decoder->offset;
\
}
\
}
\
if (unlikely (pos_y > decoder->limit_y_ ## size)) {
\
if (unlikely (pos_y > decoder->limit_y_ ## size)) {
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y_ ## size;
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y_ ## size;
\
motion_y = pos_y - 2 * decoder->v_offset - 2 * y;
\
motion_y = pos_y - 2 * decoder->v_offset - 2 * y;
\
}
\
}
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
table[xy_half] (decoder->dest[0] + y * decoder->stride + decoder->offset, \
table[xy_half] (decoder->dest[0] + y * decoder->stride + decoder->offset, \
ref[0] + (pos_x >> 1) + (pos_y >> 1) * decoder->stride, \
ref[0] + (pos_x >> 1) + (pos_y >> 1) * decoder->stride, \
decoder->stride, size);
\
decoder->stride, size);
\
motion_x /= 2;
motion_y /= 2;
\
motion_x /= 2;
motion_y /= 2;
\
xy_half = ((motion_y & 1) << 1) | (motion_x & 1);
\
xy_half = ((motion_y & 1) << 1) | (motion_x & 1);
\
offset = (((decoder->offset + motion_x) >> 1) +
\
offset = (((decoder->offset + motion_x) >> 1) +
\
((((decoder->v_offset + motion_y) >> 1) + y/2) *
\
((((decoder->v_offset + motion_y) >> 1) + y/2) *
\
decoder->uv_stride));
\
decoder->uv_stride));
\
table[4+xy_half] (decoder->dest[1] + y/2 * decoder->uv_stride +
\
table[4+xy_half] (decoder->dest[1] + y/2 * decoder->uv_stride +
\
(decoder->offset >> 1), ref[1] + offset,
\
(decoder->offset >> 1), ref[1] + offset,
\
decoder->uv_stride, size/2);
\
decoder->uv_stride, size/2);
\
table[4+xy_half] (decoder->dest[2] + y/2 * decoder->uv_stride +
\
table[4+xy_half] (decoder->dest[2] + y/2 * decoder->uv_stride +
\
(decoder->offset >> 1), ref[2] + offset,
\
(decoder->offset >> 1), ref[2] + offset,
\
decoder->uv_stride, size/2)
decoder->uv_stride, size/2)
#define MOTION_FIELD_420(table,ref,motion_x,motion_y,dest_field,op,src_field) \
#define MOTION_FIELD_420(table,ref,motion_x,motion_y,dest_field,op,src_field) \
pos_x = 2 * decoder->offset + motion_x;
\
pos_x = 2 * decoder->offset + motion_x;
\
pos_y = decoder->v_offset + motion_y;
\
pos_y = decoder->v_offset + motion_y;
\
if (unlikely (pos_x > decoder->limit_x)) {
\
if (unlikely (pos_x > decoder->limit_x)) {
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
motion_x = pos_x - 2 * decoder->offset;
\
motion_x = pos_x - 2 * decoder->offset;
\
}
\
}
\
if (unlikely (pos_y > decoder->limit_y)) {
\
if (unlikely (pos_y > decoder->limit_y)) {
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y;
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y;
\
motion_y = pos_y - decoder->v_offset;
\
motion_y = pos_y - decoder->v_offset;
\
}
\
}
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
table[xy_half] (decoder->dest[0] + dest_field * decoder->stride +
\
table[xy_half] (decoder->dest[0] + dest_field * decoder->stride +
\
decoder->offset,
\
decoder->offset,
\
(ref[0] + (pos_x >> 1) +
\
(ref[0] + (pos_x >> 1) +
\
((pos_y op) + src_field) * decoder->stride),
\
((pos_y op) + src_field) * decoder->stride),
\
2 * decoder->stride, 8);
\
2 * decoder->stride, 8);
\
motion_x /= 2;
motion_y /= 2;
\
motion_x /= 2;
motion_y /= 2;
\
xy_half = ((motion_y & 1) << 1) | (motion_x & 1);
\
xy_half = ((motion_y & 1) << 1) | (motion_x & 1);
\
offset = (((decoder->offset + motion_x) >> 1) +
\
offset = (((decoder->offset + motion_x) >> 1) +
\
(((decoder->v_offset >> 1) + (motion_y op) + src_field) *
\
(((decoder->v_offset >> 1) + (motion_y op) + src_field) *
\
decoder->uv_stride));
\
decoder->uv_stride));
\
table[4+xy_half] (decoder->dest[1] + dest_field * decoder->uv_stride + \
table[4+xy_half] (decoder->dest[1] + dest_field * decoder->uv_stride + \
(decoder->offset >> 1), ref[1] + offset,
\
(decoder->offset >> 1), ref[1] + offset,
\
2 * decoder->uv_stride, 4);
\
2 * decoder->uv_stride, 4);
\
table[4+xy_half] (decoder->dest[2] + dest_field * decoder->uv_stride + \
table[4+xy_half] (decoder->dest[2] + dest_field * decoder->uv_stride + \
(decoder->offset >> 1), ref[2] + offset,
\
(decoder->offset >> 1), ref[2] + offset,
\
2 * decoder->uv_stride, 4)
2 * decoder->uv_stride, 4)
#define MOTION_DMV_420(table,ref,motion_x,motion_y)
\
#define MOTION_DMV_420(table,ref,motion_x,motion_y)
\
pos_x = 2 * decoder->offset + motion_x;
\
pos_x = 2 * decoder->offset + motion_x;
\
pos_y = decoder->v_offset + motion_y;
\
pos_y = decoder->v_offset + motion_y;
\
if (unlikely (pos_x > decoder->limit_x)) {
\
if (unlikely (pos_x > decoder->limit_x)) {
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
motion_x = pos_x - 2 * decoder->offset;
\
motion_x = pos_x - 2 * decoder->offset;
\
}
\
}
\
if (unlikely (pos_y > decoder->limit_y)) {
\
if (unlikely (pos_y > decoder->limit_y)) {
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y;
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y;
\
motion_y = pos_y - decoder->v_offset;
\
motion_y = pos_y - decoder->v_offset;
\
}
\
}
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
offset = (pos_x >> 1) + (pos_y & ~1) * decoder->stride;
\
offset = (pos_x >> 1) + (pos_y & ~1) * decoder->stride;
\
table[xy_half] (decoder->dest[0] + decoder->offset,
\
table[xy_half] (decoder->dest[0] + decoder->offset,
\
ref[0] + offset, 2 * decoder->stride, 8);
\
ref[0] + offset, 2 * decoder->stride, 8);
\
table[xy_half] (decoder->dest[0] + decoder->stride + decoder->offset, \
table[xy_half] (decoder->dest[0] + decoder->stride + decoder->offset, \
ref[0] + decoder->stride + offset,
\
ref[0] + decoder->stride + offset,
\
2 * decoder->stride, 8);
\
2 * decoder->stride, 8);
\
motion_x /= 2;
motion_y /= 2;
\
motion_x /= 2;
motion_y /= 2;
\
xy_half = ((motion_y & 1) << 1) | (motion_x & 1);
\
xy_half = ((motion_y & 1) << 1) | (motion_x & 1);
\
offset = (((decoder->offset + motion_x) >> 1) +
\
offset = (((decoder->offset + motion_x) >> 1) +
\
(((decoder->v_offset >> 1) + (motion_y & ~1)) *
\
(((decoder->v_offset >> 1) + (motion_y & ~1)) *
\
decoder->uv_stride));
\
decoder->uv_stride));
\
table[4+xy_half] (decoder->dest[1] + (decoder->offset >> 1),
\
table[4+xy_half] (decoder->dest[1] + (decoder->offset >> 1),
\
ref[1] + offset, 2 * decoder->uv_stride, 4);
\
ref[1] + offset, 2 * decoder->uv_stride, 4);
\
table[4+xy_half] (decoder->dest[1] + decoder->uv_stride +
\
table[4+xy_half] (decoder->dest[1] + decoder->uv_stride +
\
(decoder->offset >> 1),
\
(decoder->offset >> 1),
\
ref[1] + decoder->uv_stride + offset,
\
ref[1] + decoder->uv_stride + offset,
\
2 * decoder->uv_stride, 4);
\
2 * decoder->uv_stride, 4);
\
table[4+xy_half] (decoder->dest[2] + (decoder->offset >> 1),
\
table[4+xy_half] (decoder->dest[2] + (decoder->offset >> 1),
\
ref[2] + offset, 2 * decoder->uv_stride, 4);
\
ref[2] + offset, 2 * decoder->uv_stride, 4);
\
table[4+xy_half] (decoder->dest[2] + decoder->uv_stride +
\
table[4+xy_half] (decoder->dest[2] + decoder->uv_stride +
\
(decoder->offset >> 1),
\
(decoder->offset >> 1),
\
ref[2] + decoder->uv_stride + offset,
\
ref[2] + decoder->uv_stride + offset,
\
2 * decoder->uv_stride, 4)
2 * decoder->uv_stride, 4)
#define MOTION_ZERO_420(table,ref)
\
#define MOTION_ZERO_420(table,ref)
\
table[0] (decoder->dest[0] + decoder->offset,
\
table[0] (decoder->dest[0] + decoder->offset,
\
(ref[0] + decoder->offset +
\
(ref[0] + decoder->offset +
\
decoder->v_offset * decoder->stride), decoder->stride, 16); \
decoder->v_offset * decoder->stride), decoder->stride, 16); \
offset = ((decoder->offset >> 1) +
\
offset = ((decoder->offset >> 1) +
\
(decoder->v_offset >> 1) * decoder->uv_stride);
\
(decoder->v_offset >> 1) * decoder->uv_stride);
\
table[4] (decoder->dest[1] + (decoder->offset >> 1),
\
table[4] (decoder->dest[1] + (decoder->offset >> 1),
\
ref[1] + offset, decoder->uv_stride, 8);
\
ref[1] + offset, decoder->uv_stride, 8);
\
table[4] (decoder->dest[2] + (decoder->offset >> 1),
\
table[4] (decoder->dest[2] + (decoder->offset >> 1),
\
ref[2] + offset, decoder->uv_stride, 8)
ref[2] + offset, decoder->uv_stride, 8)
#define MOTION_422(table,ref,motion_x,motion_y,size,y)
\
#define MOTION_422(table,ref,motion_x,motion_y,size,y)
\
pos_x = 2 * decoder->offset + motion_x;
\
pos_x = 2 * decoder->offset + motion_x;
\
pos_y = 2 * decoder->v_offset + motion_y + 2 * y;
\
pos_y = 2 * decoder->v_offset + motion_y + 2 * y;
\
if (unlikely (pos_x > decoder->limit_x)) {
\
if (unlikely (pos_x > decoder->limit_x)) {
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
motion_x = pos_x - 2 * decoder->offset;
\
motion_x = pos_x - 2 * decoder->offset;
\
}
\
}
\
if (unlikely (pos_y > decoder->limit_y_ ## size)) {
\
if (unlikely (pos_y > decoder->limit_y_ ## size)) {
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y_ ## size;
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y_ ## size;
\
motion_y = pos_y - 2 * decoder->v_offset - 2 * y;
\
motion_y = pos_y - 2 * decoder->v_offset - 2 * y;
\
}
\
}
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
offset = (pos_x >> 1) + (pos_y >> 1) * decoder->stride;
\
offset = (pos_x >> 1) + (pos_y >> 1) * decoder->stride;
\
table[xy_half] (decoder->dest[0] + y * decoder->stride + decoder->offset, \
table[xy_half] (decoder->dest[0] + y * decoder->stride + decoder->offset, \
ref[0] + offset, decoder->stride, size);
\
ref[0] + offset, decoder->stride, size);
\
offset = (offset + (motion_x & (motion_x < 0))) >> 1;
\
offset = (offset + (motion_x & (motion_x < 0))) >> 1;
\
motion_x /= 2;
\
motion_x /= 2;
\
xy_half = ((pos_y & 1) << 1) | (motion_x & 1);
\
xy_half = ((pos_y & 1) << 1) | (motion_x & 1);
\
table[4+xy_half] (decoder->dest[1] + y * decoder->uv_stride +
\
table[4+xy_half] (decoder->dest[1] + y * decoder->uv_stride +
\
(decoder->offset >> 1), ref[1] + offset,
\
(decoder->offset >> 1), ref[1] + offset,
\
decoder->uv_stride, size);
\
decoder->uv_stride, size);
\
table[4+xy_half] (decoder->dest[2] + y * decoder->uv_stride +
\
table[4+xy_half] (decoder->dest[2] + y * decoder->uv_stride +
\
(decoder->offset >> 1), ref[2] + offset,
\
(decoder->offset >> 1), ref[2] + offset,
\
decoder->uv_stride, size)
decoder->uv_stride, size)
#define MOTION_FIELD_422(table,ref,motion_x,motion_y,dest_field,op,src_field) \
#define MOTION_FIELD_422(table,ref,motion_x,motion_y,dest_field,op,src_field) \
pos_x = 2 * decoder->offset + motion_x;
\
pos_x = 2 * decoder->offset + motion_x;
\
pos_y = decoder->v_offset + motion_y;
\
pos_y = decoder->v_offset + motion_y;
\
if (unlikely (pos_x > decoder->limit_x)) {
\
if (unlikely (pos_x > decoder->limit_x)) {
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
motion_x = pos_x - 2 * decoder->offset;
\
motion_x = pos_x - 2 * decoder->offset;
\
}
\
}
\
if (unlikely (pos_y > decoder->limit_y)) {
\
if (unlikely (pos_y > decoder->limit_y)) {
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y;
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y;
\
motion_y = pos_y - decoder->v_offset;
\
motion_y = pos_y - decoder->v_offset;
\
}
\
}
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
offset = (pos_x >> 1) + ((pos_y op) + src_field) * decoder->stride;
\
offset = (pos_x >> 1) + ((pos_y op) + src_field) * decoder->stride;
\
table[xy_half] (decoder->dest[0] + dest_field * decoder->stride +
\
table[xy_half] (decoder->dest[0] + dest_field * decoder->stride +
\
decoder->offset, ref[0] + offset,
\
decoder->offset, ref[0] + offset,
\
2 * decoder->stride, 8);
\
2 * decoder->stride, 8);
\
offset = (offset + (motion_x & (motion_x < 0))) >> 1;
\
offset = (offset + (motion_x & (motion_x < 0))) >> 1;
\
motion_x /= 2;
\
motion_x /= 2;
\
xy_half = ((pos_y & 1) << 1) | (motion_x & 1);
\
xy_half = ((pos_y & 1) << 1) | (motion_x & 1);
\
table[4+xy_half] (decoder->dest[1] + dest_field * decoder->uv_stride + \
table[4+xy_half] (decoder->dest[1] + dest_field * decoder->uv_stride + \
(decoder->offset >> 1), ref[1] + offset,
\
(decoder->offset >> 1), ref[1] + offset,
\
2 * decoder->uv_stride, 8);
\
2 * decoder->uv_stride, 8);
\
table[4+xy_half] (decoder->dest[2] + dest_field * decoder->uv_stride + \
table[4+xy_half] (decoder->dest[2] + dest_field * decoder->uv_stride + \
(decoder->offset >> 1), ref[2] + offset,
\
(decoder->offset >> 1), ref[2] + offset,
\
2 * decoder->uv_stride, 8)
2 * decoder->uv_stride, 8)
#define MOTION_DMV_422(table,ref,motion_x,motion_y)
\
#define MOTION_DMV_422(table,ref,motion_x,motion_y)
\
pos_x = 2 * decoder->offset + motion_x;
\
pos_x = 2 * decoder->offset + motion_x;
\
pos_y = decoder->v_offset + motion_y;
\
pos_y = decoder->v_offset + motion_y;
\
if (unlikely (pos_x > decoder->limit_x)) {
\
if (unlikely (pos_x > decoder->limit_x)) {
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
motion_x = pos_x - 2 * decoder->offset;
\
motion_x = pos_x - 2 * decoder->offset;
\
}
\
}
\
if (unlikely (pos_y > decoder->limit_y)) {
\
if (unlikely (pos_y > decoder->limit_y)) {
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y;
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y;
\
motion_y = pos_y - decoder->v_offset;
\
motion_y = pos_y - decoder->v_offset;
\
}
\
}
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
offset = (pos_x >> 1) + (pos_y & ~1) * decoder->stride;
\
offset = (pos_x >> 1) + (pos_y & ~1) * decoder->stride;
\
table[xy_half] (decoder->dest[0] + decoder->offset,
\
table[xy_half] (decoder->dest[0] + decoder->offset,
\
ref[0] + offset, 2 * decoder->stride, 8);
\
ref[0] + offset, 2 * decoder->stride, 8);
\
table[xy_half] (decoder->dest[0] + decoder->stride + decoder->offset, \
table[xy_half] (decoder->dest[0] + decoder->stride + decoder->offset, \
ref[0] + decoder->stride + offset,
\
ref[0] + decoder->stride + offset,
\
2 * decoder->stride, 8);
\
2 * decoder->stride, 8);
\
offset = (offset + (motion_x & (motion_x < 0))) >> 1;
\
offset = (offset + (motion_x & (motion_x < 0))) >> 1;
\
motion_x /= 2;
\
motion_x /= 2;
\
xy_half = ((pos_y & 1) << 1) | (motion_x & 1);
\
xy_half = ((pos_y & 1) << 1) | (motion_x & 1);
\
table[4+xy_half] (decoder->dest[1] + (decoder->offset >> 1),
\
table[4+xy_half] (decoder->dest[1] + (decoder->offset >> 1),
\
ref[1] + offset, 2 * decoder->uv_stride, 8);
\
ref[1] + offset, 2 * decoder->uv_stride, 8);
\
table[4+xy_half] (decoder->dest[1] + decoder->uv_stride +
\
table[4+xy_half] (decoder->dest[1] + decoder->uv_stride +
\
(decoder->offset >> 1),
\
(decoder->offset >> 1),
\
ref[1] + decoder->uv_stride + offset,
\
ref[1] + decoder->uv_stride + offset,
\
2 * decoder->uv_stride, 8);
\
2 * decoder->uv_stride, 8);
\
table[4+xy_half] (decoder->dest[2] + (decoder->offset >> 1),
\
table[4+xy_half] (decoder->dest[2] + (decoder->offset >> 1),
\
ref[2] + offset, 2 * decoder->uv_stride, 8);
\
ref[2] + offset, 2 * decoder->uv_stride, 8);
\
table[4+xy_half] (decoder->dest[2] + decoder->uv_stride +
\
table[4+xy_half] (decoder->dest[2] + decoder->uv_stride +
\
(decoder->offset >> 1),
\
(decoder->offset >> 1),
\
ref[2] + decoder->uv_stride + offset,
\
ref[2] + decoder->uv_stride + offset,
\
2 * decoder->uv_stride, 8)
2 * decoder->uv_stride, 8)
#define MOTION_ZERO_422(table,ref)
\
#define MOTION_ZERO_422(table,ref)
\
offset = decoder->offset + decoder->v_offset * decoder->stride;
\
offset = decoder->offset + decoder->v_offset * decoder->stride;
\
table[0] (decoder->dest[0] + decoder->offset,
\
table[0] (decoder->dest[0] + decoder->offset,
\
ref[0] + offset, decoder->stride, 16);
\
ref[0] + offset, decoder->stride, 16);
\
offset >>= 1;
\
offset >>= 1;
\
table[4] (decoder->dest[1] + (decoder->offset >> 1),
\
table[4] (decoder->dest[1] + (decoder->offset >> 1),
\
ref[1] + offset, decoder->uv_stride, 16);
\
ref[1] + offset, decoder->uv_stride, 16);
\
table[4] (decoder->dest[2] + (decoder->offset >> 1),
\
table[4] (decoder->dest[2] + (decoder->offset >> 1),
\
ref[2] + offset, decoder->uv_stride, 16)
ref[2] + offset, decoder->uv_stride, 16)
#define MOTION_444(table,ref,motion_x,motion_y,size,y)
\
#define MOTION_444(table,ref,motion_x,motion_y,size,y)
\
pos_x = 2 * decoder->offset + motion_x;
\
pos_x = 2 * decoder->offset + motion_x;
\
pos_y = 2 * decoder->v_offset + motion_y + 2 * y;
\
pos_y = 2 * decoder->v_offset + motion_y + 2 * y;
\
if (unlikely (pos_x > decoder->limit_x)) {
\
if (unlikely (pos_x > decoder->limit_x)) {
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
motion_x = pos_x - 2 * decoder->offset;
\
motion_x = pos_x - 2 * decoder->offset;
\
}
\
}
\
if (unlikely (pos_y > decoder->limit_y_ ## size)) {
\
if (unlikely (pos_y > decoder->limit_y_ ## size)) {
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y_ ## size;
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y_ ## size;
\
motion_y = pos_y - 2 * decoder->v_offset - 2 * y;
\
motion_y = pos_y - 2 * decoder->v_offset - 2 * y;
\
}
\
}
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
offset = (pos_x >> 1) + (pos_y >> 1) * decoder->stride;
\
offset = (pos_x >> 1) + (pos_y >> 1) * decoder->stride;
\
table[xy_half] (decoder->dest[0] + y * decoder->stride + decoder->offset, \
table[xy_half] (decoder->dest[0] + y * decoder->stride + decoder->offset, \
ref[0] + offset, decoder->stride, size);
\
ref[0] + offset, decoder->stride, size);
\
table[xy_half] (decoder->dest[1] + y * decoder->stride + decoder->offset, \
table[xy_half] (decoder->dest[1] + y * decoder->stride + decoder->offset, \
ref[1] + offset, decoder->stride, size);
\
ref[1] + offset, decoder->stride, size);
\
table[xy_half] (decoder->dest[2] + y * decoder->stride + decoder->offset, \
table[xy_half] (decoder->dest[2] + y * decoder->stride + decoder->offset, \
ref[2] + offset, decoder->stride, size)
ref[2] + offset, decoder->stride, size)
#define MOTION_FIELD_444(table,ref,motion_x,motion_y,dest_field,op,src_field) \
#define MOTION_FIELD_444(table,ref,motion_x,motion_y,dest_field,op,src_field) \
pos_x = 2 * decoder->offset + motion_x;
\
pos_x = 2 * decoder->offset + motion_x;
\
pos_y = decoder->v_offset + motion_y;
\
pos_y = decoder->v_offset + motion_y;
\
if (unlikely (pos_x > decoder->limit_x)) {
\
if (unlikely (pos_x > decoder->limit_x)) {
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
motion_x = pos_x - 2 * decoder->offset;
\
motion_x = pos_x - 2 * decoder->offset;
\
}
\
}
\
if (unlikely (pos_y > decoder->limit_y)) {
\
if (unlikely (pos_y > decoder->limit_y)) {
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y;
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y;
\
motion_y = pos_y - decoder->v_offset;
\
motion_y = pos_y - decoder->v_offset;
\
}
\
}
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
offset = (pos_x >> 1) + ((pos_y op) + src_field) * decoder->stride;
\
offset = (pos_x >> 1) + ((pos_y op) + src_field) * decoder->stride;
\
table[xy_half] (decoder->dest[0] + dest_field * decoder->stride +
\
table[xy_half] (decoder->dest[0] + dest_field * decoder->stride +
\
decoder->offset, ref[0] + offset,
\
decoder->offset, ref[0] + offset,
\
2 * decoder->stride, 8);
\
2 * decoder->stride, 8);
\
table[xy_half] (decoder->dest[1] + dest_field * decoder->stride +
\
table[xy_half] (decoder->dest[1] + dest_field * decoder->stride +
\
decoder->offset, ref[1] + offset,
\
decoder->offset, ref[1] + offset,
\
2 * decoder->stride, 8);
\
2 * decoder->stride, 8);
\
table[xy_half] (decoder->dest[2] + dest_field * decoder->stride +
\
table[xy_half] (decoder->dest[2] + dest_field * decoder->stride +
\
decoder->offset, ref[2] + offset,
\
decoder->offset, ref[2] + offset,
\
2 * decoder->stride, 8)
2 * decoder->stride, 8)
#define MOTION_DMV_444(table,ref,motion_x,motion_y)
\
#define MOTION_DMV_444(table,ref,motion_x,motion_y)
\
pos_x = 2 * decoder->offset + motion_x;
\
pos_x = 2 * decoder->offset + motion_x;
\
pos_y = decoder->v_offset + motion_y;
\
pos_y = decoder->v_offset + motion_y;
\
if (unlikely (pos_x > decoder->limit_x)) {
\
if (unlikely (pos_x > decoder->limit_x)) {
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
pos_x = ((int)pos_x < 0) ? 0 : decoder->limit_x;
\
motion_x = pos_x - 2 * decoder->offset;
\
motion_x = pos_x - 2 * decoder->offset;
\
}
\
}
\
if (unlikely (pos_y > decoder->limit_y)) {
\
if (unlikely (pos_y > decoder->limit_y)) {
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y;
\
pos_y = ((int)pos_y < 0) ? 0 : decoder->limit_y;
\
motion_y = pos_y - decoder->v_offset;
\
motion_y = pos_y - decoder->v_offset;
\
}
\
}
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
xy_half = ((pos_y & 1) << 1) | (pos_x & 1);
\
offset = (pos_x >> 1) + (pos_y & ~1) * decoder->stride;
\
offset = (pos_x >> 1) + (pos_y & ~1) * decoder->stride;
\
table[xy_half] (decoder->dest[0] + decoder->offset,
\
table[xy_half] (decoder->dest[0] + decoder->offset,
\
ref[0] + offset, 2 * decoder->stride, 8);
\
ref[0] + offset, 2 * decoder->stride, 8);
\
table[xy_half] (decoder->dest[0] + decoder->stride + decoder->offset, \
table[xy_half] (decoder->dest[0] + decoder->stride + decoder->offset, \
ref[0] + decoder->stride + offset,
\
ref[0] + decoder->stride + offset,
\
2 * decoder->stride, 8);
\
2 * decoder->stride, 8);
\
table[xy_half] (decoder->dest[1] + decoder->offset,
\
table[xy_half] (decoder->dest[1] + decoder->offset,
\
ref[1] + offset, 2 * decoder->stride, 8);
\
ref[1] + offset, 2 * decoder->stride, 8);
\
table[xy_half] (decoder->dest[1] + decoder->stride + decoder->offset, \
table[xy_half] (decoder->dest[1] + decoder->stride + decoder->offset, \
ref[1] + decoder->stride + offset,
\
ref[1] + decoder->stride + offset,
\
2 * decoder->stride, 8);
\
2 * decoder->stride, 8);
\
table[xy_half] (decoder->dest[2] + decoder->offset,
\
table[xy_half] (decoder->dest[2] + decoder->offset,
\
ref[2] + offset, 2 * decoder->stride, 8);
\
ref[2] + offset, 2 * decoder->stride, 8);
\
table[xy_half] (decoder->dest[2] + decoder->stride + decoder->offset, \
table[xy_half] (decoder->dest[2] + decoder->stride + decoder->offset, \
ref[2] + decoder->stride + offset,
\
ref[2] + decoder->stride + offset,
\
2 * decoder->stride, 8)
2 * decoder->stride, 8)
#define MOTION_ZERO_444(table,ref)
\
#define MOTION_ZERO_444(table,ref)
\
offset = decoder->offset + decoder->v_offset * decoder->stride;
\
offset = decoder->offset + decoder->v_offset * decoder->stride;
\
table[0] (decoder->dest[0] + decoder->offset,
\
table[0] (decoder->dest[0] + decoder->offset,
\
ref[0] + offset, decoder->stride, 16);
\
ref[0] + offset, decoder->stride, 16);
\
table[4] (decoder->dest[1] + decoder->offset,
\
table[4] (decoder->dest[1] + decoder->offset,
\
ref[1] + offset, decoder->stride, 16);
\
ref[1] + offset, decoder->stride, 16);
\
table[4] (decoder->dest[2] + (decoder->offset >> 1),
\
table[4] (decoder->dest[2] + (decoder->offset >> 1),
\
ref[2] + offset, decoder->stride, 16)
ref[2] + offset, decoder->stride, 16)
#define bit_buf (decoder->bitstream_buf)
#define bit_buf (decoder->bitstream_buf)
#define bits (decoder->bitstream_bits)
#define bits (decoder->bitstream_bits)
#define bit_ptr (decoder->bitstream_ptr)
#define bit_ptr (decoder->bitstream_ptr)
static
void
motion_mp1
(
mpeg2_decoder_t
*
const
decoder
,
static
void
motion_mp1
(
mpeg2_decoder_t
*
const
decoder
,
motion_t
*
const
motion
,
motion_t
*
const
motion
,
mpeg2_mc_fct
*
const
*
const
table
)
mpeg2_mc_fct
*
const
*
const
table
)
{
{
int
motion_x
,
motion_y
;
int
motion_x
,
motion_y
;
unsigned
int
pos_x
,
pos_y
,
xy_half
,
offset
;
unsigned
int
pos_x
,
pos_y
,
xy_half
,
offset
;
...
@@ -421,231 +421,231 @@ static void motion_mp1 (mpeg2_decoder_t * const decoder,
...
@@ -421,231 +421,231 @@ static void motion_mp1 (mpeg2_decoder_t * const decoder,
}
}
#define MOTION_FUNCTIONS(FORMAT,MOTION,MOTION_FIELD,MOTION_DMV,MOTION_ZERO) \
#define MOTION_FUNCTIONS(FORMAT,MOTION,MOTION_FIELD,MOTION_DMV,MOTION_ZERO) \
\
\
static void motion_fr_frame_##FORMAT (mpeg2_decoder_t * const decoder,
\
static void motion_fr_frame_##FORMAT (mpeg2_decoder_t * const decoder,
\
motion_t * const motion,
\
motion_t * const motion,
\
mpeg2_mc_fct * const * const table) \
mpeg2_mc_fct * const * const table) \
{
\
{
\
int motion_x, motion_y;
\
int motion_x, motion_y;
\
unsigned int pos_x, pos_y, xy_half, offset;
\
unsigned int pos_x, pos_y, xy_half, offset;
\
\
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
\
motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
\
motion->f_code[0]); \
motion->f_code[0]); \
motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
\
motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
\
motion->pmv[1][0] = motion->pmv[0][0] = motion_x;
\
motion->pmv[1][0] = motion->pmv[0][0] = motion_x;
\
\
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
motion_y = motion->pmv[0][1] + get_motion_delta (decoder,
\
motion_y = motion->pmv[0][1] + get_motion_delta (decoder,
\
motion->f_code[1]); \
motion->f_code[1]); \
motion_y = bound_motion_vector (motion_y, motion->f_code[1]);
\
motion_y = bound_motion_vector (motion_y, motion->f_code[1]);
\
motion->pmv[1][1] = motion->pmv[0][1] = motion_y;
\
motion->pmv[1][1] = motion->pmv[0][1] = motion_y;
\
\
\
MOTION (table, motion->ref[0], motion_x, motion_y, 16, 0);
\
MOTION (table, motion->ref[0], motion_x, motion_y, 16, 0);
\
}
\
}
\
\
\
static void motion_fr_field_##FORMAT (mpeg2_decoder_t * const decoder,
\
static void motion_fr_field_##FORMAT (mpeg2_decoder_t * const decoder,
\
motion_t * const motion,
\
motion_t * const motion,
\
mpeg2_mc_fct * const * const table) \
mpeg2_mc_fct * const * const table) \
{
\
{
\
int motion_x, motion_y, field;
\
int motion_x, motion_y, field;
\
unsigned int pos_x, pos_y, xy_half, offset;
\
unsigned int pos_x, pos_y, xy_half, offset;
\
\
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
field = UBITS (bit_buf, 1);
\
field = UBITS (bit_buf, 1);
\
DUMPBITS (bit_buf, bits, 1);
\
DUMPBITS (bit_buf, bits, 1);
\
\
\
motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
\
motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
\
motion->f_code[0]); \
motion->f_code[0]); \
motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
\
motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
\
motion->pmv[0][0] = motion_x;
\
motion->pmv[0][0] = motion_x;
\
\
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
motion_y = ((motion->pmv[0][1] >> 1) +
\
motion_y = ((motion->pmv[0][1] >> 1) +
\
get_motion_delta (decoder, motion->f_code[1]));
\
get_motion_delta (decoder, motion->f_code[1]));
\
/* motion_y = bound_motion_vector (motion_y, motion->f_code[1]); */
\
/* motion_y = bound_motion_vector (motion_y, motion->f_code[1]); */
\
motion->pmv[0][1] = motion_y << 1;
\
motion->pmv[0][1] = motion_y << 1;
\
\
\
MOTION_FIELD (table, motion->ref[0], motion_x, motion_y, 0, & ~1, field); \
MOTION_FIELD (table, motion->ref[0], motion_x, motion_y, 0, & ~1, field); \
\
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
field = UBITS (bit_buf, 1);
\
field = UBITS (bit_buf, 1);
\
DUMPBITS (bit_buf, bits, 1);
\
DUMPBITS (bit_buf, bits, 1);
\
\
\
motion_x = motion->pmv[1][0] + get_motion_delta (decoder,
\
motion_x = motion->pmv[1][0] + get_motion_delta (decoder,
\
motion->f_code[0]); \
motion->f_code[0]); \
motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
\
motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
\
motion->pmv[1][0] = motion_x;
\
motion->pmv[1][0] = motion_x;
\
\
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
motion_y = ((motion->pmv[1][1] >> 1) +
\
motion_y = ((motion->pmv[1][1] >> 1) +
\
get_motion_delta (decoder, motion->f_code[1]));
\
get_motion_delta (decoder, motion->f_code[1]));
\
/* motion_y = bound_motion_vector (motion_y, motion->f_code[1]); */
\
/* motion_y = bound_motion_vector (motion_y, motion->f_code[1]); */
\
motion->pmv[1][1] = motion_y << 1;
\
motion->pmv[1][1] = motion_y << 1;
\
\
\
MOTION_FIELD (table, motion->ref[0], motion_x, motion_y, 1, & ~1, field); \
MOTION_FIELD (table, motion->ref[0], motion_x, motion_y, 1, & ~1, field); \
}
\
}
\
\
\
static void motion_fr_dmv_##FORMAT (mpeg2_decoder_t * const decoder,
\
static void motion_fr_dmv_##FORMAT (mpeg2_decoder_t * const decoder,
\
motion_t * const motion,
\
motion_t * const motion,
\
mpeg2_mc_fct * const * const table)
\
mpeg2_mc_fct * const * const table)
\
{
\
{
\
int motion_x, motion_y, dmv_x, dmv_y, m, other_x, other_y;
\
int motion_x, motion_y, dmv_x, dmv_y, m, other_x, other_y;
\
unsigned int pos_x, pos_y, xy_half, offset;
\
unsigned int pos_x, pos_y, xy_half, offset;
\
\
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
\
motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
\
motion->f_code[0]); \
motion->f_code[0]); \
motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
\
motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
\
motion->pmv[1][0] = motion->pmv[0][0] = motion_x;
\
motion->pmv[1][0] = motion->pmv[0][0] = motion_x;
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
dmv_x = get_dmv (decoder);
\
dmv_x = get_dmv (decoder);
\
\
\
motion_y = ((motion->pmv[0][1] >> 1) +
\
motion_y = ((motion->pmv[0][1] >> 1) +
\
get_motion_delta (decoder, motion->f_code[1]));
\
get_motion_delta (decoder, motion->f_code[1]));
\
/* motion_y = bound_motion_vector (motion_y, motion->f_code[1]); */
\
/* motion_y = bound_motion_vector (motion_y, motion->f_code[1]); */
\
motion->pmv[1][1] = motion->pmv[0][1] = motion_y << 1;
\
motion->pmv[1][1] = motion->pmv[0][1] = motion_y << 1;
\
dmv_y = get_dmv (decoder);
\
dmv_y = get_dmv (decoder);
\
\
\
m = decoder->top_field_first ? 1 : 3;
\
m = decoder->top_field_first ? 1 : 3;
\
other_x = ((motion_x * m + (motion_x > 0)) >> 1) + dmv_x;
\
other_x = ((motion_x * m + (motion_x > 0)) >> 1) + dmv_x;
\
other_y = ((motion_y * m + (motion_y > 0)) >> 1) + dmv_y - 1;
\
other_y = ((motion_y * m + (motion_y > 0)) >> 1) + dmv_y - 1;
\
MOTION_FIELD (mpeg2_mc.put, motion->ref[0], other_x, other_y, 0, | 1, 0); \
MOTION_FIELD (mpeg2_mc.put, motion->ref[0], other_x, other_y, 0, | 1, 0); \
\
\
m = decoder->top_field_first ? 3 : 1;
\
m = decoder->top_field_first ? 3 : 1;
\
other_x = ((motion_x * m + (motion_x > 0)) >> 1) + dmv_x;
\
other_x = ((motion_x * m + (motion_x > 0)) >> 1) + dmv_x;
\
other_y = ((motion_y * m + (motion_y > 0)) >> 1) + dmv_y + 1;
\
other_y = ((motion_y * m + (motion_y > 0)) >> 1) + dmv_y + 1;
\
MOTION_FIELD (mpeg2_mc.put, motion->ref[0], other_x, other_y, 1, & ~1, 0);\
MOTION_FIELD (mpeg2_mc.put, motion->ref[0], other_x, other_y, 1, & ~1, 0);\
\
\
MOTION_DMV (mpeg2_mc.avg, motion->ref[0], motion_x, motion_y);
\
MOTION_DMV (mpeg2_mc.avg, motion->ref[0], motion_x, motion_y);
\
}
\
}
\
\
\
static void motion_reuse_##FORMAT (mpeg2_decoder_t * const decoder,
\
static void motion_reuse_##FORMAT (mpeg2_decoder_t * const decoder,
\
motion_t * const motion,
\
motion_t * const motion,
\
mpeg2_mc_fct * const * const table)
\
mpeg2_mc_fct * const * const table)
\
{
\
{
\
int motion_x, motion_y;
\
int motion_x, motion_y;
\
unsigned int pos_x, pos_y, xy_half, offset;
\
unsigned int pos_x, pos_y, xy_half, offset;
\
\
\
motion_x = motion->pmv[0][0];
\
motion_x = motion->pmv[0][0];
\
motion_y = motion->pmv[0][1];
\
motion_y = motion->pmv[0][1];
\
\
\
MOTION (table, motion->ref[0], motion_x, motion_y, 16, 0);
\
MOTION (table, motion->ref[0], motion_x, motion_y, 16, 0);
\
}
\
}
\
\
\
static void motion_zero_##FORMAT (mpeg2_decoder_t * const decoder,
\
static void motion_zero_##FORMAT (mpeg2_decoder_t * const decoder,
\
motion_t * const motion,
\
motion_t * const motion,
\
mpeg2_mc_fct * const * const table)
\
mpeg2_mc_fct * const * const table)
\
{
\
{
\
unsigned int offset;
\
unsigned int offset;
\
\
\
motion->pmv[0][0] = motion->pmv[0][1] = 0;
\
motion->pmv[0][0] = motion->pmv[0][1] = 0;
\
motion->pmv[1][0] = motion->pmv[1][1] = 0;
\
motion->pmv[1][0] = motion->pmv[1][1] = 0;
\
\
\
MOTION_ZERO (table, motion->ref[0]);
\
MOTION_ZERO (table, motion->ref[0]);
\
}
\
}
\
\
\
static void motion_fi_field_##FORMAT (mpeg2_decoder_t * const decoder,
\
static void motion_fi_field_##FORMAT (mpeg2_decoder_t * const decoder,
\
motion_t * const motion,
\
motion_t * const motion,
\
mpeg2_mc_fct * const * const table) \
mpeg2_mc_fct * const * const table) \
{
\
{
\
int motion_x, motion_y;
\
int motion_x, motion_y;
\
uint8_t ** ref_field;
\
uint8_t ** ref_field;
\
unsigned int pos_x, pos_y, xy_half, offset;
\
unsigned int pos_x, pos_y, xy_half, offset;
\
\
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
ref_field = motion->ref2[UBITS (bit_buf, 1)];
\
ref_field = motion->ref2[UBITS (bit_buf, 1)];
\
DUMPBITS (bit_buf, bits, 1);
\
DUMPBITS (bit_buf, bits, 1);
\
\
\
motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
\
motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
\
motion->f_code[0]); \
motion->f_code[0]); \
motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
\
motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
\
motion->pmv[1][0] = motion->pmv[0][0] = motion_x;
\
motion->pmv[1][0] = motion->pmv[0][0] = motion_x;
\
\
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
motion_y = motion->pmv[0][1] + get_motion_delta (decoder,
\
motion_y = motion->pmv[0][1] + get_motion_delta (decoder,
\
motion->f_code[1]); \
motion->f_code[1]); \
motion_y = bound_motion_vector (motion_y, motion->f_code[1]);
\
motion_y = bound_motion_vector (motion_y, motion->f_code[1]);
\
motion->pmv[1][1] = motion->pmv[0][1] = motion_y;
\
motion->pmv[1][1] = motion->pmv[0][1] = motion_y;
\
\
\
MOTION (table, ref_field, motion_x, motion_y, 16, 0);
\
MOTION (table, ref_field, motion_x, motion_y, 16, 0);
\
}
\
}
\
\
\
static void motion_fi_16x8_##FORMAT (mpeg2_decoder_t * const decoder,
\
static void motion_fi_16x8_##FORMAT (mpeg2_decoder_t * const decoder,
\
motion_t * const motion,
\
motion_t * const motion,
\
mpeg2_mc_fct * const * const table) \
mpeg2_mc_fct * const * const table) \
{
\
{
\
int motion_x, motion_y;
\
int motion_x, motion_y;
\
uint8_t ** ref_field;
\
uint8_t ** ref_field;
\
unsigned int pos_x, pos_y, xy_half, offset;
\
unsigned int pos_x, pos_y, xy_half, offset;
\
\
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
ref_field = motion->ref2[UBITS (bit_buf, 1)];
\
ref_field = motion->ref2[UBITS (bit_buf, 1)];
\
DUMPBITS (bit_buf, bits, 1);
\
DUMPBITS (bit_buf, bits, 1);
\
\
\
motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
\
motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
\
motion->f_code[0]); \
motion->f_code[0]); \
motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
\
motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
\
motion->pmv[0][0] = motion_x;
\
motion->pmv[0][0] = motion_x;
\
\
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
motion_y = motion->pmv[0][1] + get_motion_delta (decoder,
\
motion_y = motion->pmv[0][1] + get_motion_delta (decoder,
\
motion->f_code[1]); \
motion->f_code[1]); \
motion_y = bound_motion_vector (motion_y, motion->f_code[1]);
\
motion_y = bound_motion_vector (motion_y, motion->f_code[1]);
\
motion->pmv[0][1] = motion_y;
\
motion->pmv[0][1] = motion_y;
\
\
\
MOTION (table, ref_field, motion_x, motion_y, 8, 0);
\
MOTION (table, ref_field, motion_x, motion_y, 8, 0);
\
\
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
ref_field = motion->ref2[UBITS (bit_buf, 1)];
\
ref_field = motion->ref2[UBITS (bit_buf, 1)];
\
DUMPBITS (bit_buf, bits, 1);
\
DUMPBITS (bit_buf, bits, 1);
\
\
\
motion_x = motion->pmv[1][0] + get_motion_delta (decoder,
\
motion_x = motion->pmv[1][0] + get_motion_delta (decoder,
\
motion->f_code[0]); \
motion->f_code[0]); \
motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
\
motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
\
motion->pmv[1][0] = motion_x;
\
motion->pmv[1][0] = motion_x;
\
\
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
motion_y = motion->pmv[1][1] + get_motion_delta (decoder,
\
motion_y = motion->pmv[1][1] + get_motion_delta (decoder,
\
motion->f_code[1]); \
motion->f_code[1]); \
motion_y = bound_motion_vector (motion_y, motion->f_code[1]);
\
motion_y = bound_motion_vector (motion_y, motion->f_code[1]);
\
motion->pmv[1][1] = motion_y;
\
motion->pmv[1][1] = motion_y;
\
\
\
MOTION (table, ref_field, motion_x, motion_y, 8, 8);
\
MOTION (table, ref_field, motion_x, motion_y, 8, 8);
\
}
\
}
\
\
\
static void motion_fi_dmv_##FORMAT (mpeg2_decoder_t * const decoder,
\
static void motion_fi_dmv_##FORMAT (mpeg2_decoder_t * const decoder,
\
motion_t * const motion,
\
motion_t * const motion,
\
mpeg2_mc_fct * const * const table)
\
mpeg2_mc_fct * const * const table)
\
{
\
{
\
int motion_x, motion_y, other_x, other_y;
\
int motion_x, motion_y, other_x, other_y;
\
unsigned int pos_x, pos_y, xy_half, offset;
\
unsigned int pos_x, pos_y, xy_half, offset;
\
\
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
\
motion_x = motion->pmv[0][0] + get_motion_delta (decoder,
\
motion->f_code[0]); \
motion->f_code[0]); \
motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
\
motion_x = bound_motion_vector (motion_x, motion->f_code[0]);
\
motion->pmv[1][0] = motion->pmv[0][0] = motion_x;
\
motion->pmv[1][0] = motion->pmv[0][0] = motion_x;
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
NEEDBITS (bit_buf, bits, bit_ptr);
\
other_x = ((motion_x + (motion_x > 0)) >> 1) + get_dmv (decoder);
\
other_x = ((motion_x + (motion_x > 0)) >> 1) + get_dmv (decoder);
\
\
\
motion_y = motion->pmv[0][1] + get_motion_delta (decoder,
\
motion_y = motion->pmv[0][1] + get_motion_delta (decoder,
\
motion->f_code[1]); \
motion->f_code[1]); \
motion_y = bound_motion_vector (motion_y, motion->f_code[1]);
\
motion_y = bound_motion_vector (motion_y, motion->f_code[1]);
\
motion->pmv[1][1] = motion->pmv[0][1] = motion_y;
\
motion->pmv[1][1] = motion->pmv[0][1] = motion_y;
\
other_y = (((motion_y + (motion_y > 0)) >> 1) + get_dmv (decoder) +
\
other_y = (((motion_y + (motion_y > 0)) >> 1) + get_dmv (decoder) +
\
decoder->dmv_offset);
\
decoder->dmv_offset);
\
\
\
MOTION (mpeg2_mc.put, motion->ref[0], motion_x, motion_y, 16, 0);
\
MOTION (mpeg2_mc.put, motion->ref[0], motion_x, motion_y, 16, 0);
\
MOTION (mpeg2_mc.avg, motion->ref[1], other_x, other_y, 16, 0);
\
MOTION (mpeg2_mc.avg, motion->ref[1], other_x, other_y, 16, 0);
\
}
\
}
\
MOTION_FUNCTIONS
(
420
,
MOTION_420
,
MOTION_FIELD_420
,
MOTION_DMV_420
,
MOTION_FUNCTIONS
(
420
,
MOTION_420
,
MOTION_FIELD_420
,
MOTION_DMV_420
,
MOTION_ZERO_420
)
MOTION_ZERO_420
)
MOTION_FUNCTIONS
(
422
,
MOTION_422
,
MOTION_FIELD_422
,
MOTION_DMV_422
,
MOTION_FUNCTIONS
(
422
,
MOTION_422
,
MOTION_FIELD_422
,
MOTION_DMV_422
,
MOTION_ZERO_422
)
MOTION_ZERO_422
)
MOTION_FUNCTIONS
(
444
,
MOTION_444
,
MOTION_FIELD_444
,
MOTION_DMV_444
,
MOTION_FUNCTIONS
(
444
,
MOTION_444
,
MOTION_FIELD_444
,
MOTION_DMV_444
,
MOTION_ZERO_444
)
MOTION_ZERO_444
)
/* like motion_frame, but parsing without actual motion compensation */
/* like motion_frame, but parsing without actual motion compensation */
static
void
motion_fr_conceal
(
mpeg2_decoder_t
*
const
decoder
)
static
void
motion_fr_conceal
(
mpeg2_decoder_t
*
const
decoder
)
...
@@ -692,43 +692,43 @@ static void motion_fi_conceal (mpeg2_decoder_t * const decoder)
...
@@ -692,43 +692,43 @@ static void motion_fi_conceal (mpeg2_decoder_t * const decoder)
#undef bits
#undef bits
#undef bit_ptr
#undef bit_ptr
#define MOTION_CALL(routine,direction)
\
#define MOTION_CALL(routine,direction)
\
do {
\
do {
\
if ((direction) & MACROBLOCK_MOTION_FORWARD)
\
if ((direction) & MACROBLOCK_MOTION_FORWARD)
\
routine (decoder, &(decoder->f_motion), mpeg2_mc.put);
\
routine (decoder, &(decoder->f_motion), mpeg2_mc.put);
\
if ((direction) & MACROBLOCK_MOTION_BACKWARD)
\
if ((direction) & MACROBLOCK_MOTION_BACKWARD)
\
routine (decoder, &(decoder->b_motion),
\
routine (decoder, &(decoder->b_motion),
\
((direction) & MACROBLOCK_MOTION_FORWARD ?
\
((direction) & MACROBLOCK_MOTION_FORWARD ?
\
mpeg2_mc.avg : mpeg2_mc.put));
\
mpeg2_mc.avg : mpeg2_mc.put));
\
} while (0)
} while (0)
#define NEXT_MACROBLOCK
\
#define NEXT_MACROBLOCK
\
do {
\
do {
\
decoder->offset += 16;
\
decoder->offset += 16;
\
if (decoder->offset == decoder->width) {
\
if (decoder->offset == decoder->width) {
\
do {
/* just so we can use the break statement */
\
do {
/* just so we can use the break statement */
\
if (decoder->convert) {
\
if (decoder->convert) {
\
decoder->convert (decoder->convert_id, decoder->dest,
\
decoder->convert (decoder->convert_id, decoder->dest,
\
decoder->v_offset);
\
decoder->v_offset);
\
if (decoder->coding_type == B_TYPE)
\
if (decoder->coding_type == B_TYPE)
\
break;
\
break;
\
}
\
}
\
decoder->dest[0] += decoder->slice_stride;
\
decoder->dest[0] += decoder->slice_stride;
\
decoder->dest[1] += decoder->slice_uv_stride;
\
decoder->dest[1] += decoder->slice_uv_stride;
\
decoder->dest[2] += decoder->slice_uv_stride;
\
decoder->dest[2] += decoder->slice_uv_stride;
\
} while (0);
\
} while (0);
\
decoder->v_offset += 16;
\
decoder->v_offset += 16;
\
if (decoder->v_offset > decoder->limit_y) {
\
if (decoder->v_offset > decoder->limit_y) {
\
if (mpeg2_cpu_state_restore)
\
if (mpeg2_cpu_state_restore)
\
mpeg2_cpu_state_restore (&cpu_state);
\
mpeg2_cpu_state_restore (&cpu_state);
\
return;
\
return;
\
}
\
}
\
decoder->offset = 0;
\
decoder->offset = 0;
\
}
\
}
\
} while (0)
} while (0)
void
mpeg2_init_fbuf
(
mpeg2_decoder_t
*
decoder
,
uint8_t
*
current_fbuf
[
3
],
void
mpeg2_init_fbuf
(
mpeg2_decoder_t
*
decoder
,
uint8_t
*
current_fbuf
[
3
],
uint8_t
*
forward_fbuf
[
3
],
uint8_t
*
backward_fbuf
[
3
])
uint8_t
*
forward_fbuf
[
3
],
uint8_t
*
backward_fbuf
[
3
])
{
{
int
offset
,
stride
,
height
,
bottom_field
;
int
offset
,
stride
,
height
,
bottom_field
;
...
...
modules/codec/xvmc/slice_xvmc_vld.c
View file @
f102b577
...
@@ -105,7 +105,7 @@ void mpeg2_xxmc_slice( mpeg2dec_t *mpeg2dec, picture_t *picture,
...
@@ -105,7 +105,7 @@ void mpeg2_xxmc_slice( mpeg2dec_t *mpeg2dec, picture_t *picture,
/*
/*
* Check that first field went through OK. Otherwise,
* Check that first field went through OK. Otherwise,
* indicate bad frame.
* indicate bad frame.
*/
*/
if
(
decoder
->
second_field
)
if
(
decoder
->
second_field
)
{
{
mpeg2dec
->
xvmc_last_slice_code
=
(
xxmc
->
decoded
)
?
0
:
-
1
;
mpeg2dec
->
xvmc_last_slice_code
=
(
xxmc
->
decoded
)
?
0
:
-
1
;
...
@@ -238,7 +238,7 @@ void mpeg2_xxmc_slice( mpeg2dec_t *mpeg2dec, picture_t *picture,
...
@@ -238,7 +238,7 @@ void mpeg2_xxmc_slice( mpeg2dec_t *mpeg2dec, picture_t *picture,
if
(
xxmc
->
result
!=
0
)
if
(
xxmc
->
result
!=
0
)
{
{
//xxmc->proc_xxmc_flushsync( picture );
//xxmc->proc_xxmc_flushsync( picture );
xxmc
->
proc_xxmc_flush
(
picture
);
xxmc
->
proc_xxmc_flush
(
picture
);
mpeg2dec
->
xvmc_last_slice_code
=-
1
;
mpeg2dec
->
xvmc_last_slice_code
=-
1
;
return
;
return
;
}
}
...
@@ -276,7 +276,7 @@ void mpeg2_xxmc_slice( mpeg2dec_t *mpeg2dec, picture_t *picture,
...
@@ -276,7 +276,7 @@ void mpeg2_xxmc_slice( mpeg2dec_t *mpeg2dec, picture_t *picture,
}
}
}
}
void
mpeg2_xxmc_vld_frame_complete
(
mpeg2dec_t
*
mpeg2dec
,
picture_t
*
picture
,
int
code
)
void
mpeg2_xxmc_vld_frame_complete
(
mpeg2dec_t
*
mpeg2dec
,
picture_t
*
picture
,
int
code
)
{
{
vlc_xxmc_t
*
xxmc
=
(
vlc_xxmc_t
*
)
picture
->
p_data
;
vlc_xxmc_t
*
xxmc
=
(
vlc_xxmc_t
*
)
picture
->
p_data
;
vlc_vld_frame_t
*
vft
=
&
xxmc
->
vld_frame
;
vlc_vld_frame_t
*
vft
=
&
xxmc
->
vld_frame
;
...
...
modules/codec/xvmc/vlc.h
View file @
f102b577
...
@@ -21,35 +21,35 @@
...
@@ -21,35 +21,35 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
*/
#define GETWORD(bit_buf,shift,bit_ptr)
\
#define GETWORD(bit_buf,shift,bit_ptr)
\
do {
\
do {
\
bit_buf |= ((bit_ptr[0] << 8) | bit_ptr[1]) << (shift);
\
bit_buf |= ((bit_ptr[0] << 8) | bit_ptr[1]) << (shift);
\
bit_ptr += 2;
\
bit_ptr += 2;
\
} while (0)
} while (0)
static
inline
void
bitstream_init
(
mpeg2_decoder_t
*
decoder
,
static
inline
void
bitstream_init
(
mpeg2_decoder_t
*
decoder
,
const
uint8_t
*
start
)
const
uint8_t
*
start
)
{
{
decoder
->
bitstream_buf
=
decoder
->
bitstream_buf
=
(
start
[
0
]
<<
24
)
|
(
start
[
1
]
<<
16
)
|
(
start
[
2
]
<<
8
)
|
start
[
3
];
(
start
[
0
]
<<
24
)
|
(
start
[
1
]
<<
16
)
|
(
start
[
2
]
<<
8
)
|
start
[
3
];
decoder
->
bitstream_ptr
=
start
+
4
;
decoder
->
bitstream_ptr
=
start
+
4
;
decoder
->
bitstream_bits
=
-
16
;
decoder
->
bitstream_bits
=
-
16
;
}
}
/* make sure that there are at least 16 valid bits in bit_buf */
/* make sure that there are at least 16 valid bits in bit_buf */
#define NEEDBITS(bit_buf,bits,bit_ptr)
\
#define NEEDBITS(bit_buf,bits,bit_ptr)
\
do {
\
do {
\
if (unlikely (bits > 0)) {
\
if (unlikely (bits > 0)) {
\
GETWORD (bit_buf, bits, bit_ptr);
\
GETWORD (bit_buf, bits, bit_ptr);
\
bits -= 16;
\
bits -= 16;
\
}
\
}
\
} while (0)
} while (0)
/* remove num valid bits from bit_buf */
/* remove num valid bits from bit_buf */
#define DUMPBITS(bit_buf,bits,num)
\
#define DUMPBITS(bit_buf,bits,num)
\
do {
\
do {
\
bit_buf <<= (num);
\
bit_buf <<= (num);
\
bits += (num);
\
bits += (num);
\
} while (0)
} while (0)
/* take num bits from the high part of bit_buf and zero extend them */
/* take num bits from the high part of bit_buf and zero extend them */
...
...
modules/codec/xvmc/xxmc-config.h
View file @
f102b577
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
/* include/config.h.in. Generated from configure.in by autoheader. */
/* include/config.h.in. Generated from configure.in by autoheader. */
/* autodetect accelerations */
/* autodetect accelerations */
#define ACCEL_DETECT
#define ACCEL_DETECT
/* alpha architecture */
/* alpha architecture */
/* #undef ARCH_ALPHA */
/* #undef ARCH_ALPHA */
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
/* #undef ARCH_SPARC */
/* #undef ARCH_SPARC */
/* x86 architecture */
/* x86 architecture */
#define ARCH_X86
#define ARCH_X86
/* maximum supported data alignment */
/* maximum supported data alignment */
#define ATTRIBUTE_ALIGNED_MAX 64
#define ATTRIBUTE_ALIGNED_MAX 64
...
@@ -26,7 +26,7 @@
...
@@ -26,7 +26,7 @@
/* #undef HAVE_ALTIVEC_H */
/* #undef HAVE_ALTIVEC_H */
/* Define if you have the `__builtin_expect' function. */
/* Define if you have the `__builtin_expect' function. */
#define HAVE_BUILTIN_EXPECT
#define HAVE_BUILTIN_EXPECT
/* Define to 1 if you have the <dlfcn.h> header file. */
/* Define to 1 if you have the <dlfcn.h> header file. */
#define HAVE_DLFCN_H 1
#define HAVE_DLFCN_H 1
...
@@ -86,10 +86,10 @@
...
@@ -86,10 +86,10 @@
/* #undef LIBVO_SDL */
/* #undef LIBVO_SDL */
/* libvo X11 support */
/* libvo X11 support */
#define LIBVO_X11
#define LIBVO_X11
/* libvo Xv support */
/* libvo Xv support */
#define LIBVO_XV
#define LIBVO_XV
/* mpeg2dec profiling */
/* mpeg2dec profiling */
/* #undef MPEG2DEC_GPROF */
/* #undef MPEG2DEC_GPROF */
...
...
modules/codec/xvmc/xxmc.c
View file @
f102b577
...
@@ -110,7 +110,7 @@ static int OpenDecoder( vlc_object_t *p_this )
...
@@ -110,7 +110,7 @@ static int OpenDecoder( vlc_object_t *p_this )
decoder_t
*
p_dec
=
(
decoder_t
*
)
p_this
;
decoder_t
*
p_dec
=
(
decoder_t
*
)
p_this
;
decoder_sys_t
*
p_sys
=
NULL
;
decoder_sys_t
*
p_sys
=
NULL
;
uint32_t
i_accel
=
0
;
uint32_t
i_accel
=
0
;
FILE
*
f_wd_dec
;
FILE
*
f_wd_dec
;
msg_Dbg
(
p_dec
,
"OpenDecoder Entering"
);
msg_Dbg
(
p_dec
,
"OpenDecoder Entering"
);
mtrace
();
mtrace
();
...
@@ -695,7 +695,7 @@ static picture_t *GetNewPicture( decoder_t *p_dec, uint8_t **pp_buf )
...
@@ -695,7 +695,7 @@ static picture_t *GetNewPicture( decoder_t *p_dec, uint8_t **pp_buf )
{
{
// fprintf(p_sys->f_wd_nb, "%d\n", mdate());
// fprintf(p_sys->f_wd_nb, "%d\n", mdate());
fprintf(p_sys->f_wd_nb, "%s\n", mdate());
fprintf(p_sys->f_wd_nb, "%s\n", mdate());
fflush(p_sys->f_wd_nb);
fflush(p_sys->f_wd_nb);
}
}
#endif
#endif
p_pic
=
p_dec
->
pf_vout_buffer_new
(
p_dec
);
p_pic
=
p_dec
->
pf_vout_buffer_new
(
p_dec
);
...
...
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