1 /*
2  *  Copyright (C) 2017-2018 Team Kodi
3  *  This file is part of Kodi - https://kodi.tv
4  *
5  *  SPDX-License-Identifier: GPL-2.0-or-later
6  *  See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include "cores/VideoPlayer/Buffers/VideoBuffer.h"
12 #include "cores/VideoPlayer/DVDCodecs/Video/DVDVideoCodec.h"
13 #include "cores/VideoPlayer/DVDStreamInfo.h"
14 
15 #include <memory>
16 
17 class CDVDVideoCodecDRMPRIME : public CDVDVideoCodec
18 {
19 public:
20   explicit CDVDVideoCodecDRMPRIME(CProcessInfo& processInfo);
21   ~CDVDVideoCodecDRMPRIME() override;
22 
23   static CDVDVideoCodec* Create(CProcessInfo& processInfo);
24   static void Register();
25 
26   bool Open(CDVDStreamInfo& hints, CDVDCodecOptions& options) override;
27   bool AddData(const DemuxPacket& packet) override;
28   void Reset() override;
29   CDVDVideoCodec::VCReturn GetPicture(VideoPicture* pVideoPicture) override;
GetName()30   const char* GetName() override { return m_name.c_str(); }
GetAllowedReferences()31   unsigned GetAllowedReferences() override { return 5; }
32   void SetCodecControl(int flags) override;
33 
34 protected:
35   void Drain();
36   void SetPictureParams(VideoPicture* pVideoPicture);
37   void UpdateProcessInfo(struct AVCodecContext* avctx, const enum AVPixelFormat fmt);
38   static enum AVPixelFormat GetFormat(struct AVCodecContext* avctx, const enum AVPixelFormat* fmt);
39   static int GetBuffer(struct AVCodecContext* avctx, AVFrame* frame, int flags);
40 
41   std::string m_name;
42   int m_codecControlFlags = 0;
43   CDVDStreamInfo m_hints;
44   AVCodecContext* m_pCodecContext = nullptr;
45   AVFrame* m_pFrame = nullptr;
46   std::shared_ptr<IVideoBufferPool> m_videoBufferPool;
47 };
48