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
4991bd57
Commit
4991bd57
authored
Aug 26, 2000
by
Henri Fallon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Put a test outside a loop : fixes task 0x31
parent
d7a54c80
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
155 additions
and
70 deletions
+155
-70
src/video_output/video_spu.c
src/video_output/video_spu.c
+155
-70
No files found.
src/video_output/video_spu.c
View file @
4991bd57
...
...
@@ -4,7 +4,9 @@
* Copyright (C) 1999, 2000 VideoLAN
*
* Authors:
*
* Samuel "Sam" Hocevar <sam@via.ecp.fr>
* Henri Fallon <henri@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
...
...
@@ -124,91 +126,174 @@ void vout_RenderSPU( vout_buffer_t *p_buffer, subpicture_t *p_subpic,
+
(
p_buffer
->
i_pic_y
+
((
p_subpic
->
i_y
*
i_y_scale
)
>>
6
))
*
i_bytes_per_line
;
while
(
p_from
[
0
]
<
(
byte_t
*
)
p_subpic
->
p_data
+
p_subpic
->
type
.
spu
.
i_offset
[
1
]
)
/* Do we need scaling ?
* This is mostly dupliucate code except a few lines.
* This test was put out of the loop to avoid testing it
* each time.
*/
if
(
i_y_scale
>=
(
1
<<
6
)
)
{
GET_NIBBLE
(
i_code
);
if
(
i_code
>=
0x04
)
while
(
p_from
[
0
]
<
(
byte_t
*
)
p_subpic
->
p_data
+
p_subpic
->
type
.
spu
.
i_offset
[
1
]
)
{
found_code:
if
(
((
i_code
>>
2
)
+
vspu
.
i_x
+
vspu
.
i_y
*
vspu
.
i_width
)
>
vspu
.
i_height
*
vspu
.
i_width
)
GET_NIBBLE
(
i_code
);
if
(
i_code
>=
0x04
)
{
intf_DbgMsg
(
"video_spu: invalid draw request ! %d %d
\n
"
,
i_code
>>
2
,
vspu
.
i_height
*
vspu
.
i_width
-
(
(
i_code
>>
2
)
+
vspu
.
i_x
+
vspu
.
i_y
*
vspu
.
i_width
)
);
return
;
found_code_with_scale:
if
(
((
i_code
>>
2
)
+
vspu
.
i_x
+
vspu
.
i_y
*
vspu
.
i_width
)
>
vspu
.
i_height
*
vspu
.
i_width
)
{
intf_DbgMsg
(
"video_spu: invalid draw request ! %d %d
\n
"
,
i_code
>>
2
,
vspu
.
i_height
*
vspu
.
i_width
-
(
(
i_code
>>
2
)
+
vspu
.
i_x
+
vspu
.
i_y
*
vspu
.
i_width
)
);
return
;
}
else
{
if
(
(
i_color
=
i_code
&
0x3
)
)
{
u8
*
p_target
=
&
vspu
.
p_data
[
i_bytes_per_pixel
*
((
vspu
.
i_x
*
i_x_scale
)
>>
6
)
+
i_bytes_per_line
*
((
vspu
.
i_y
*
i_y_scale
)
>>
6
)
];
memset
(
p_target
,
p_palette
[
i_color
],
((((
i_code
-
1
)
*
i_x_scale
)
>>
8
)
+
1
)
*
i_bytes_per_pixel
);
/* here we need some horizontal scaling (unlikely )
* we only scale up to 2x, someone watching a DVD
* with more than 2x zoom must be braindead */
p_target
+=
i_bytes_per_line
;
memset
(
p_target
,
p_palette
[
i_color
],
((((
i_code
-
1
)
*
i_x_scale
)
>>
8
)
+
1
)
*
i_bytes_per_pixel
);
}
vspu
.
i_x
+=
i_code
>>
2
;
}
if
(
vspu
.
i_x
>=
vspu
.
i_width
)
{
/* byte-align the stream */
b_aligned
=
1
;
/* finish the line */
NewLine
(
&
vspu
,
&
i_id
);
}
continue
;
}
ADD_NIBBLE
(
i_code
,
(
i_code
<<
4
)
);
if
(
i_code
>=
0x10
)
/* 00 11 xx cc */
goto
found_code_with_scale
;
/* 00 01 xx cc */
ADD_NIBBLE
(
i_code
,
(
i_code
<<
4
)
);
if
(
i_code
>=
0x040
)
/* 00 00 11 xx xx cc */
goto
found_code_with_scale
;
/* 00 00 01 xx xx cc */
ADD_NIBBLE
(
i_code
,
(
i_code
<<
4
)
);
if
(
i_code
>=
0x0100
)
/* 00 00 00 11 xx xx xx cc */
goto
found_code_with_scale
;
/* 00 00 00 01 xx xx xx cc */
/* if the 14 first bits are 0, then it's a newline */
if
(
i_code
<=
0x0003
)
{
if
(
NewLine
(
&
vspu
,
&
i_id
)
<
0
)
return
;
if
(
!
b_aligned
)
b_aligned
=
1
;
}
else
{
if
(
(
i_color
=
i_code
&
0x3
)
)
/* we have a boo boo ! */
intf_DbgMsg
(
"video_spu: unknown code 0x%x "
"(dest %x side %x, x=%d, y=%d)
\n
"
,
i_code
,
p_from
[
i_id
],
i_id
,
vspu
.
i_x
,
vspu
.
i_y
);
if
(
NewLine
(
&
vspu
,
&
i_id
)
<
0
)
return
;
continue
;
}
}
}
else
{
while
(
p_from
[
0
]
<
(
byte_t
*
)
p_subpic
->
p_data
+
p_subpic
->
type
.
spu
.
i_offset
[
1
]
)
{
GET_NIBBLE
(
i_code
);
if
(
i_code
>=
0x04
)
{
found_code:
if
(
((
i_code
>>
2
)
+
vspu
.
i_x
+
vspu
.
i_y
*
vspu
.
i_width
)
>
vspu
.
i_height
*
vspu
.
i_width
)
{
u8
*
p_target
=
&
vspu
.
p_data
[
i_bytes_per_pixel
*
((
vspu
.
i_x
*
i_x_scale
)
>>
6
)
+
i_bytes_per_line
*
((
vspu
.
i_y
*
i_y_scale
)
>>
6
)
];
memset
(
p_target
,
p_palette
[
i_color
],
((((
i_code
-
1
)
*
i_x_scale
)
>>
8
)
+
1
)
*
i_bytes_per_pixel
);
/* if we need some horizontal scaling (unlikely )
* we only scale up to 2x, someone watching a DVD
* with more than 2x zoom must be braindead */
if
(
i_y_scale
>=
(
1
<<
6
)
)
intf_DbgMsg
(
"video_spu: invalid draw request ! %d %d
\n
"
,
i_code
>>
2
,
vspu
.
i_height
*
vspu
.
i_width
-
(
(
i_code
>>
2
)
+
vspu
.
i_x
+
vspu
.
i_y
*
vspu
.
i_width
)
);
return
;
}
else
{
if
(
(
i_color
=
i_code
&
0x3
)
)
{
p_target
+=
i_bytes_per_line
;
u8
*
p_target
=
&
vspu
.
p_data
[
i_bytes_per_pixel
*
((
vspu
.
i_x
*
i_x_scale
)
>>
6
)
+
i_bytes_per_line
*
((
vspu
.
i_y
*
i_y_scale
)
>>
6
)
];
memset
(
p_target
,
p_palette
[
i_color
],
((((
i_code
-
1
)
*
i_x_scale
)
>>
8
)
+
1
)
*
i_bytes_per_pixel
);
}
vspu
.
i_x
+=
i_code
>>
2
;
}
vspu
.
i_x
+=
i_code
>>
2
;
if
(
vspu
.
i_x
>=
vspu
.
i_width
)
{
/* byte-align the stream */
b_aligned
=
1
;
/* finish the line */
NewLine
(
&
vspu
,
&
i_id
);
}
continue
;
}
if
(
vspu
.
i_x
>=
vspu
.
i_width
)
ADD_NIBBLE
(
i_code
,
(
i_code
<<
4
)
);
if
(
i_code
>=
0x10
)
/* 00 11 xx cc */
goto
found_code
;
/* 00 01 xx cc */
ADD_NIBBLE
(
i_code
,
(
i_code
<<
4
)
);
if
(
i_code
>=
0x040
)
/* 00 00 11 xx xx cc */
goto
found_code
;
/* 00 00 01 xx xx cc */
ADD_NIBBLE
(
i_code
,
(
i_code
<<
4
)
);
if
(
i_code
>=
0x0100
)
/* 00 00 00 11 xx xx xx cc */
goto
found_code
;
/* 00 00 00 01 xx xx xx cc */
/* if the 14 first bits are 0, then it's a newline */
if
(
i_code
<=
0x0003
)
{
/* byte-align the stream */
b_aligned
=
1
;
/* finish the line */
NewLine
(
&
vspu
,
&
i_id
);
if
(
NewLine
(
&
vspu
,
&
i_id
)
<
0
)
return
;
if
(
!
b_aligned
)
b_aligned
=
1
;
}
else
{
/* we have a boo boo ! */
intf_DbgMsg
(
"video_spu: unknown code 0x%x "
"(dest %x side %x, x=%d, y=%d)
\n
"
,
i_code
,
p_from
[
i_id
],
i_id
,
vspu
.
i_x
,
vspu
.
i_y
);
if
(
NewLine
(
&
vspu
,
&
i_id
)
<
0
)
return
;
continue
;
}
continue
;
}
ADD_NIBBLE
(
i_code
,
(
i_code
<<
4
)
);
if
(
i_code
>=
0x10
)
/* 00 11 xx cc */
goto
found_code
;
/* 00 01 xx cc */
ADD_NIBBLE
(
i_code
,
(
i_code
<<
4
)
);
if
(
i_code
>=
0x040
)
/* 00 00 11 xx xx cc */
goto
found_code
;
/* 00 00 01 xx xx cc */
ADD_NIBBLE
(
i_code
,
(
i_code
<<
4
)
);
if
(
i_code
>=
0x0100
)
/* 00 00 00 11 xx xx xx cc */
goto
found_code
;
/* 00 00 00 01 xx xx xx cc */
/* if the 14 first bits are 0, then it's a newline */
if
(
i_code
<=
0x0003
)
{
if
(
NewLine
(
&
vspu
,
&
i_id
)
<
0
)
return
;
if
(
!
b_aligned
)
b_aligned
=
1
;
}
else
{
/* we have a boo boo ! */
intf_DbgMsg
(
"video_spu: unknown code 0x%x "
"(dest %x side %x, x=%d, y=%d)
\n
"
,
i_code
,
p_from
[
i_id
],
i_id
,
vspu
.
i_x
,
vspu
.
i_y
);
if
(
NewLine
(
&
vspu
,
&
i_id
)
<
0
)
return
;
continue
;
}
}
}
...
...
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