updating header info, adding AVKit support, iOS support
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76933 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1,10 +1,10 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// Name: src/cocoa/mediactrl.cpp
|
// Name: src/osx/cocoa/mediactrl.mm
|
||||||
// Purpose: Built-in Media Backends for Cocoa
|
// Purpose: Built-in Media Backends for Cocoa
|
||||||
// Author: Ryan Norton <wxprojects@comcast.net>
|
// Author: Ryan Norton <wxprojects@comcast.net>, Stefan Csomor
|
||||||
// Modified by:
|
// Modified by:
|
||||||
// Created: 02/03/05
|
// Created: 02/03/05
|
||||||
// Copyright: (c) 2004-2005 Ryan Norton, (c) 2005 David Elliot
|
// Copyright: (c) 2004-2005 Ryan Norton, (c) 2005 David Elliot, (c) Stefan Csomor
|
||||||
// Licence: wxWindows licence
|
// Licence: wxWindows licence
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@@ -36,8 +36,19 @@
|
|||||||
|
|
||||||
#include "wx/osx/private.h"
|
#include "wx/osx/private.h"
|
||||||
|
|
||||||
|
#ifdef wxOSX_USE_IPHONE
|
||||||
|
#define wxOSX_USE_QTKIT 0
|
||||||
|
#define wxOSX_USE_AVFOUNDATION 1
|
||||||
|
#else
|
||||||
#define wxOSX_USE_QTKIT 1
|
#define wxOSX_USE_QTKIT 1
|
||||||
|
#define wxOSX_USE_AVFOUNDATION 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if wxOSX_USE_AVFOUNDATION && wxOSX_USE_COCOA && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_9
|
||||||
|
#define wxOSX_USE_AVKIT 1
|
||||||
|
#else
|
||||||
#define wxOSX_USE_AVKIT 0
|
#define wxOSX_USE_AVKIT 0
|
||||||
|
#endif
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
// BACKEND DECLARATIONS
|
// BACKEND DECLARATIONS
|
||||||
@@ -437,7 +448,7 @@ void wxQTMediaBackend::DoShowPlayerControls(wxMediaCtrlPlayerControls flags)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if wxOSX_USE_AVKIT
|
#if wxOSX_USE_AVFOUNDATION
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
//
|
//
|
||||||
@@ -446,7 +457,10 @@ void wxQTMediaBackend::DoShowPlayerControls(wxMediaCtrlPlayerControls flags)
|
|||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
#import <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
|
|
||||||
|
#if wxOSX_USE_AVKIT
|
||||||
#import <AVKit/AVKit.h>
|
#import <AVKit/AVKit.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
class WXDLLIMPEXP_FWD_MEDIA wxAVMediaBackend;
|
class WXDLLIMPEXP_FWD_MEDIA wxAVMediaBackend;
|
||||||
|
|
||||||
@@ -512,7 +526,6 @@ private:
|
|||||||
|
|
||||||
wxSize m_bestSize; //Original movie size
|
wxSize m_bestSize; //Original movie size
|
||||||
wxAVPlayer* m_player; //AVPlayer handle/instance
|
wxAVPlayer* m_player; //AVPlayer handle/instance
|
||||||
AVPlayerLayer* m_playerlayer; //AVPlayerView instance
|
|
||||||
|
|
||||||
wxMediaCtrlPlayerControls m_interfaceflags; // Saved interface flags
|
wxMediaCtrlPlayerControls m_interfaceflags; // Saved interface flags
|
||||||
|
|
||||||
@@ -625,11 +638,137 @@ private:
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
#if wxOSX_USE_IPHONE
|
||||||
|
|
||||||
|
@interface wxAVView : UIView
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation wxAVView
|
||||||
|
|
||||||
|
+ (void)initialize
|
||||||
|
{
|
||||||
|
static BOOL initialized = NO;
|
||||||
|
if (!initialized)
|
||||||
|
{
|
||||||
|
initialized = YES;
|
||||||
|
wxOSXIPhoneClassAddWXMethods( self );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (Class)layerClass
|
||||||
|
{
|
||||||
|
return [AVPlayerLayer class];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id) initWithFrame:(CGRect)rect player:(wxAVPlayer*) player
|
||||||
|
{
|
||||||
|
if ( !(self=[super initWithFrame:rect]) )
|
||||||
|
return nil;
|
||||||
|
|
||||||
|
AVPlayerLayer* playerLayer = (AVPlayerLayer*) [self layer];
|
||||||
|
[playerLayer setPlayer: player];
|
||||||
|
[player setPlayerLayer:playerLayer];
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (AVPlayerLayer*) playerLayer
|
||||||
|
{
|
||||||
|
return (AVPlayerLayer*) [self layer];
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#if wxOSX_USE_AVKIT
|
||||||
|
|
||||||
|
@interface wxAVPlayerView : AVPlayerView
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation wxAVPlayerView
|
||||||
|
|
||||||
|
+ (void)initialize
|
||||||
|
{
|
||||||
|
static BOOL initialized = NO;
|
||||||
|
if (!initialized)
|
||||||
|
{
|
||||||
|
initialized = YES;
|
||||||
|
wxOSXCocoaClassAddWXMethods( self );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id) initWithFrame:(NSRect)rect player:(wxAVPlayer*) player
|
||||||
|
{
|
||||||
|
if ( !(self=[super initWithFrame:rect]) )
|
||||||
|
return nil;
|
||||||
|
|
||||||
|
self.player = player;
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (AVPlayerLayer*) playerLayer
|
||||||
|
{
|
||||||
|
return (AVPlayerLayer*) [[[self layer] sublayers] firstObject];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif // wxOSX_USE_AVKIT
|
||||||
|
|
||||||
|
@interface wxAVView : NSView
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation wxAVView
|
||||||
|
|
||||||
|
+ (void)initialize
|
||||||
|
{
|
||||||
|
static BOOL initialized = NO;
|
||||||
|
if (!initialized)
|
||||||
|
{
|
||||||
|
initialized = YES;
|
||||||
|
wxOSXCocoaClassAddWXMethods( self );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id) initWithFrame:(NSRect)rect player:(AVPlayer*) player
|
||||||
|
{
|
||||||
|
if ( !(self=[super initWithFrame:rect]) )
|
||||||
|
return nil;
|
||||||
|
|
||||||
|
[self setWantsLayer:YES];
|
||||||
|
AVPlayerLayer* playerlayer = [[AVPlayerLayer playerLayerWithPlayer: player] retain];
|
||||||
|
[player setPlayerLayer:playerlayer];
|
||||||
|
|
||||||
|
[playerlayer setFrame:[[self layer] bounds]];
|
||||||
|
[playerlayer setAutoresizingMask:kCALayerWidthSizable | kCALayerHeightSizable];
|
||||||
|
[[self layer] addSublayer:playerlayer];
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (AVPlayerLayer*) playerLayer
|
||||||
|
{
|
||||||
|
return (AVPlayerLayer*) [[[self layer] sublayers] firstObject];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS(wxAVMediaBackend, wxMediaBackend);
|
IMPLEMENT_DYNAMIC_CLASS(wxAVMediaBackend, wxMediaBackend);
|
||||||
|
|
||||||
wxAVMediaBackend::wxAVMediaBackend() :
|
wxAVMediaBackend::wxAVMediaBackend() :
|
||||||
m_player(nil), m_playerlayer(nil),
|
m_player(nil),
|
||||||
m_interfaceflags(wxMEDIACTRLPLAYERCONTROLS_NONE)
|
m_interfaceflags(wxMEDIACTRLPLAYERCONTROLS_NONE)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -649,6 +788,8 @@ bool wxAVMediaBackend::CreateControl(wxControl* inctrl, wxWindow* parent,
|
|||||||
{
|
{
|
||||||
wxMediaCtrl* mediactrl = (wxMediaCtrl*) inctrl;
|
wxMediaCtrl* mediactrl = (wxMediaCtrl*) inctrl;
|
||||||
|
|
||||||
|
mediactrl->DontCreatePeer();
|
||||||
|
|
||||||
if ( !mediactrl->wxControl::Create(
|
if ( !mediactrl->wxControl::Create(
|
||||||
parent, wid, pos, size,
|
parent, wid, pos, size,
|
||||||
wxWindow::MacRemoveBordersFromStyle(style),
|
wxWindow::MacRemoveBordersFromStyle(style),
|
||||||
@@ -657,18 +798,31 @@ bool wxAVMediaBackend::CreateControl(wxControl* inctrl, wxWindow* parent,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSView* view = mediactrl->GetHandle();
|
|
||||||
[view setWantsLayer:YES];
|
|
||||||
|
|
||||||
m_player = [[wxAVPlayer alloc] init];
|
m_player = [[wxAVPlayer alloc] init];
|
||||||
[m_player setBackend:this];
|
[m_player setBackend:this];
|
||||||
|
|
||||||
m_playerlayer = [[AVPlayerLayer playerLayerWithPlayer: m_player] retain];
|
WXRect r = wxOSXGetFrameForControl( mediactrl, pos , size ) ;
|
||||||
[m_playerlayer setFrame:[[view layer] bounds]];
|
|
||||||
[m_playerlayer setAutoresizingMask:kCALayerWidthSizable | kCALayerHeightSizable];
|
|
||||||
|
|
||||||
[[view layer] addSublayer:m_playerlayer];
|
WXWidget view = NULL;
|
||||||
[m_player setPlayerLayer:m_playerlayer];
|
#if wxOSX_USE_AVKIT
|
||||||
|
if ( NSClassFromString(@"AVPlayerView") )
|
||||||
|
{
|
||||||
|
view = [[wxAVPlayerView alloc] initWithFrame: r player:m_player];
|
||||||
|
[(wxAVPlayerView*) view setControlsStyle:AVPlayerViewControlsStyleNone];
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if ( view == NULL )
|
||||||
|
{
|
||||||
|
view = [[wxAVView alloc] initWithFrame: r player:m_player];
|
||||||
|
}
|
||||||
|
|
||||||
|
#if wxOSX_USE_IPHONE
|
||||||
|
wxWidgetIPhoneImpl* impl = new wxWidgetIPhoneImpl(mediactrl,view);
|
||||||
|
#else
|
||||||
|
wxWidgetCocoaImpl* impl = new wxWidgetCocoaImpl(mediactrl,view);
|
||||||
|
#endif
|
||||||
|
mediactrl->SetPeer(impl);
|
||||||
|
|
||||||
m_ctrl = mediactrl;
|
m_ctrl = mediactrl;
|
||||||
return true;
|
return true;
|
||||||
@@ -818,7 +972,17 @@ bool wxAVMediaBackend::ShowPlayerControls(wxMediaCtrlPlayerControls flags)
|
|||||||
|
|
||||||
void wxAVMediaBackend::DoShowPlayerControls(wxMediaCtrlPlayerControls flags)
|
void wxAVMediaBackend::DoShowPlayerControls(wxMediaCtrlPlayerControls flags)
|
||||||
{
|
{
|
||||||
// TODO NATIVE CONTROLS (AVKit is only available on 10.9)
|
#if wxOSX_USE_AVKIT
|
||||||
|
NSView* view = m_ctrl->GetHandle();
|
||||||
|
if ( [view isKindOfClass:[wxAVPlayerView class]] )
|
||||||
|
{
|
||||||
|
wxAVPlayerView* playerView = (wxAVPlayerView*) view;
|
||||||
|
if (flags == wxMEDIACTRLPLAYERCONTROLS_NONE )
|
||||||
|
playerView.controlsStyle = AVPlayerViewControlsStyleNone;
|
||||||
|
else
|
||||||
|
playerView.controlsStyle = AVPlayerViewControlsStyleDefault;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user