// Copyright (c) 2010 The WebM 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 <cassert> | |
#include <new> | |
#include <windows.h> | |
#include <windowsx.h> | |
#include <mfplay.h> | |
#include <mferror.h> | |
#include "debugutil.hpp" | |
#include "mfplayerutil.hpp" | |
namespace WebmMfUtil | |
{ | |
HRESULT MfPlayerCallback::CreateInstance(MfPlayerCallbackFunc callback_func, | |
UINT_PTR user_data, | |
MfPlayerCallback** ptr_instance) | |
{ | |
if (!callback_func) | |
return E_INVALIDARG; | |
*ptr_instance = new MfPlayerCallback(callback_func, user_data); | |
assert(*ptr_instance); | |
if (!*ptr_instance) | |
return E_OUTOFMEMORY; | |
return S_OK; | |
} | |
MfPlayerCallback::MfPlayerCallback(MfPlayerCallbackFunc callback_func, | |
UINT_PTR callback_data): | |
callback_data_(callback_data), | |
callback_func_(callback_func) | |
{ | |
AddRef(); | |
} | |
MfPlayerCallback::~MfPlayerCallback() | |
{ | |
callback_func_ = NULL; | |
callback_data_ = 0; | |
} | |
UINT MfPlayerCallback::AddRef() | |
{ | |
return InterlockedIncrement(&ref_count_); | |
} | |
UINT MfPlayerCallback::Release() | |
{ | |
UINT ref_count = InterlockedDecrement(&ref_count_); | |
if (ref_count == 0) | |
delete this; | |
return ref_count; | |
} | |
void MfPlayerCallback::OnPlayerStateChange(int new_state) | |
{ | |
if (callback_func_) | |
callback_func_(callback_data_, new_state); | |
} | |
} // WebmMfUtil namespace |