📄 radeonproducer.h
字号:
/******************************************************************************// File: RadeonProducer.h// Description: ATI Radeon Video Producer media node.// Copyright 2001, Carlos Hasan/*******************************************************************************/#ifndef __RADEON_PRODUCER_H__#define __RADEON_PRODUCER_H__#include <kernel/OS.h>#include <media/BufferProducer.h>#include <media/Controllable.h>#include <media/MediaDefs.h>#include <media/MediaEventLooper.h>#include <media/MediaNode.h>#include <support/Locker.h>#include "VideoIn.h"class CRadeonAddOn;class CRadeonProducer : public virtual BMediaEventLooper, public virtual BBufferProducer, public virtual BControllable{public: CRadeonProducer( CRadeonAddOn *addon, const char *name, const char *device_name, int32 internal_id, BMessage *config );virtual ~CRadeonProducer();void setupWeb();virtual status_t InitCheck() const { return fInitStatus; }/* BMediaNode */public:virtual port_id ControlPort() const;virtual BMediaAddOn *AddOn(int32 * internal_id) const;virtual status_t HandleMessage(int32 message, const void *data, size_t size);protected: virtual void Preroll();virtual void SetTimeSource(BTimeSource * time_source);virtual status_t RequestCompleted(const media_request_info & info);/* BMediaEventLooper */protected:virtual void NodeRegistered();virtual void Start(bigtime_t performance_time);virtual void Stop(bigtime_t performance_time, bool immediate);virtual void Seek(bigtime_t media_time, bigtime_t performance_time);virtual void TimeWarp(bigtime_t at_real_time, bigtime_t to_performance_time);virtual status_t AddTimer(bigtime_t at_performance_time, int32 cookie);virtual void SetRunMode(run_mode mode);virtual void HandleEvent(const media_timed_event *event, bigtime_t lateness, bool realTimeEvent = false);virtual void CleanUpEvent(const media_timed_event *event);virtual bigtime_t OfflineTime();virtual void ControlLoop();virtual status_t DeleteHook(BMediaNode * node);/* BBufferProducer */ protected:virtual status_t FormatSuggestionRequested(media_type type, int32 quality, media_format * format);virtual status_t FormatProposal(const media_source &output, media_format *format);virtual status_t FormatChangeRequested(const media_source &source, const media_destination &destination, media_format *io_format, int32 *_deprecated_);virtual status_t GetNextOutput(int32 * cookie, media_output * out_output);virtual status_t DisposeOutputCookie(int32 cookie);virtual status_t SetBufferGroup(const media_source &for_source, BBufferGroup * group);virtual status_t VideoClippingChanged(const media_source &for_source, int16 num_shorts, int16 *clip_data, const media_video_display_info &display, int32 * _deprecated_);virtual status_t GetLatency(bigtime_t * out_latency);virtual status_t PrepareToConnect(const media_source &what, const media_destination &where, media_format *format, media_source *out_source, char *out_name);virtual void Connect(status_t error, const media_source &source, const media_destination &destination, const media_format & format, char *io_name);virtual void Disconnect(const media_source & what, const media_destination & where);virtual void LateNoticeReceived(const media_source & what, bigtime_t how_much, bigtime_t performance_time);virtual void EnableOutput(const media_source & what, bool enabled, int32 * _deprecated_);virtual status_t SetPlayRate(int32 numer,int32 denom);virtual void AdditionalBufferRequested(const media_source & source, media_buffer_id prev_buffer, bigtime_t prev_time, const media_seek_tag * prev_tag);virtual void LatencyChanged(const media_source & source, const media_destination & destination, bigtime_t new_latency, uint32 flags);/* BControllable */ protected:virtual status_t GetParameterValue(int32 id, bigtime_t *last_change, void *value, size_t *size);virtual void SetParameterValue(int32 id, bigtime_t when, const void *value, size_t size);virtual status_t StartControlPanel(BMessenger *out_messenger);public: enum { C_GET_CONFIGURATION = BTimedEventQueue::B_USER_EVENT, C_GET_CONFIGURATION_REPLY }; struct configuration_msg { port_id reply_port; }; struct configuration_msg_reply { status_t res; size_t config_size; char config; };/* state */private: void HandleStart(bigtime_t performance_time); void HandleStop(); void HandleTimeWarp(bigtime_t performance_time); void HandleSeek(bigtime_t performance_time); void HandleHardware(); // home-brewed extension status_t GetConfiguration( BMessage *out ); CVideoIn fVideoIn; status_t fInitStatus; int32 fInternalID; CRadeonAddOn *fAddOn; BBufferGroup *fBufferGroup; //BBufferGroup *fUsedBufferGroup; static int32 _frame_generator_(void *data); int32 FrameGenerator(); /* The remaining variables should be declared volatile, but they * are not here to improve the legibility of the sample code. */ //uint32 fFrame; uint32 fFieldSequenceBase; //bigtime_t fPerformanceTimeBase; bigtime_t fProcessingLatency; media_output fOutput; //media_raw_video_format fConnectedFormat; //bool fConnected; bool fEnabled; // use fixed names as they are used in settings file enum EOptions { P_SOURCE = 'VSRC', P_AUDIO_SOURCE = 'ASRC', P_AUDIO_FORMAT = 'AFMT', P_VOLUME = 'VOL ', P_STANDARD = 'TVST', P_MODE = 'CMOD', P_FORMAT = 'VFMT', P_RESOLUTION = 'RES ', P_TUNER = 'TUNR', P_BRIGHTNESS = 'BRGT', P_CONTRAST = 'CONT', P_SATURATION = 'SATU', P_HUE = 'HUE ', P_SHARPNESS = 'SHRP' }; enum { C_RESOLUTION_MAX = 6 }; enum { C_CHANNEL_MAX = 125 }; int32 fSource; int32 fStandard; int32 fMode; int32 fCurMode; // mode, overwritten by application int32 fFormat; int32 fResolution; int32 fTuner; int32 fBrightness; int32 fContrast; int32 fSaturation; int32 fHue; int32 fSharpness; bigtime_t fSourceLastChange; bigtime_t fStandardLastChange; bigtime_t fModeLastChange; bigtime_t fFormatLastChange; bigtime_t fResolutionLastChange; bigtime_t fTunerLastChange; bigtime_t fBrightnessLastChange; bigtime_t fContrastLastChange; bigtime_t fSaturationLastChange; bigtime_t fHueLastChange; bigtime_t fSharpnessLastChange; status_t AddInt32( BMessage *msg, EOptions option, int32 value ); status_t FindInt32( BMessage *config, EOptions option, int32 min_value, int32 max_value, int32 default_value, int32 *value ); // format negotiation helpers status_t verifySetMode( media_format *format ); int32 extractCaptureMode( const media_format *format ); status_t verifySetPixelAspect( media_format *format ); status_t verifyActiveRange( media_format *format ); void setActiveRange( media_format *format ); status_t verifyOrientation( media_format *format ); void setOrientation( media_format *format ); status_t verifyPixelFormat( media_format *format ); void setPixelFormat( media_format *format ); status_t verifySetSize( media_format *format, int32 mode, bool set_bytes_per_row ); status_t verifyFormatOffsets( media_format *format ); void setFormatOffsets( media_format *format ); status_t verifyFormatFlags( media_format *format ); void setFormatFlags( media_format *format ); status_t finalizeFormat( media_format *format ); void startCapturing(); void captureField( bigtime_t *capture_time ); void setDefaultBufferGroup(); void instantFormatChange( media_format *new_format );};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -