Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
gst-plugins-good
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Labels
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
George Kiagiadakis
gst-plugins-good
Commits
d57ef52c
Commit
d57ef52c
authored
Jul 09, 2013
by
Andoni Morales Alastruey
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
osxvideosink: defer the window handle setup to the main thread
parent
34a5b936
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
37 additions
and
32 deletions
+37
-32
sys/osxvideo/osxvideosink.h
sys/osxvideo/osxvideosink.h
+1
-0
sys/osxvideo/osxvideosink.m
sys/osxvideo/osxvideosink.m
+36
-32
No files found.
sys/osxvideo/osxvideosink.h
View file @
d57ef52c
...
...
@@ -145,6 +145,7 @@ GType gst_osx_video_sink_get_type(void);
-
(
void
)
resize
;
-
(
void
)
destroy
;
-
(
void
)
showFrame
:
(
GstBufferObject
*
)
buf
;
-
(
void
)
setView
:
(
NSView
*
)
view
;
#ifdef RUN_NS_APP_THREAD
+
(
BOOL
)
isMainThread
;
-
(
void
)
nsAppThread
;
...
...
sys/osxvideo/osxvideosink.m
View file @
d57ef52c
...
...
@@ -680,39 +680,11 @@ static void
gst_osx_video_sink_set_window_handle
(
GstVideoOverlay
*
overlay
,
guintptr
handle_id
)
{
GstOSXVideoSink
*
osxvideosink
=
GST_OSX_VIDEO_SINK
(
overlay
);
gulong
window_id
=
(
gulong
)
handle_id
;
NSAutoreleasePool
*
pool
=
[[
NSAutoreleasePool
alloc
]
init
];
if
(
osxvideosink
->
superview
)
{
GST_INFO_OBJECT
(
osxvideosink
,
"old xwindow id %p"
,
osxvideosink
->
superview
);
if
(
osxvideosink
->
osxwindow
)
{
gst_osx_video_sink_call_from_main_thread
(
osxvideosink
,
osxvideosink
->
osxwindow
->
gstview
,
@selector
(
removeFromSuperview
:
),
(
id
)
nil
,
YES
);
}
[
osxvideosink
->
superview
release
];
}
if
(
osxvideosink
->
osxwindow
!=
NULL
&&
window_id
!=
0
)
{
if
(
osxvideosink
->
osxwindow
->
internal
)
{
GST_INFO_OBJECT
(
osxvideosink
,
"closing internal window"
);
osxvideosink
->
osxwindow
->
closed
=
TRUE
;
[
osxvideosink
->
osxwindow
->
win
close
];
[
osxvideosink
->
osxwindow
->
win
release
];
}
}
GST_INFO_OBJECT
(
osxvideosink
,
"set xwindow id 0x%lx"
,
window_id
);
osxvideosink
->
superview
=
[((
NSView
*
)
window_id
)
retain
];
if
(
osxvideosink
->
osxwindow
)
{
gst_osx_video_sink_call_from_main_thread
(
osxvideosink
,
osxvideosink
->
osxwindow
->
gstview
,
@selector
(
addToSuperview
:
),
osxvideosink
->
superview
,
YES
);
if
(
window_id
)
{
osxvideosink
->
osxwindow
->
internal
=
FALSE
;
}
}
NSView
*
view
=
(
NSView
*
)
handle_id
;
[
pool
release
];
gst_osx_video_sink_call_from_main_thread
(
osxvideosink
,
osxvideosink
->
osxvideosinkobject
,
@selector
(
setView
:
),
view
,
YES
);
}
static
void
...
...
@@ -863,6 +835,38 @@ gst_osx_video_sink_get_type (void)
}
#endif
-
(
void
)
setView
:
(
NSView
*
)
view
{
NSAutoreleasePool
*
pool
=
[[
NSAutoreleasePool
alloc
]
init
];
if
(
osxvideosink
->
superview
)
{
GST_INFO_OBJECT
(
osxvideosink
,
"old xwindow id %p"
,
osxvideosink
->
superview
);
if
(
osxvideosink
->
osxwindow
)
{
[
osxvideosink
->
osxwindow
->
gstview
removeFromSuperview
];
}
[
osxvideosink
->
superview
release
];
}
if
(
osxvideosink
->
osxwindow
!=
NULL
&&
view
!=
NULL
)
{
if
(
osxvideosink
->
osxwindow
->
internal
)
{
GST_INFO_OBJECT
(
osxvideosink
,
"closing internal window"
);
osxvideosink
->
osxwindow
->
closed
=
TRUE
;
[
osxvideosink
->
osxwindow
->
win
close
];
[
osxvideosink
->
osxwindow
->
win
release
];
}
}
GST_INFO_OBJECT
(
osxvideosink
,
"set xwindow id %p"
,
view
);
osxvideosink
->
superview
=
[
view
retain
];
if
(
osxvideosink
->
osxwindow
)
{
[
osxvideosink
->
osxwindow
->
gstview
addToSuperview
:
osxvideosink
->
superview
];
if
(
view
)
{
osxvideosink
->
osxwindow
->
internal
=
FALSE
;
}
}
[
pool
release
];
}
-
(
void
)
resize
{
GstOSXWindow
*
osxwindow
=
osxvideosink
->
osxwindow
;
...
...
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