xbmc
DVDDemuxCC.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 "DVDDemux.h"
12 
13 #include <memory>
14 #include <vector>
15 
16 class CCaptionBlock;
17 class CDecoderCC708;
18 
19 class CDVDDemuxCC : public CDVDDemux
20 {
21 public:
22  explicit CDVDDemuxCC(AVCodecID codec);
23  ~CDVDDemuxCC() override;
24 
25  bool Reset() override { return true; }
26  void Flush() override {};
27  DemuxPacket* Read() override { return NULL; }
28  bool SeekTime(double time, bool backwards = false, double* startpts = NULL) override
29  {
30  return true;
31  }
32  CDemuxStream* GetStream(int iStreamId) const override;
33  std::vector<CDemuxStream*> GetStreams() const override;
34  int GetNrOfStreams() const override;
35 
36  DemuxPacket* Read(DemuxPacket *packet);
37  static void Handler(int service, void *userdata);
38 
39 protected:
40  bool OpenDecoder();
41  void Dispose();
42  DemuxPacket* Decode();
43 
44  struct streamdata
45  {
46  int streamIdx;
47  int service;
48  bool hasData ;
49  double pts;
50  };
51  std::vector<streamdata> m_streamdata;
52  std::vector<CDemuxStreamSubtitle> m_streams;
53  bool m_hasData;
54  double m_curPts;
55  std::vector<CCaptionBlock*> m_ccReorderBuffer;
56  std::vector<CCaptionBlock*> m_ccTempBuffer;
57  std::unique_ptr<CDecoderCC708> m_ccDecoder;
58  AVCodecID m_codec;
59 };
Definition: DVDDemux.h:219
Definition: DVDDemuxCC.h:44
Definition: DVDDemuxCC.cpp:150
Definition: DVDDemuxCC.h:19
Definition: DVDDemux.h:70
Definition: DemuxPacket.h:22
Definition: cc_decoder708.h:289