Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
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
Commits
1ed62904
Commit
1ed62904
authored
Dec 10, 2004
by
Eric Petit
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
beos/Video*: try to fallback on single-buffered overlay when there's
not enough VRAM for double-buffered ovelay
parent
f9d403e9
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
54 additions
and
34 deletions
+54
-34
modules/gui/beos/VideoOutput.cpp
modules/gui/beos/VideoOutput.cpp
+52
-33
modules/gui/beos/VideoWindow.h
modules/gui/beos/VideoWindow.h
+2
-1
No files found.
modules/gui/beos/VideoOutput.cpp
View file @
1ed62904
...
...
@@ -717,62 +717,81 @@ VideoWindow::_AllocateBuffers(int width, int height, int* mode)
_FreeBuffers
();
// set default mode
*
mode
=
BITMAP
;
bitmap_count
=
3
;
BRect
bitmapFrame
(
0
,
0
,
width
,
height
);
// read from config, if we are supposed to use overlay at all
int
noOverlay
=
!
config_GetInt
(
p_vout
,
"overlay"
);
// test for overlay capability
for
(
int
i
=
0
;
i
<
COLOR_COUNT
;
i
++
)
/* Test for overlay capability: for every chroma in colspace,
we try to do double-buffered overlay, or we fallback on
single-buffered overlay. In nothing worked, we then have
to work with a non-overlay BBitmap. */
for
(
int
i
=
0
;
i
<
COLOR_COUNT
;
i
++
)
{
if
(
noOverlay
)
break
;
bitmap
[
0
]
=
new
BBitmap
(
bitmapFrame
,
B_BITMAP_WILL_OVERLAY
|
B_BITMAP_RESERVE_OVERLAY_CHANNEL
,
colspace
[
i
].
colspace
);
if
(
bitmap
[
0
]
&&
bitmap
[
0
]
->
InitCheck
()
==
B_OK
)
bitmap
[
0
]
=
new
BBitmap
(
bitmapFrame
,
B_BITMAP_WILL_OVERLAY
|
B_BITMAP_RESERVE_OVERLAY_CHANNEL
,
colspace
[
i
].
colspace
);
if
(
bitmap
[
0
]
&&
bitmap
[
0
]
->
InitCheck
()
==
B_OK
)
{
colspace_index
=
i
;
bitmap
[
1
]
=
new
BBitmap
(
bitmapFrame
,
B_BITMAP_WILL_OVERLAY
,
colspace
[
colspace_index
].
colspace
);
bitmap
[
2
]
=
new
BBitmap
(
bitmapFrame
,
B_BITMAP_WILL_OVERLAY
,
colspace
[
colspace_index
].
colspace
);
if
(
(
bitmap
[
2
]
&&
bitmap
[
2
]
->
InitCheck
()
==
B_OK
)
)
if
(
bitmap
[
1
]
&&
bitmap
[
1
]
->
InitCheck
()
==
B_OK
)
{
*
mode
=
OVERLAY
;
rgb_color
key
;
view
->
SetViewOverlay
(
bitmap
[
0
],
bitmap
[
0
]
->
Bounds
()
,
view
->
Bounds
(),
&
key
,
B_FOLLOW_ALL
,
B_OVERLAY_FILTER_HORIZONTAL
|
B_OVERLAY_FILTER_VERTICAL
);
view
->
SetViewColor
(
key
);
SetTitle
(
"VLC "
PACKAGE_VERSION
" (Overlay)"
);
break
;
*
mode
=
OVERLAY
;
rgb_color
key
;
view
->
SetViewOverlay
(
bitmap
[
0
],
bitmap
[
0
]
->
Bounds
(),
view
->
Bounds
(),
&
key
,
B_FOLLOW_ALL
,
B_OVERLAY_FILTER_HORIZONTAL
|
B_OVERLAY_FILTER_VERTICAL
);
view
->
SetViewColor
(
key
);
SetTitle
(
"VLC "
PACKAGE_VERSION
" (Overlay)"
);
bitmap
[
2
]
=
new
BBitmap
(
bitmapFrame
,
B_BITMAP_WILL_OVERLAY
,
colspace
[
colspace_index
].
colspace
);
if
(
bitmap
[
2
]
&&
bitmap
[
2
]
->
InitCheck
()
==
B_OK
)
{
msg_Dbg
(
p_vout
,
"using double-buffered overlay"
);
}
else
{
msg_Dbg
(
p_vout
,
"using single-buffered overlay"
);
bitmap_count
=
2
;
if
(
bitmap
[
2
]
)
delete
bitmap
[
2
];
}
break
;
}
else
{
_FreeBuffers
()
;
*
mode
=
BITMAP
;
// might want to try again with normal bitmaps
*
mode
=
BITMAP
;
_FreeBuffers
();
}
}
else
{
delete
bitmap
[
0
];
}
}
if
(
*
mode
==
BITMAP
)
{
msg_Warn
(
p_vout
,
"no possible overlay"
);
// fallback to RGB
colspace_index
=
DEFAULT_COL
;
// B_RGB32
SetTitle
(
"VLC "
PACKAGE_VERSION
" (Bitmap)"
);
bitmap
[
0
]
=
new
BBitmap
(
bitmapFrame
,
colspace
[
colspace_index
].
colspace
);
bitmap
[
1
]
=
new
BBitmap
(
bitmapFrame
,
colspace
[
colspace_index
].
colspace
);
bitmap
[
2
]
=
new
BBitmap
(
bitmapFrame
,
colspace
[
colspace_index
].
colspace
);
SetTitle
(
"VLC "
PACKAGE_VERSION
" (Bitmap)"
);
}
// see if everything went well
status_t
status
=
B_ERROR
;
for
(
int32_t
i
=
0
;
i
<
3
;
i
++
)
for
(
int32_t
i
=
0
;
i
<
bitmap_count
;
i
++
)
{
if
(
bitmap
[
i
])
status
=
bitmap
[
i
]
->
InitCheck
();
...
...
@@ -782,7 +801,7 @@ VideoWindow::_AllocateBuffers(int width, int height, int* mode)
if
(
status
>=
B_OK
)
{
// clear bitmaps to black
for
(
int32_t
i
=
0
;
i
<
3
;
i
++
)
for
(
int32_t
i
=
0
;
i
<
bitmap_count
;
i
++
)
_BlankBitmap
(
bitmap
[
i
]);
}
return
status
;
...
...
@@ -794,12 +813,9 @@ VideoWindow::_AllocateBuffers(int width, int height, int* mode)
void
VideoWindow
::
_FreeBuffers
()
{
delete
bitmap
[
0
];
bitmap
[
0
]
=
NULL
;
delete
bitmap
[
1
];
bitmap
[
1
]
=
NULL
;
delete
bitmap
[
2
];
bitmap
[
2
]
=
NULL
;
if
(
bitmap
[
0
]
)
{
delete
bitmap
[
0
];
bitmap
[
0
]
=
NULL
;
}
if
(
bitmap
[
1
]
)
{
delete
bitmap
[
1
];
bitmap
[
1
]
=
NULL
;
}
if
(
bitmap
[
2
]
)
{
delete
bitmap
[
2
];
bitmap
[
2
]
=
NULL
;
}
fInitStatus
=
B_ERROR
;
}
...
...
@@ -1448,7 +1464,9 @@ int Init( vout_thread_t *p_vout )
p_vout
->
output
.
i_gmask
=
0x0000ff00
;
p_vout
->
output
.
i_bmask
=
0x000000ff
;
for
(
int
buffer_index
=
0
;
buffer_index
<
3
;
buffer_index
++
)
for
(
int
buffer_index
=
0
;
buffer_index
<
p_vout
->
p_sys
->
p_window
->
bitmap_count
;
buffer_index
++
)
{
p_pic
=
NULL
;
/* Find an empty picture slot */
...
...
@@ -1536,7 +1554,8 @@ void Display( vout_thread_t *p_vout, picture_t *p_pic )
p_win
->
drawBuffer
(
p_vout
->
p_sys
->
i_index
);
}
/* change buffer */
p_vout
->
p_sys
->
i_index
=
++
p_vout
->
p_sys
->
i_index
%
3
;
p_vout
->
p_sys
->
i_index
=
++
p_vout
->
p_sys
->
i_index
%
p_vout
->
p_sys
->
p_window
->
bitmap_count
;
p_pic
->
p
->
p_pixels
=
(
uint8_t
*
)
p_vout
->
p_sys
->
p_window
->
bitmap
[
p_vout
->
p_sys
->
i_index
]
->
Bits
();
}
...
...
modules/gui/beos/VideoWindow.h
View file @
1ed62904
...
...
@@ -2,7 +2,7 @@
* VideoWindow.h: BeOS video window class prototype
*****************************************************************************
* Copyright (C) 1999, 2000, 2001 VideoLAN
* $Id
: VideoWindow.h,v 1.11 2003/12/28 01:49:12 titer Exp
$
* $Id$
*
* Authors: Jean-Marc Dressler <polux@via.ecp.fr>
* Tony Castley <tcastley@mail.powerup.com.au>
...
...
@@ -178,6 +178,7 @@ public:
volatile
bool
teardownwindow
;
thread_id
fDrawThreadID
;
int
mode
;
int
bitmap_count
;
int
colspace_index
;
private:
...
...
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