308 lines
5.0 KiB
C++
308 lines
5.0 KiB
C++
/*
|
|
* Copyright 2015, Dario Casalinuovo. All rights reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
|
|
#include <SimpleMediaClient.h>
|
|
|
|
#include <MediaDebug.h>
|
|
|
|
|
|
BSimpleMediaClient::BSimpleMediaClient(const char* name,
|
|
media_type type, media_client_kinds kinds)
|
|
:
|
|
BMediaClient(name, type, kinds),
|
|
fNotifyHook(NULL),
|
|
fNotifyCookie(NULL)
|
|
{
|
|
CALLED();
|
|
}
|
|
|
|
|
|
BSimpleMediaClient::~BSimpleMediaClient()
|
|
{
|
|
CALLED();
|
|
}
|
|
|
|
|
|
BSimpleMediaInput*
|
|
BSimpleMediaClient::BeginInput()
|
|
{
|
|
CALLED();
|
|
|
|
BSimpleMediaInput* input = new BSimpleMediaInput();
|
|
RegisterInput(input);
|
|
return input;
|
|
}
|
|
|
|
|
|
BSimpleMediaOutput*
|
|
BSimpleMediaClient::BeginOutput()
|
|
{
|
|
CALLED();
|
|
|
|
BSimpleMediaOutput* output = new BSimpleMediaOutput();
|
|
RegisterOutput(output);
|
|
return output;
|
|
}
|
|
|
|
|
|
void
|
|
BSimpleMediaClient::SetHook(notify_hook notifyHook, void* cookie)
|
|
{
|
|
CALLED();
|
|
|
|
fNotifyHook = notifyHook;
|
|
fNotifyCookie = cookie;
|
|
}
|
|
|
|
|
|
void
|
|
BSimpleMediaClient::HandleStart(bigtime_t performanceTime)
|
|
{
|
|
if (fNotifyHook != NULL) {
|
|
(*fNotifyHook)(BSimpleMediaClient::fNotifyCookie,
|
|
BSimpleMediaClient::B_WILL_START,
|
|
performanceTime);
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
BSimpleMediaClient::HandleStop(bigtime_t performanceTime)
|
|
{
|
|
if (fNotifyHook != NULL) {
|
|
(*fNotifyHook)(BSimpleMediaClient::fNotifyCookie,
|
|
BSimpleMediaClient::B_WILL_STOP,
|
|
performanceTime);
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
BSimpleMediaClient::HandleSeek(bigtime_t mediaTime, bigtime_t performanceTime)
|
|
{
|
|
if (fNotifyHook != NULL) {
|
|
(*fNotifyHook)(BSimpleMediaClient::fNotifyCookie,
|
|
BSimpleMediaClient::B_WILL_SEEK,
|
|
performanceTime, mediaTime);
|
|
}
|
|
}
|
|
|
|
|
|
status_t
|
|
BSimpleMediaClient::FormatSuggestion(media_type type, int32 quality,
|
|
media_format* format)
|
|
{
|
|
if (fNotifyHook != NULL) {
|
|
status_t result = B_ERROR;
|
|
(*fNotifyHook)(BSimpleMediaClient::fNotifyCookie,
|
|
BSimpleMediaClient::B_FORMAT_SUGGESTION,
|
|
type, quality, format, &result);
|
|
return result;
|
|
}
|
|
return B_ERROR;
|
|
}
|
|
|
|
|
|
void BSimpleMediaClient::_ReservedSimpleMediaClient0() {}
|
|
void BSimpleMediaClient::_ReservedSimpleMediaClient1() {}
|
|
void BSimpleMediaClient::_ReservedSimpleMediaClient2() {}
|
|
void BSimpleMediaClient::_ReservedSimpleMediaClient3() {}
|
|
void BSimpleMediaClient::_ReservedSimpleMediaClient4() {}
|
|
void BSimpleMediaClient::_ReservedSimpleMediaClient5() {}
|
|
|
|
|
|
BSimpleMediaConnection::BSimpleMediaConnection(media_connection_kinds kinds)
|
|
:
|
|
BMediaConnection(kinds),
|
|
fProcessHook(NULL),
|
|
fNotifyHook(NULL),
|
|
fBufferCookie(NULL)
|
|
{
|
|
}
|
|
|
|
|
|
BSimpleMediaConnection::~BSimpleMediaConnection()
|
|
{
|
|
CALLED();
|
|
}
|
|
|
|
|
|
void
|
|
BSimpleMediaConnection::SetHooks(process_hook processHook,
|
|
notify_hook notifyHook, void* cookie)
|
|
{
|
|
CALLED();
|
|
|
|
fProcessHook = processHook;
|
|
fNotifyHook = notifyHook;
|
|
fBufferCookie = cookie;
|
|
}
|
|
|
|
|
|
void*
|
|
BSimpleMediaConnection::Cookie() const
|
|
{
|
|
CALLED();
|
|
|
|
return fBufferCookie;
|
|
}
|
|
|
|
|
|
size_t
|
|
BSimpleMediaConnection::BufferSize() const
|
|
{
|
|
return fBufferSize;
|
|
}
|
|
|
|
|
|
void
|
|
BSimpleMediaConnection::SetBufferSize(size_t bufferSize)
|
|
{
|
|
fBufferSize = bufferSize;
|
|
}
|
|
|
|
|
|
void
|
|
BSimpleMediaConnection::SetAcceptedFormat(const media_format& format)
|
|
{
|
|
CALLED();
|
|
|
|
fAcceptedFormat = format;
|
|
}
|
|
|
|
|
|
const media_format&
|
|
BSimpleMediaConnection::AcceptedFormat() const
|
|
{
|
|
CALLED();
|
|
|
|
return fAcceptedFormat;
|
|
}
|
|
|
|
|
|
BSimpleMediaInput::BSimpleMediaInput()
|
|
:
|
|
BMediaConnection(B_MEDIA_INPUT),
|
|
BSimpleMediaConnection(B_MEDIA_INPUT),
|
|
BMediaInput()
|
|
{
|
|
}
|
|
|
|
|
|
BSimpleMediaInput::~BSimpleMediaInput()
|
|
{
|
|
CALLED();
|
|
}
|
|
|
|
|
|
status_t
|
|
BSimpleMediaInput::AcceptFormat(media_format* format)
|
|
{
|
|
CALLED();
|
|
|
|
// TODO: Add hooks
|
|
|
|
if (format_is_compatible(*format, AcceptedFormat()))
|
|
return B_OK;
|
|
|
|
*format = AcceptedFormat();
|
|
|
|
return B_MEDIA_BAD_FORMAT;
|
|
}
|
|
|
|
|
|
void
|
|
BSimpleMediaInput::Connected(const media_format& format)
|
|
{
|
|
if (fNotifyHook != NULL)
|
|
(*fNotifyHook)(this, BSimpleMediaConnection::B_INPUT_CONNECTED);
|
|
|
|
SetAcceptedFormat(format);
|
|
|
|
BMediaInput::Connected(format);
|
|
}
|
|
|
|
|
|
void
|
|
BSimpleMediaInput::Disconnected()
|
|
{
|
|
if (fNotifyHook != NULL)
|
|
(*fNotifyHook)(this, BSimpleMediaConnection::B_INPUT_DISCONNECTED);
|
|
|
|
BMediaInput::Disconnected();
|
|
}
|
|
|
|
|
|
void
|
|
BSimpleMediaInput::HandleBuffer(BBuffer* buffer)
|
|
{
|
|
CALLED();
|
|
|
|
if (fProcessHook != NULL)
|
|
(*fProcessHook)(this, buffer);
|
|
}
|
|
|
|
|
|
BSimpleMediaOutput::BSimpleMediaOutput()
|
|
:
|
|
BMediaConnection(B_MEDIA_OUTPUT),
|
|
BSimpleMediaConnection(B_MEDIA_OUTPUT),
|
|
BMediaOutput()
|
|
{
|
|
}
|
|
|
|
|
|
BSimpleMediaOutput::~BSimpleMediaOutput()
|
|
{
|
|
CALLED();
|
|
}
|
|
|
|
|
|
status_t
|
|
BSimpleMediaOutput::PrepareToConnect(media_format* format)
|
|
{
|
|
// TODO: Add hooks
|
|
|
|
if (!format_is_compatible(AcceptedFormat(), *format))
|
|
return B_ERROR;
|
|
|
|
return B_OK;
|
|
}
|
|
|
|
|
|
status_t
|
|
BSimpleMediaOutput::FormatProposal(media_format* format)
|
|
{
|
|
if (fNotifyHook != NULL) {
|
|
return (*fNotifyHook)(this,
|
|
BSimpleMediaConnection::B_FORMAT_PROPOSAL, format);
|
|
} else
|
|
*format = AcceptedFormat();
|
|
|
|
return B_OK;
|
|
}
|
|
|
|
|
|
void
|
|
BSimpleMediaOutput::Connected(const media_format& format)
|
|
{
|
|
if (fNotifyHook != NULL)
|
|
(*fNotifyHook)(this, BSimpleMediaConnection::B_OUTPUT_CONNECTED);
|
|
|
|
SetAcceptedFormat(format);
|
|
|
|
BMediaOutput::Connected(format);
|
|
}
|
|
|
|
|
|
void
|
|
BSimpleMediaOutput::Disconnected()
|
|
{
|
|
if (fNotifyHook != NULL)
|
|
(*fNotifyHook)(this, BSimpleMediaConnection::B_OUTPUT_DISCONNECTED);
|
|
|
|
BMediaOutput::Disconnected();
|
|
}
|