mirror of https://github.com/mpv-player/mpv
vo_gl: Move the read_pnm function into a separate file
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32513 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
c640b92bdd
commit
ce9fcc0730
3
Makefile
3
Makefile
|
@ -538,7 +538,8 @@ SRCS_MPLAYER-$(FFMPEG) += libvo/vo_png.c
|
||||||
SRCS_MPLAYER-$(GGI) += libvo/vo_ggi.c
|
SRCS_MPLAYER-$(GGI) += libvo/vo_ggi.c
|
||||||
SRCS_MPLAYER-$(GIF) += libvo/vo_gif89a.c
|
SRCS_MPLAYER-$(GIF) += libvo/vo_gif89a.c
|
||||||
SRCS_MPLAYER-$(GL) += libvo/gl_common.c libvo/vo_gl.c \
|
SRCS_MPLAYER-$(GL) += libvo/gl_common.c libvo/vo_gl.c \
|
||||||
libvo/vo_gl2.c libvo/csputils.c
|
libvo/vo_gl2.c libvo/csputils.c \
|
||||||
|
pnm_loader.c
|
||||||
SRCS_MPLAYER-$(GL_SDL) += libvo/sdl_common.c
|
SRCS_MPLAYER-$(GL_SDL) += libvo/sdl_common.c
|
||||||
SRCS_MPLAYER-$(GL_WIN32) += libvo/w32_common.c
|
SRCS_MPLAYER-$(GL_WIN32) += libvo/w32_common.c
|
||||||
SRCS_MPLAYER-$(GL_X11) += libvo/x11_common.c
|
SRCS_MPLAYER-$(GL_X11) += libvo/x11_common.c
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#include "gl_common.h"
|
#include "gl_common.h"
|
||||||
#include "csputils.h"
|
#include "csputils.h"
|
||||||
#include "aspect.h"
|
#include "aspect.h"
|
||||||
|
#include "pnm_loader.h"
|
||||||
|
|
||||||
void (GLAPIENTRY *mpglBegin)(GLenum);
|
void (GLAPIENTRY *mpglBegin)(GLenum);
|
||||||
void (GLAPIENTRY *mpglEnd)(void);
|
void (GLAPIENTRY *mpglEnd)(void);
|
||||||
|
@ -558,66 +559,6 @@ void glCreateClearTex(GLenum target, GLenum fmt, GLenum format, GLenum type, GLi
|
||||||
free(init);
|
free(init);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief skips whitespace and comments
|
|
||||||
* \param f file to read from
|
|
||||||
*/
|
|
||||||
static void ppm_skip(FILE *f) {
|
|
||||||
int c, comment = 0;
|
|
||||||
do {
|
|
||||||
c = fgetc(f);
|
|
||||||
if (c == '#')
|
|
||||||
comment = 1;
|
|
||||||
if (c == '\n')
|
|
||||||
comment = 0;
|
|
||||||
} while (c != EOF && (isspace(c) || comment));
|
|
||||||
if (c != EOF)
|
|
||||||
ungetc(c, f);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define MAXDIM (16 * 1024)
|
|
||||||
|
|
||||||
static uint8_t *read_pnm(FILE *f, int *width, int *height,
|
|
||||||
int *bytes_per_pixel, int *maxval) {
|
|
||||||
uint8_t *data;
|
|
||||||
int type;
|
|
||||||
unsigned w, h, m, val, bpp;
|
|
||||||
*width = *height = *bytes_per_pixel = *maxval = 0;
|
|
||||||
ppm_skip(f);
|
|
||||||
if (fgetc(f) != 'P')
|
|
||||||
return NULL;
|
|
||||||
type = fgetc(f);
|
|
||||||
if (type != '5' && type != '6')
|
|
||||||
return NULL;
|
|
||||||
ppm_skip(f);
|
|
||||||
if (fscanf(f, "%u", &w) != 1)
|
|
||||||
return NULL;
|
|
||||||
ppm_skip(f);
|
|
||||||
if (fscanf(f, "%u", &h) != 1)
|
|
||||||
return NULL;
|
|
||||||
ppm_skip(f);
|
|
||||||
if (fscanf(f, "%u", &m) != 1)
|
|
||||||
return NULL;
|
|
||||||
val = fgetc(f);
|
|
||||||
if (!isspace(val))
|
|
||||||
return NULL;
|
|
||||||
if (w > MAXDIM || h > MAXDIM)
|
|
||||||
return NULL;
|
|
||||||
bpp = (m > 255) ? 2 : 1;
|
|
||||||
if (type == '6')
|
|
||||||
bpp *= 3;
|
|
||||||
data = malloc(w * h * bpp);
|
|
||||||
if (fread(data, w * bpp, h, f) != h) {
|
|
||||||
free(data);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
*width = w;
|
|
||||||
*height = h;
|
|
||||||
*bytes_per_pixel = bpp;
|
|
||||||
*maxval = m;
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief creates a texture from a PPM file
|
* \brief creates a texture from a PPM file
|
||||||
* \param target texture taget, usually GL_TEXTURE_2D
|
* \param target texture taget, usually GL_TEXTURE_2D
|
||||||
|
|
|
@ -0,0 +1,97 @@
|
||||||
|
/*
|
||||||
|
* PNM image files loader
|
||||||
|
*
|
||||||
|
* copyleft (C) 2005-2010 Reimar Döffinger <Reimar.Doeffinger@gmx.de>
|
||||||
|
*
|
||||||
|
* This file is part of MPlayer.
|
||||||
|
*
|
||||||
|
* MPlayer 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.
|
||||||
|
*
|
||||||
|
* MPlayer 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 MPlayer; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* You can alternatively redistribute this file and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \file pnm_loader.c
|
||||||
|
* \brief PNM image files loader
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include "pnm_loader.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief skips whitespace and comments
|
||||||
|
* \param f file to read from
|
||||||
|
*/
|
||||||
|
static void ppm_skip(FILE *f) {
|
||||||
|
int c, comment = 0;
|
||||||
|
do {
|
||||||
|
c = fgetc(f);
|
||||||
|
if (c == '#')
|
||||||
|
comment = 1;
|
||||||
|
if (c == '\n')
|
||||||
|
comment = 0;
|
||||||
|
} while (c != EOF && (isspace(c) || comment));
|
||||||
|
if (c != EOF)
|
||||||
|
ungetc(c, f);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MAXDIM (16 * 1024)
|
||||||
|
|
||||||
|
uint8_t *read_pnm(FILE *f, int *width, int *height,
|
||||||
|
int *bytes_per_pixel, int *maxval) {
|
||||||
|
uint8_t *data;
|
||||||
|
int type;
|
||||||
|
unsigned w, h, m, val, bpp;
|
||||||
|
*width = *height = *bytes_per_pixel = *maxval = 0;
|
||||||
|
ppm_skip(f);
|
||||||
|
if (fgetc(f) != 'P')
|
||||||
|
return NULL;
|
||||||
|
type = fgetc(f);
|
||||||
|
if (type != '5' && type != '6')
|
||||||
|
return NULL;
|
||||||
|
ppm_skip(f);
|
||||||
|
if (fscanf(f, "%u", &w) != 1)
|
||||||
|
return NULL;
|
||||||
|
ppm_skip(f);
|
||||||
|
if (fscanf(f, "%u", &h) != 1)
|
||||||
|
return NULL;
|
||||||
|
ppm_skip(f);
|
||||||
|
if (fscanf(f, "%u", &m) != 1)
|
||||||
|
return NULL;
|
||||||
|
val = fgetc(f);
|
||||||
|
if (!isspace(val))
|
||||||
|
return NULL;
|
||||||
|
if (w > MAXDIM || h > MAXDIM)
|
||||||
|
return NULL;
|
||||||
|
bpp = (m > 255) ? 2 : 1;
|
||||||
|
if (type == '6')
|
||||||
|
bpp *= 3;
|
||||||
|
data = malloc(w * h * bpp);
|
||||||
|
if (fread(data, w * bpp, h, f) != h) {
|
||||||
|
free(data);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
*width = w;
|
||||||
|
*height = h;
|
||||||
|
*bytes_per_pixel = bpp;
|
||||||
|
*maxval = m;
|
||||||
|
return data;
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
/*
|
||||||
|
* PNM image files loader
|
||||||
|
*
|
||||||
|
* This file is part of MPlayer.
|
||||||
|
*
|
||||||
|
* MPlayer 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.
|
||||||
|
*
|
||||||
|
* MPlayer 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 MPlayer; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* You can alternatively redistribute this file and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef MPLAYER_PNM_LOADER_H
|
||||||
|
#define MPLAYER_PNM_LOADER_H
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read a "portable anymap" image.
|
||||||
|
* Supports raw PGM (P5) and PNM (P6).
|
||||||
|
*
|
||||||
|
* @param[in] f input stream.
|
||||||
|
* @param[out] width width of the loaded image.
|
||||||
|
* @param[out] height height of the loaded image.
|
||||||
|
* @param[out] bytes_per_pixel format of the loaded image.
|
||||||
|
* @param[out] maxval maximum pixel value; possible values are:
|
||||||
|
* 1 for 8 bits gray,
|
||||||
|
* 2 for 16 bits gray,
|
||||||
|
* 3 for 8 bits per component RGB,
|
||||||
|
* 6 for 16 bits per component RGB.
|
||||||
|
* @return a newly allocated array of
|
||||||
|
* width*height*bytes_per_pixel bytes,
|
||||||
|
* or NULL in case of error.
|
||||||
|
*/
|
||||||
|
uint8_t *read_pnm(FILE *f, int *width, int *height,
|
||||||
|
int *bytes_per_pixel, int *maxval);
|
||||||
|
|
||||||
|
#endif /* MPLAYER_PNM_LOADER_H */
|
Loading…
Reference in New Issue