📄 mediarecordernode.cxx
字号:
// MediaRecorderNode.cpp
// ---------------------
// Copyright 1999, Be Incorporated. All Rights Reserved.
// This file may be used under the terms of the Be Sample Code License.
#include "MediaRecorderNode.h"
#include "MediaRecorder.h"
#include <TimedEventQueue.h>
#include <TimeSource.h>
#include <Buffer.h>
#include <stdio.h>
BMediaRecorderNode::BMediaRecorderNode(const char *name, BMediaRecorder * rec, int32 priority) :
BMediaNode(name),
BMediaEventLooper(),
BBufferConsumer(B_MEDIA_UNKNOWN_TYPE),
_mRecorder(rec)
{
SetPriority(priority);
_mInput.destination.id = 1;
_mInput.destination.port = ControlPort();
sprintf(_mInput.name, "%.20s Input", name);
_mName.SetTo(name);
}
BMediaAddOn *
BMediaRecorderNode::AddOn(int32 *internal_id) const
{
if (internal_id) *internal_id = -1;
return 0;
}
void
BMediaRecorderNode::SetOKFormat(const media_format &format)
{
_mOKFormat = format;
}
status_t
BMediaRecorderNode::GetInput(media_input * out_input)
{
_mInput.node = Node();
*out_input = _mInput;
return B_OK;
}
void
BMediaRecorderNode::SetDataEnabled(bool enabled)
{
int32 tag;
(void)SetOutputEnabled(_mInput.source, _mInput.destination, enabled, 0, &tag);
}
void
BMediaRecorderNode::HandleEvent(const media_timed_event * /* event */, bigtime_t /* lateness */, bool /* realTimeEvent */)
{
// we ignore them all!
}
status_t
BMediaRecorderNode::HandleMessage(int32 /* message */, const void * /* data */, size_t /* size */)
{
// if the message is some secret message, do it here
return B_ERROR;
}
status_t
BMediaRecorderNode::AcceptFormat(const media_destination & /* dest */, media_format *format)
{
if (format_is_compatible(*format, _mOKFormat)) return B_OK;
*format = _mOKFormat;
return B_MEDIA_BAD_FORMAT;
}
status_t
BMediaRecorderNode::GetNextInput(int32 *cookie, media_input *out_input)
{
if (*cookie == 0) {
*cookie = -1;
*out_input = _mInput;
return B_OK;
}
return B_BAD_INDEX;
}
void
BMediaRecorderNode::DisposeInputCookie(int32 /* cookie */)
{
}
void
BMediaRecorderNode::BufferReceived(BBuffer *buffer)
{
_mRecorder->BufferReceived(buffer->Data(), buffer->SizeUsed(), *buffer->Header());
buffer->Recycle();
}
void
BMediaRecorderNode::ProducerDataStatus(const media_destination & /* for_whom */, int32 /* status */, bigtime_t /* at_performance_time */)
{
}
status_t
BMediaRecorderNode::GetLatencyFor(const media_destination & /* for_whom */, bigtime_t *out_latency, media_node_id *out_timesource)
{
*out_latency = 0;
*out_timesource = TimeSource()->ID();
return B_OK;
}
status_t
BMediaRecorderNode::Connected(const media_source &producer, const media_destination &where, const media_format &with_format, media_input *out_input)
{
_mInput.source = producer;
_mInput.format = with_format;
*out_input = _mInput;
return B_OK;
}
void
BMediaRecorderNode::Disconnected(const media_source &producer, const media_destination &where)
{
_mInput.source = media_source::null;
sprintf(_mInput.name, "%.20s Input", _mName.String());
}
status_t
BMediaRecorderNode::FormatChanged(const media_source &producer, const media_destination &consumer, int32 change_tag, const media_format &format)
{
if (!format_is_compatible(format, _mOKFormat)) {
return B_MEDIA_BAD_FORMAT;
}
_mInput.format = format;
return B_OK;
}
BMediaRecorderNode::~BMediaRecorderNode()
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -