#ifndef MEDIA_GPU_MAC_VIDEO_TOOLBOX_OUTPUT_QUEUE_H_
#define MEDIA_GPU_MAC_VIDEO_TOOLBOX_OUTPUT_QUEUE_H_
#include "base/containers/flat_map.h"
#include "base/containers/queue.h"
#include "base/functional/callback.h"
#include "base/memory/scoped_refptr.h"
#include "base/task/sequenced_task_runner.h"
#include "media/base/video_decoder.h"
#include "media/base/video_frame.h"
#include "media/gpu/codec_picture.h"
#include "media/gpu/media_gpu_export.h"
namespace media {
class MEDIA_GPU_EXPORT VideoToolboxOutputQueue {
public:
explicit VideoToolboxOutputQueue(
scoped_refptr<base::SequencedTaskRunner> task_runner);
~VideoToolboxOutputQueue();
void SetOutputCB(const VideoDecoder::OutputCB output_cb);
void SchedulePicture(scoped_refptr<CodecPicture> picture);
void FulfillPicture(scoped_refptr<CodecPicture> picture,
scoped_refptr<VideoFrame> frame);
void Flush(VideoDecoder::DecodeCB flush_cb);
void Reset(DecoderStatus status);
private:
void Process();
scoped_refptr<base::SequencedTaskRunner> task_runner_;
VideoDecoder::OutputCB output_cb_;
VideoDecoder::DecodeCB flush_cb_;
base::queue<scoped_refptr<CodecPicture>> scheduled_pictures_;
base::flat_map<scoped_refptr<CodecPicture>, scoped_refptr<VideoFrame>>
fulfilled_pictures_;
};
}
#endif