blob: 961a6858847c3f305d19eef7ddc5485d7d307825 [file] [log] [blame]
/*
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "engine_configurations.h"
#if defined(CARBON_RENDERING)
#include "video_render_mac_carbon_impl.h"
#include "critical_section_wrapper.h"
#include "video_render_agl.h"
#include "trace.h"
#include <AGL/agl.h>
namespace webrtc {
VideoRenderMacCarbonImpl::VideoRenderMacCarbonImpl(const WebRtc_Word32 id,
const VideoRenderType videoRenderType,
void* window,
const bool fullscreen) :
_id(id),
_renderMacCarbonCritsect(*CriticalSectionWrapper::CreateCriticalSection()),
_fullScreen(fullscreen),
_ptrWindow(window)
{
WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "Constructor %s:%d", __FUNCTION__, __LINE__);
}
VideoRenderMacCarbonImpl::~VideoRenderMacCarbonImpl()
{
WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "Destructor %s:%d", __FUNCTION__, __LINE__);
delete &_renderMacCarbonCritsect;
}
WebRtc_Word32
VideoRenderMacCarbonImpl::Init()
{
CriticalSectionScoped cs(_renderMacCarbonCritsect);
WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s:%d", __FUNCTION__, __LINE__);
if (!_ptrWindow)
{
WEBRTC_TRACE(kTraceWarning, kTraceVideoRenderer, _id, "Constructor %s:%d", __FUNCTION__, __LINE__);
return -1;
}
// We don't know if the user passed us a WindowRef or a HIViewRef, so test.
bool referenceIsValid = false;
// Check if it's a valid WindowRef
//WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "%s:%d _ptrWindowRef before WindowRef cast: %x", __FUNCTION__, __LINE__, _ptrWindowRef);
WindowRef* windowRef = static_cast<WindowRef*>(_ptrWindow);
//WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "%s:%d _ptrWindowRef after cast: %x", __FUNCTION__, __LINE__, _ptrWindowRef);
if (IsValidWindowPtr(*windowRef))
{
_ptrCarbonRender = new VideoRenderAGL(*windowRef, _fullScreen, _id);
referenceIsValid = true;
WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s:%d Successfully initialized CarbonRenderer with WindowRef:%x", __FUNCTION__, __LINE__, *windowRef);
}
else
{
HIViewRef* hiviewRef = static_cast<HIViewRef*>(_ptrWindow);
if (HIViewIsValid(*hiviewRef))
{
_ptrCarbonRender = new VideoRenderAGL(*hiviewRef, _fullScreen, _id);
referenceIsValid = true;
WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s:%d Successfully initialized CarbonRenderer with HIViewRef:%x", __FUNCTION__, __LINE__, hiviewRef);
}
}
if(!referenceIsValid)
{
WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, "%s:%d Invalid WindowRef/HIViewRef Returning -1", __FUNCTION__, __LINE__);
return -1;
}
if(!_ptrCarbonRender)
{
WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, "%s:%d Failed to create an instance of VideoRenderAGL. Returning -1", __FUNCTION__, __LINE__);
}
int retVal = _ptrCarbonRender->Init();
if (retVal == -1)
{
WEBRTC_TRACE(kTraceError, kTraceVideoRenderer, _id, "%s:%d Failed to init CarbonRenderer", __FUNCTION__, __LINE__);
return -1;
}
return 0;
}
WebRtc_Word32
VideoRenderMacCarbonImpl::ChangeUniqueId(const WebRtc_Word32 id)
{
return -1;
CriticalSectionScoped cs(_renderMacCarbonCritsect);
WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s", __FUNCTION__);
_id = id;
if(_ptrCarbonRender)
{
_ptrCarbonRender->ChangeUniqueID(_id);
}
return 0;
}
WebRtc_Word32
VideoRenderMacCarbonImpl::ChangeWindow(void* window)
{
return -1;
CriticalSectionScoped cs(_renderMacCarbonCritsect);
WEBRTC_TRACE(kTraceInfo, kTraceVideoRenderer, _id, "%s changing ID to ", __FUNCTION__, window);
if (window == NULL)
{
return -1;
}
_ptrWindow = window;
WEBRTC_TRACE(kTraceModuleCall, kTraceVideoRenderer, _id, "%s:%d", __FUNCTION__, __LINE__);
_ptrWindow = window;
return 0;
}
VideoRenderCallback*
VideoRenderMacCarbonImpl::AddIncomingRenderStream(const WebRtc_UWord32 streamId,
const WebRtc_UWord32 zOrder,
const float left,
const float top,
const float right,
const float bottom)
{
CriticalSectionScoped cs(_renderMacCarbonCritsect);
WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "%s", __FUNCTION__);
VideoChannelAGL* AGLChannel = NULL;
if(!_ptrWindow)
{
WEBRTC_TRACE(kTraceModuleCall, kTraceVideoRenderer, _id, "%s, no window", __FUNCTION__);
}
if(!AGLChannel)
{
AGLChannel = _ptrCocoaRender->CreateNSGLChannel(streamId, zOrder, left, top, right, bottom);
}
return AGLChannel;
}
WebRtc_Word32
VideoRenderMacCarbonImpl::DeleteIncomingRenderStream(const WebRtc_UWord32 streamId)
{
WEBRTC_TRACE(kTraceDebug, kTraceVideoRenderer, _id, "%s:%d", __FUNCTION__, __LINE__);
CriticalSectionScoped cs(_renderMacCarbonCritsect);
_ptrCarbonRender->DeleteAGLChannel(streamId);
return 0;
}
WebRtc_Word32
VideoRenderMacCarbonImpl::GetIncomingRenderStreamProperties(const WebRtc_UWord32 streamId,
WebRtc_UWord32& zOrder,
float& left,
float& top,
float& right,
float& bottom) const
{
return -1;
return _ptrCarbonRender->GetChannelProperties(streamId, zOrder, left, top, right, bottom);
}
WebRtc_Word32
VideoRenderMacCarbonImpl::StartRender()
{
return _ptrCarbonRender->StartRender();
}
WebRtc_Word32
VideoRenderMacCarbonImpl::StopRender()
{
return _ptrCarbonRender->StopRender();
}
VideoRenderType
VideoRenderMacCarbonImpl::RenderType()
{
return kRenderCarbon;
}
RawVideoType
VideoRenderMacCarbonImpl::PerferedVideoType()
{
return kVideoI420;
}
bool
VideoRenderMacCarbonImpl::FullScreen()
{
return false;
}
WebRtc_Word32
VideoRenderMacCarbonImpl::GetGraphicsMemory(WebRtc_UWord64& totalGraphicsMemory,
WebRtc_UWord64& availableGraphicsMemory) const
{
totalGraphicsMemory = 0;
availableGraphicsMemory = 0;
return 0;
}
WebRtc_Word32
VideoRenderMacCarbonImpl::GetScreenResolution(WebRtc_UWord32& screenWidth,
WebRtc_UWord32& screenHeight) const
{
CriticalSectionScoped cs(_renderMacCarbonCritsect);
//NSScreen* mainScreen = [NSScreen mainScreen];
//NSRect frame = [mainScreen frame];
//screenWidth = frame.size.width;
//screenHeight = frame.size.height;
return 0;
}
WebRtc_UWord32
VideoRenderMacCarbonImpl::RenderFrameRate(const WebRtc_UWord32 streamId)
{
CriticalSectionScoped cs(_renderMacCarbonCritsect);
return 0;
}
WebRtc_Word32
VideoRenderMacCarbonImpl::SetStreamCropping(const WebRtc_UWord32 streamId,
const float left,
const float top,
const float right,
const float bottom)
{
return 0;
}
WebRtc_Word32 VideoRenderMacCarbonImpl::ConfigureRenderer(const WebRtc_UWord32 streamId,
const unsigned int zOrder,
const float left,
const float top,
const float right,
const float bottom)
{
return 0;
}
WebRtc_Word32
VideoRenderMacCarbonImpl::SetTransparentBackground(const bool enable)
{
return 0;
}
WebRtc_Word32 VideoRenderMacCarbonImpl::SetText(const WebRtc_UWord8 textId,
const WebRtc_UWord8* text,
const WebRtc_Word32 textLength,
const WebRtc_UWord32 textColorRef,
const WebRtc_UWord32 backgroundColorRef,
const float left,
const float top,
const float right,
const float bottom)
{
return 0;
}
WebRtc_Word32 VideoRenderMacCarbonImpl::SetBitmap(const void* bitMap,
const WebRtc_UWord8 pictureId,
const void* colorKey,
const float left,
const float top,
const float right,
const float bottom)
{
return 0;
}
} //namespace webrtc
#endif // CARBON_RENDERING