fcf7cbe79e
Change-Id: Iaa753ef3a93c36031789a85f87e569fc410d3304 Reviewed-on: https://review.haiku-os.org/c/1604 Reviewed-by: Stephan Aßmus <superstippi@gmx.de>
118 lines
2.9 KiB
C++
118 lines
2.9 KiB
C++
/*
|
|
* Copyright 2014, Haiku, Inc. All rights reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef _MEDIA_RECORDER_H
|
|
#define _MEDIA_RECORDER_H
|
|
|
|
|
|
#include <MediaDefs.h>
|
|
#include <MediaNode.h>
|
|
|
|
|
|
namespace BPrivate { namespace media {
|
|
class BMediaRecorderNode;
|
|
}
|
|
}
|
|
|
|
|
|
class BMediaRecorder {
|
|
public:
|
|
enum notification {
|
|
B_WILL_START = 1, // performance_time
|
|
B_WILL_STOP, // performance_time immediate
|
|
B_WILL_SEEK, // performance_time media_time
|
|
B_WILL_TIMEWARP, // real_time performance_time
|
|
};
|
|
|
|
typedef void (*ProcessFunc)(void* cookie,
|
|
bigtime_t timestamp, void* data,
|
|
size_t size, const media_format& format);
|
|
|
|
typedef void (*NotifyFunc)(void* cookie,
|
|
notification what, ...);
|
|
|
|
public:
|
|
BMediaRecorder(const char* name,
|
|
media_type type
|
|
= B_MEDIA_UNKNOWN_TYPE);
|
|
|
|
virtual ~BMediaRecorder();
|
|
|
|
status_t InitCheck() const;
|
|
|
|
status_t SetHooks(ProcessFunc recordFunc = NULL,
|
|
NotifyFunc notifyFunc = NULL,
|
|
void* cookie = NULL);
|
|
|
|
void SetAcceptedFormat(
|
|
const media_format& format);
|
|
const media_format& AcceptedFormat() const;
|
|
|
|
virtual status_t Start(bool force = false);
|
|
virtual status_t Stop(bool force = false);
|
|
|
|
virtual status_t Connect(const media_format& format);
|
|
|
|
virtual status_t Connect(const dormant_node_info& dormantInfo,
|
|
const media_format& format);
|
|
|
|
virtual status_t Connect(const media_node& node,
|
|
const media_output* output = NULL,
|
|
const media_format* format = NULL);
|
|
|
|
virtual status_t Disconnect();
|
|
|
|
bool IsConnected() const;
|
|
bool IsRunning() const;
|
|
|
|
const media_format& Format() const;
|
|
|
|
protected:
|
|
// Get the producer node source
|
|
const media_source& MediaSource() const;
|
|
// This is the our own input
|
|
const media_input MediaInput() const;
|
|
|
|
virtual void BufferReceived(void* buffer, size_t size,
|
|
const media_header& header);
|
|
|
|
status_t SetUpConnection(media_source outputSource);
|
|
|
|
private:
|
|
|
|
status_t _Connect(const media_node& mediaNode,
|
|
const media_output* output,
|
|
const media_format& format);
|
|
|
|
virtual void _ReservedMediaRecorder0();
|
|
virtual void _ReservedMediaRecorder1();
|
|
virtual void _ReservedMediaRecorder2();
|
|
virtual void _ReservedMediaRecorder3();
|
|
virtual void _ReservedMediaRecorder4();
|
|
virtual void _ReservedMediaRecorder5();
|
|
virtual void _ReservedMediaRecorder6();
|
|
virtual void _ReservedMediaRecorder7();
|
|
|
|
status_t fInitErr;
|
|
|
|
bool fConnected;
|
|
bool fRunning;
|
|
bool fReleaseOutputNode;
|
|
|
|
ProcessFunc fRecordHook;
|
|
NotifyFunc fNotifyHook;
|
|
|
|
media_node fOutputNode;
|
|
media_source fOutputSource;
|
|
|
|
BPrivate::media::BMediaRecorderNode* fNode;
|
|
|
|
void* fBufferCookie;
|
|
uint32 fPadding[32];
|
|
|
|
friend class BPrivate::media::BMediaRecorderNode;
|
|
};
|
|
|
|
#endif // _MEDIA_RECORDER_H
|