kodi
DVDFactoryCodec.h
1 /*
2  * Copyright (C) 2005-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/AudioEngine/Utils/AEStreamInfo.h"
12 #include "cores/VideoPlayer/Process/ProcessInfo.h"
13 
14 #include <functional>
15 #include <map>
16 #include <string>
17 #include <vector>
18 
19 extern "C" {
20 #include <libavutil/pixfmt.h>
21 }
22 
23 class CDVDVideoCodec;
24 class CDVDAudioCodec;
25 class CDVDOverlayCodec;
26 class IHardwareDecoder;
27 
28 class CDemuxStreamVideo;
29 class CDVDStreamInfo;
30 class CDVDCodecOption;
31 class CDVDCodecOptions;
32 
33 using CreateHWVideoCodec =
34  std::function<std::unique_ptr<CDVDVideoCodec>(CProcessInfo& processInfo)>;
35 using CreateHWAccel = std::function<IHardwareDecoder*(
36  CDVDStreamInfo& hint, CProcessInfo& processInfo, AVPixelFormat fmt)>;
37 using CreateHWAudioCodec =
38  std::function<std::unique_ptr<CDVDAudioCodec>(CProcessInfo& processInfo)>;
39 
41 {
42 public:
43  static std::unique_ptr<CDVDVideoCodec> CreateVideoCodec(CDVDStreamInfo& hint,
44  CProcessInfo& processInfo);
45 
46  static IHardwareDecoder* CreateVideoCodecHWAccel(const std::string& id,
47  CDVDStreamInfo& hint,
48  CProcessInfo& processInfo,
49  AVPixelFormat fmt);
50 
51  static std::unique_ptr<CDVDAudioCodec> CreateAudioCodec(CDVDStreamInfo& hint,
52  CProcessInfo& processInfo,
53  bool allowpassthrough,
54  bool allowdtshddecode,
55  CAEStreamInfo::DataType ptStreamType);
56 
57  static std::unique_ptr<CDVDOverlayCodec> CreateOverlayCodec(CDVDStreamInfo& hint);
58 
59  static void RegisterHWVideoCodec(const std::string& id, CreateHWVideoCodec createFunc);
60  static void ClearHWVideoCodecs();
61 
62  static void RegisterHWAccel(const std::string& id, CreateHWAccel createFunc);
63  static std::vector<std::string> GetHWAccels();
64  static void ClearHWAccels();
65 
66  static void RegisterHWAudioCodec(const std::string& id, CreateHWAudioCodec createFunc);
67  static void ClearHWAudioCodecs();
68 
69 
70 protected:
71  static std::unique_ptr<CDVDVideoCodec> CreateVideoCodecHW(const std::string& id,
72  CProcessInfo& processInfo);
73  static std::unique_ptr<CDVDAudioCodec> CreateAudioCodecHW(const std::string& id,
74  CProcessInfo& processInfo);
75 
76  static std::map<std::string, CreateHWVideoCodec> m_hwVideoCodecs;
77  static std::map<std::string, CreateHWAccel> m_hwAccels;
78  static std::map<std::string, CreateHWAudioCodec> m_hwAudioCodecs;
79 };
80 
Definition: DVDStreamInfo.h:25
Definition: DVDCodecs.h:23
Definition: DVDFactoryCodec.h:40
Definition: DVDVideoCodec.h:248
Definition: DVDOverlayCodec.h:39
Definition: DVDDemux.h:124
Definition: ProcessInfo.h:26
Definition: DVDAudioCodec.h:48
Definition: DVDCodecs.h:15
Definition: DVDVideoCodec.h:110