www.pudn.com > MPEG2systemsrc.rar > SectionProducers.H
/* Copyright (C) 1995, Tektronix Inc. All Rights Reserved.
*
* Usage Restrictions
*
* License is granted to copy, to use, and to make and to use derivative
* works for research and evaluation purposes only.
*
* Disclaimer of Warranty
*
* These software programs are available to the user without any license
* fee or royalty on an "as is" basis. Tektronix Inc. disclaims any and
* all warranties, whether express, implied, or statuary, including any
* implied warranties or merchantability or of fitness for a particular
* purpose. In no event shall the copyright-holder be liable for any
* incidental, punitive, or consequential damages of any kind whatsoever
* arising from the use of these programs.
*
* This disclaimer of warranty extends to the user of these programs and
* user's customers, employees, agents, transferees, successors, and
* assigns.
*
* The Tektronix Inc. does not represent or warrant that the programs
* furnished hereunder are free of infringement of any third-party
* patents.
*/
/* SectionProducer classes */
#ifndef secproducer_h
#define secproducer_h
#include "Producer.H"
#include "Section.H"
#include "Directory.H"
#include "Encoder.H"
class SectionProducer : public Producer
{
public:
SectionProducer (Encoder*, Section*);
protected:
virtual int fill_buffer ();
virtual void send_section () = 0;
void send_header_a (); // table_id .. section_length
void send_header_b (); // reserved .. last_section_number
void send_CRC ();
private:
Section* sec;
};
class PATProducer : public SectionProducer
{
public:
PATProducer (Encoder*, PATSection*);
virtual void send_section ();
PATSection* patsec;
};
class MapProducer : public SectionProducer
{
public:
MapProducer (Encoder*, MapSection*);
virtual void send_section ();
MapSection* mapsec;
private:
};
class CAProducer : public SectionProducer
{
public:
CAProducer (Encoder*, CASection*);
virtual void send_section ();
private:
CASection* casec;
};
/*
DOCUMENTATION
SectionProducer is a base class from which the PSI-related Producers
PATProducer, MapProducer and CAProducer are derived.
Since the syntax for these sections is similar reproduction of code
is avoided by defining fill_buffer in the base class SectionProducer
and calling the virtual function send_section. send_section is
defined in each of the derived classes. The definitions of
send_section, then, use as utilities the functions send_header_a and
send_header_b, which are defined back in the base class.
Note that the syntax objects: casec, mapsec and patsec are stored
twice in each structure. Once under the generic name "sec" and once
under the more specific name. This is a hack to work around a
well-known and annoying C++ strong-typing problem; if you don't mind
the extra pointer and they are "write-once", then it's a pretty
effective solution.
*/
#endif