mirror of
https://github.com/mpv-player/mpv
synced 2024-12-22 06:42:03 +00:00
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-$(GIF) += libvo/vo_gif89a.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_WIN32) += libvo/w32_common.c
|
||||
SRCS_MPLAYER-$(GL_X11) += libvo/x11_common.c
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include "gl_common.h"
|
||||
#include "csputils.h"
|
||||
#include "aspect.h"
|
||||
#include "pnm_loader.h"
|
||||
|
||||
void (GLAPIENTRY *mpglBegin)(GLenum);
|
||||
void (GLAPIENTRY *mpglEnd)(void);
|
||||
@ -558,66 +559,6 @@ void glCreateClearTex(GLenum target, GLenum fmt, GLenum format, GLenum type, GLi
|
||||
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
|
||||
* \param target texture taget, usually GL_TEXTURE_2D
|
||||
|
97
pnm_loader.c
Normal file
97
pnm_loader.c
Normal file
@ -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;
|
||||
}
|
52
pnm_loader.h
Normal file
52
pnm_loader.h
Normal file
@ -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
Block a user