15fa5e5feSStephan Aßmus/*
20fc56ed5SStephan Aßmus * Copyright 2007-2008, Haiku. All rights reserved.
35fa5e5feSStephan Aßmus * Distributed under the terms of the MIT License.
45fa5e5feSStephan Aßmus *
55fa5e5feSStephan Aßmus * Authors:
65fa5e5feSStephan Aßmus *		Stephan A��mus <superstippi@gmx.de>
75fa5e5feSStephan Aßmus */
85fa5e5feSStephan Aßmus#ifndef MEDIA_TRACK_VIDEO_SUPPLIER_H
95fa5e5feSStephan Aßmus#define MEDIA_TRACK_VIDEO_SUPPLIER_H
105fa5e5feSStephan Aßmus
110fc56ed5SStephan Aßmus#include "VideoTrackSupplier.h"
120fc56ed5SStephan Aßmus
130fc56ed5SStephan Aßmus#include <MediaFormats.h>
145fa5e5feSStephan Aßmus
155fa5e5feSStephan Aßmusclass BMediaTrack;
165fa5e5feSStephan Aßmus
170fc56ed5SStephan Aßmusclass MediaTrackVideoSupplier : public VideoTrackSupplier {
185fa5e5feSStephan Aßmus public:
1964c4d8f6SStephan Aßmus								MediaTrackVideoSupplier(BMediaTrack* track,
20e6ac2ec4SStephan Aßmus									int32 trackIndex, status_t& initStatus);
215fa5e5feSStephan Aßmus	virtual						~MediaTrackVideoSupplier();
225fa5e5feSStephan Aßmus
230fc56ed5SStephan Aßmus	virtual	const media_format&	Format() const;
242a72b9feSStephan Aßmus	virtual	status_t			GetEncodedFormat(media_format* format) const;
252a72b9feSStephan Aßmus	virtual	status_t			GetCodecInfo(media_codec_info* info) const;
262a72b9feSStephan Aßmus
275fa5e5feSStephan Aßmus	virtual	status_t			ReadFrame(void* buffer,
280fc56ed5SStephan Aßmus									bigtime_t* performanceTime,
29818577b2SStephan Aßmus									const media_raw_video_format& format,
300fc56ed5SStephan Aßmus									bool& wasCached);
317516d989SStephan Aßmus	virtual	status_t			FindKeyFrameForFrame(int64* frame);
325fa5e5feSStephan Aßmus	virtual	status_t			SeekToTime(bigtime_t* performanceTime);
330fc56ed5SStephan Aßmus	virtual	status_t			SeekToFrame(int64* frame);
345fa5e5feSStephan Aßmus
355fa5e5feSStephan Aßmus	virtual	bigtime_t			Position() const
365fa5e5feSStephan Aßmus									{ return fPerformanceTime; }
375fa5e5feSStephan Aßmus	virtual	bigtime_t			Duration() const
385fa5e5feSStephan Aßmus									{ return fDuration; }
390fc56ed5SStephan Aßmus	virtual	int64				CurrentFrame() const
400fc56ed5SStephan Aßmus									{ return fCurrentFrame; }
415fa5e5feSStephan Aßmus
425fa5e5feSStephan Aßmus	virtual	BRect				Bounds() const;
435fa5e5feSStephan Aßmus	virtual	color_space			ColorSpace() const;
445fa5e5feSStephan Aßmus	virtual	uint32				BytesPerRow() const;
455fa5e5feSStephan Aßmus
46e6ac2ec4SStephan Aßmus	virtual	int32				TrackIndex() const
47e6ac2ec4SStephan Aßmus									{ return fTrackIndex; }
48e6ac2ec4SStephan Aßmus
495fa5e5feSStephan Aßmus private:
500fc56ed5SStephan Aßmus			status_t			_SwitchFormat(color_space format,
519639f1bfSStephan Aßmus									uint32 bytesPerRow);
529639f1bfSStephan Aßmus			status_t			_SetDecodedFormat(uint32 width, uint32 height,
539639f1bfSStephan Aßmus									color_space format, uint32 bytesPerRow);
540fc56ed5SStephan Aßmus
555fa5e5feSStephan Aßmus			BMediaTrack*		fVideoTrack;
565fa5e5feSStephan Aßmus
575fa5e5feSStephan Aßmus			media_format		fFormat;
585fa5e5feSStephan Aßmus
595fa5e5feSStephan Aßmus			bigtime_t			fPerformanceTime;
605fa5e5feSStephan Aßmus			bigtime_t			fDuration;
610fc56ed5SStephan Aßmus			int64				fCurrentFrame;
62e6ac2ec4SStephan Aßmus
63e6ac2ec4SStephan Aßmus			int32				fTrackIndex;
645fa5e5feSStephan Aßmus};
655fa5e5feSStephan Aßmus
665fa5e5feSStephan Aßmus#endif // MEDIA_TRACK_VIDEO_SUPPLIER_H
67