#pragma once
#include "MetaObject.h"
#include "CtrlObject.h"
#include "VideoObject.h"
#include "AudioObject.h"
namespace icpstd
{
class MediaObjectBase : public ThreadBase
{
protected :
virtual void process ( ) { }
unique_ptr < CommandCtrl> _control;
unique_ptr < StreamCtrlObjectBase> _streamCtrl;
unique_ptr < VideoDecoderObjectBase> _videoDec;
unique_ptr < AudioDecoderObjectBase> _audioDec;
unique_ptr < VideoPlaybackObjectBase> _videoPlay;
unique_ptr < AudioPlaybackObjectBase> _audioPlay;
MetaObjectData _meta;
public :
MediaObjectBase ( ) { }
virtual ~MediaObjectBase ( ) { }
} ;
class VDPAUPlayer : public MediaObjectBase
{
VDPWindow _vw;
struct SyncWorker
{
bool goon = false ;
bool done = true ;
unique_ptr < thread> worker;
} _sync;
CommandDataQueue _cmdQueue;
StreamDataQueue _astreamQueue;
StreamDataQueue _vstreamQueue;
AudioPCMDataQueue _adataQueue;
VDPOutputSurfaceQueue _vdataQueue;
protected :
void process ( ) ;
void media_sync ( ) ;
void media_unsync ( ) ;
void queue_reset ( ) ;
public :
VDPAUPlayer ( ) ;
~VDPAUPlayer ( ) ;
} ;
} ;
I3ByYWdtYSBvbmNlCgojaW5jbHVkZSAiTWV0YU9iamVjdC5oIgojaW5jbHVkZSAiQ3RybE9iamVjdC5oIgojaW5jbHVkZSAiVmlkZW9PYmplY3QuaCIKI2luY2x1ZGUgIkF1ZGlvT2JqZWN0LmgiCgpuYW1lc3BhY2UgaWNwc3RkCnsKCmNsYXNzIE1lZGlhT2JqZWN0QmFzZSA6IHB1YmxpYyBUaHJlYWRCYXNlCnsKcHJvdGVjdGVkOgogICAgdmlydHVhbCB2b2lkIHByb2Nlc3MgKCkge30KCiAgICB1bmlxdWVfcHRyIDxDb21tYW5kQ3RybD4gICAgICAgICAgICAgX2NvbnRyb2w7CiAgICB1bmlxdWVfcHRyIDxTdHJlYW1DdHJsT2JqZWN0QmFzZT4gICAgX3N0cmVhbUN0cmw7CiAgICB1bmlxdWVfcHRyIDxWaWRlb0RlY29kZXJPYmplY3RCYXNlPiAgX3ZpZGVvRGVjOwogICAgdW5pcXVlX3B0ciA8QXVkaW9EZWNvZGVyT2JqZWN0QmFzZT4gIF9hdWRpb0RlYzsKICAgIHVuaXF1ZV9wdHIgPFZpZGVvUGxheWJhY2tPYmplY3RCYXNlPiBfdmlkZW9QbGF5OwogICAgdW5pcXVlX3B0ciA8QXVkaW9QbGF5YmFja09iamVjdEJhc2U+IF9hdWRpb1BsYXk7CgogICAgTWV0YU9iamVjdERhdGEgX21ldGE7CgpwdWJsaWM6CiAgICAgICAgICAgICAgICAgIE1lZGlhT2JqZWN0QmFzZSAgKCkge30KICAgIHZpcnR1YWwgICAgICB+TWVkaWFPYmplY3RCYXNlICAoKSB7fQp9OwoKY2xhc3MgVkRQQVVQbGF5ZXIgOiBwdWJsaWMgTWVkaWFPYmplY3RCYXNlCnsKICAgIFZEUFdpbmRvdyBfdnc7CgogICAgc3RydWN0IFN5bmNXb3JrZXIKICAgIHsKICAgICAgICBib29sICAgZ29vbiA9IGZhbHNlOwogICAgICAgIGJvb2wgICBkb25lID0gdHJ1ZTsKICAgICAgICB1bmlxdWVfcHRyIDx0aHJlYWQ+IHdvcmtlcjsKICAgIH0gX3N5bmM7CgogICAgQ29tbWFuZERhdGFRdWV1ZSAgICAgIF9jbWRRdWV1ZTsKICAgIFN0cmVhbURhdGFRdWV1ZSAgICAgICBfYXN0cmVhbVF1ZXVlOwogICAgU3RyZWFtRGF0YVF1ZXVlICAgICAgIF92c3RyZWFtUXVldWU7CiAgICBBdWRpb1BDTURhdGFRdWV1ZSAgICAgX2FkYXRhUXVldWU7CiAgICBWRFBPdXRwdXRTdXJmYWNlUXVldWUgX3ZkYXRhUXVldWU7Cgpwcm90ZWN0ZWQ6CiAgICB2b2lkIHByb2Nlc3MgKCk7CiAgICB2b2lkIG1lZGlhX3N5bmMgKCk7CiAgICB2b2lkIG1lZGlhX3Vuc3luYyAoKTsKICAgIHZvaWQgcXVldWVfcmVzZXQgKCk7CgpwdWJsaWM6CiAgICAgVkRQQVVQbGF5ZXIgKCk7CiAgICB+VkRQQVVQbGF5ZXIgKCk7Cn07Cgp9Owo=