haiku/headers/os/media/MediaRecorder.h

118 lines
2.9 KiB
C
Raw Normal View History

/*
* 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