~ubuntu-branches/ubuntu/wily/mkvtoolnix/wily

« back to all changes in this revision

Viewing changes to src/output/p_pgs.cpp

  • Committer: Package Import Robot
  • Author(s): Christian Marillat
  • Date: 2015-04-26 10:36:27 UTC
  • mfrom: (1.1.29) (4.2.45 sid)
  • Revision ID: package-import@ubuntu.com-20150426103627-k53p8hrai2ynikaa
Tags: 7.8.0-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
   mkvmerge -- utility for splicing together matroska files
3
 
   from component media subtypes
4
 
 
5
 
   Distributed under the GPL
6
 
   see the file COPYING for details
7
 
   or visit http://www.gnu.org/copyleft/gpl.html
8
 
 
9
 
   PGS packetizer
10
 
 
11
 
   Written by Moritz Bunkus <moritz@bunkus.org>.
12
 
*/
13
 
 
14
 
#include "common/common_pch.h"
15
 
 
16
 
#include <matroska/KaxContentEncoding.h>
17
 
 
18
 
#include "common/codec.h"
19
 
#include "common/compression.h"
20
 
#include "common/pgssup.h"
21
 
#include "output/p_pgs.h"
22
 
 
23
 
using namespace libmatroska;
24
 
 
25
 
pgs_packetizer_c::pgs_packetizer_c(generic_reader_c *p_reader,
26
 
                                   track_info_c &p_ti)
27
 
  : generic_packetizer_c(p_reader, p_ti)
28
 
  , m_aggregate_packets(false)
29
 
{
30
 
  set_track_type(track_subtitle);
31
 
  set_default_compression_method(COMPRESSION_ZLIB);
32
 
}
33
 
 
34
 
pgs_packetizer_c::~pgs_packetizer_c() {
35
 
}
36
 
 
37
 
void
38
 
pgs_packetizer_c::set_headers() {
39
 
  set_codec_id(MKV_S_HDMV_PGS);
40
 
 
41
 
  generic_packetizer_c::set_headers();
42
 
 
43
 
  m_track_entry->EnableLacing(false);
44
 
}
45
 
 
46
 
int
47
 
pgs_packetizer_c::process(packet_cptr packet) {
48
 
  if (!m_aggregate_packets) {
49
 
    add_packet(packet);
50
 
    return FILE_STATUS_MOREDATA;
51
 
  }
52
 
 
53
 
  if (!m_aggregated) {
54
 
    m_aggregated = packet;
55
 
    m_aggregated->data->grab();
56
 
 
57
 
  } else
58
 
    m_aggregated->data->add(packet->data);
59
 
 
60
 
  if (   (0                      != packet->data->get_size())
61
 
      && (PGSSUP_DISPLAY_SEGMENT == packet->data->get_buffer()[0])) {
62
 
    add_packet(m_aggregated);
63
 
    m_aggregated.reset();
64
 
  }
65
 
 
66
 
  return FILE_STATUS_MOREDATA;
67
 
}
68
 
 
69
 
connection_result_e
70
 
pgs_packetizer_c::can_connect_to(generic_packetizer_c *src,
71
 
                                 std::string &) {
72
 
  return !dynamic_cast<pgs_packetizer_c *>(src) ? CAN_CONNECT_NO_FORMAT : CAN_CONNECT_YES;
73
 
}