root/applications/testapps/mpedemux/main.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. mpedemux_on_event
  2. usage
  3. main

/*
 *                      GPAC - Multimedia Framework C SDK
 *
 *                      Authors: Jean Le Feuvre
 *                      Copyright (c) Telecom ParisTech 2007-2012
 *                                      All rights reserved
 *
 *  This file is part of GPAC / mpedemux application
 *
 *  GPAC is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU Lesser General Public License as published by
 *  the Free Software Foundation; either version 2, or (at your option)
 *  any later version.
 *
 *  GPAC is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; see the file COPYING.  If not, write to
 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 */
#include <gpac/mpegts.h>

typedef struct
{
        FILE *ts_file;
        GF_M2TS_Demuxer *ts_demux;
} MPEDemux;


static void mpedemux_on_event(GF_M2TS_Demuxer *ts, u32 evt_type, void *param)
{
        MPEDemux *mpedemux= (MPEDemux *) ts->user;
        switch (evt_type) {
        case GF_M2TS_EVT_PAT_FOUND:
                /* called when the first PAT is fully parsed */
                break;
        case GF_M2TS_EVT_SDT_FOUND:
                /* called when the first SDT is fully parsed */
                break;
        case GF_M2TS_EVT_PMT_FOUND:
                /* called when a first PMT is fully parsed */
                break;
        case GF_M2TS_EVT_INT_FOUND:
                /* called when a first INT is fully parsed */
                /* TODO: create socket for each target in the IP platform */
                break;
        case GF_M2TS_EVT_PAT_UPDATE:
        case GF_M2TS_EVT_PMT_UPDATE:
        case GF_M2TS_EVT_SDT_UPDATE:
                /* called when a new version of the table is parsed */
                break;
        case GF_M2TS_EVT_PES_PCK:
                /* called when a PES packet is parsed */
                break;
        case GF_M2TS_EVT_SL_PCK:
                /* called when an MPEG-4 SL-packet is parsed */
                break;
        case GF_M2TS_EVT_IP_DATAGRAM:
                /* called when an IP packet is parsed
                        TODO: send this packet on the right socket */
                break;
        }
}

static void usage()
{
        fprintf(stdout, "mpedemux input.ts\n");
}

int main(int argc, char **argv)
{
        u8 data[188];
        u32 size;
        MPEDemux *mpedemux;

        if (argc < 2) {
                usage();
                return GF_OK;
        }

        GF_SAFEALLOC(mpedemux, MPEDemux);
        mpedemux->ts_demux = gf_m2ts_demux_new();
        mpedemux->ts_demux->on_event = mpedemux_on_event;
        mpedemux->ts_demux->user = mpedemux;

        mpedemux->ts_file = gf_fopen(argv[1], "rb");

        while (1) {
                /*read chunks by chunks*/
                size = fread(data, 1, 188, mpedemux->ts_file);
                if (!size) break;
                /*process chunk*/
                gf_m2ts_process_data(mpedemux->ts_demux, data, size);
        }

        gf_m2ts_demux_del(mpedemux->ts_demux);
        gf_free(mpedemux);
        return GF_OK;
}

/* [<][>][^][v][top][bottom][index][help] */