kodi
DVDSubtitleParser.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 "../DVDCodecs/Overlay/DVDOverlay.h"
12 #include "DVDSubtitleLineCollection.h"
13 #include "DVDSubtitleStream.h"
14 
15 #include <memory>
16 #include <stdio.h>
17 #include <string>
18 
19 class CDVDStreamInfo;
20 
22 {
23 public:
24  virtual ~CDVDSubtitleParser() = default;
25  virtual bool Open(CDVDStreamInfo& hints) = 0;
26  virtual void Reset() = 0;
27  virtual std::shared_ptr<CDVDOverlay> Parse(double iPts) = 0;
28  virtual const std::string& GetName() const = 0;
29 };
30 
32  : public CDVDSubtitleParser
33 {
34 public:
35  explicit CDVDSubtitleParserCollection(const std::string& strFile) : m_filename(strFile) {}
36  ~CDVDSubtitleParserCollection() override = default;
37  std::shared_ptr<CDVDOverlay> Parse(double iPts) override
38  {
39  std::shared_ptr<CDVDOverlay> o = m_collection.Get(iPts);
40  if(o == NULL)
41  return o;
42  return o->Clone();
43  }
44  void Reset() override { m_collection.Reset(); }
45 
46 protected:
47  CDVDSubtitleLineCollection m_collection;
48  std::string m_filename;
49 };
50 
53 {
54 public:
55  CDVDSubtitleParserText(std::unique_ptr<CDVDSubtitleStream>&& stream,
56  const std::string& filename,
57  const char* name)
58  : CDVDSubtitleParserCollection(filename), m_pStream(std::move(stream)), m_parserName(name)
59  {
60  }
61 
62  ~CDVDSubtitleParserText() override = default;
63 
64  /*
65  * \brief Returns parser name
66  */
67  const std::string& GetName() const override { return m_parserName; }
68 
69 protected:
70  using CDVDSubtitleParserCollection::Open;
71  bool Open()
72  {
73  if(m_pStream)
74  {
75  if (m_pStream->Seek(0))
76  return true;
77  }
78  else
79  m_pStream = std::make_unique<CDVDSubtitleStream>();
80 
81  return m_pStream->Open(m_filename);
82  }
83 
84  std::unique_ptr<CDVDSubtitleStream> m_pStream;
85  std::string m_parserName;
86 };
Definition: DVDSubtitleParser.h:51
Definition: DVDStreamInfo.h:25
Definition: DVDSubtitleParser.h:31
Definition: DVDSubtitleLineCollection.h:20
Definition: DVDSubtitleParser.h:21