diff options
Diffstat (limited to 'lib/libmpeg2/doc/sample3.c')
-rw-r--r-- | lib/libmpeg2/doc/sample3.c | 152 |
1 files changed, 0 insertions, 152 deletions
diff --git a/lib/libmpeg2/doc/sample3.c b/lib/libmpeg2/doc/sample3.c deleted file mode 100644 index 56a411b4a4..0000000000 --- a/lib/libmpeg2/doc/sample3.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * sample3.c - * Copyright (C) 2003 Regis Duchesne <hpreg@zoy.org> - * Copyright (C) 2000-2003 Michel Lespinasse <walken@zoy.org> - * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca> - * Copyright (C) 2006 Sam Hocevar <sam@zoy.org> - * - * This file is part of mpeg2dec, a free MPEG-2 video stream decoder. - * See http://libmpeg2.sourceforge.net/ for updates. - * - * mpeg2dec is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * mpeg2dec 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * This program reads a MPEG-2 stream, and saves each of its frames as - * an image file using the PGM format (black and white). - * - * It demonstrates how to use the following features of libmpeg2: - * - Output buffers use the YUV 4:2:0 planar format. - * - Output buffers must be 16-byte aligned. - * - Output buffers are allocated by the caller but managed by the library. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <inttypes.h> - -#include "mpeg2.h" - -static void save_pgm (int width, int height, - int chroma_width, int chroma_height, - uint8_t * const * buf, int num) -{ - char filename[100]; - FILE * pgmfile; - int i; - static uint8_t black[16384] = { 0 }; - - sprintf (filename, "%d.pgm", num); - pgmfile = fopen (filename, "wb"); - if (!pgmfile) { - fprintf (stderr, "Could not open file \"%s\".\n", filename); - exit (1); - } - fprintf (pgmfile, "P5\n%d %d\n255\n", - 2 * chroma_width, height + chroma_height); - for (i = 0; i < height; i++) { - fwrite (buf[0] + i * width, width, 1, pgmfile); - fwrite (black, 2 * chroma_width - width, 1, pgmfile); - } - for (i = 0; i < chroma_height; i++) { - fwrite (buf[1] + i * chroma_width, chroma_width, 1, pgmfile); - fwrite (buf[2] + i * chroma_width, chroma_width, 1, pgmfile); - } - fclose (pgmfile); -} - -static void sample3 (FILE * mpgfile) -{ -#define BUFFER_SIZE 4096 -#define ALIGN_16(p) ((void *)(((uintptr_t)(p) + 15) & ~((uintptr_t)15))) - uint8_t buffer[BUFFER_SIZE]; - mpeg2dec_t * decoder; - const mpeg2_info_t * info; - const mpeg2_sequence_t * sequence; - mpeg2_state_t state; - size_t size; - int framenum = 0; - uint8_t * mbuf[3][3]; - uint8_t * fbuf[3][3]; - int i, j; - - decoder = mpeg2_init (); - if (decoder == NULL) { - fprintf (stderr, "Could not allocate a decoder object.\n"); - exit (1); - } - info = mpeg2_info (decoder); - - size = (size_t)-1; - do { - state = mpeg2_parse (decoder); - sequence = info->sequence; - switch (state) { - case STATE_BUFFER: - size = fread (buffer, 1, BUFFER_SIZE, mpgfile); - mpeg2_buffer (decoder, buffer, buffer + size); - break; - case STATE_SEQUENCE: - for (i = 0; i < 3; i++) { - mbuf[i][0] = (uint8_t *) malloc (sequence->width * - sequence->height + 15); - mbuf[i][1] = (uint8_t *) malloc (sequence->chroma_width * - sequence->chroma_height + 15); - mbuf[i][2] = (uint8_t *) malloc (sequence->chroma_width * - sequence->chroma_height + 15); - if (!mbuf[i][0] || !mbuf[i][1] || !mbuf[i][2]) { - fprintf (stderr, "Could not allocate an output buffer.\n"); - exit (1); - } - for (j = 0; j < 3; j++) - fbuf[i][j] = ALIGN_16 (mbuf[i][j]); - mpeg2_set_buf (decoder, fbuf[i], NULL); - } - break; - case STATE_SLICE: - case STATE_END: - case STATE_INVALID_END: - if (info->display_fbuf) - save_pgm (sequence->width, sequence->height, - sequence->chroma_width, sequence->chroma_height, - info->display_fbuf->buf, framenum++); - if (state != STATE_SLICE) - for (i = 0; i < 3; i++) - for (j = 0; j < 3; j++) - free (mbuf[i][j]); - break; - default: - break; - } - } while (size); - - mpeg2_close (decoder); -} - -int main (int argc, char ** argv) -{ - FILE * mpgfile; - - if (argc > 1) { - mpgfile = fopen (argv[1], "rb"); - if (!mpgfile) { - fprintf (stderr, "Could not open file \"%s\".\n", argv[1]); - exit (1); - } - } else - mpgfile = stdin; - - sample3 (mpgfile); - - return 0; -} |