summaryrefslogtreecommitdiffstats
path: root/libmpcodecs/vd_mpng.c
diff options
context:
space:
mode:
Diffstat (limited to 'libmpcodecs/vd_mpng.c')
-rw-r--r--libmpcodecs/vd_mpng.c182
1 files changed, 0 insertions, 182 deletions
diff --git a/libmpcodecs/vd_mpng.c b/libmpcodecs/vd_mpng.c
deleted file mode 100644
index c430566c70..0000000000
--- a/libmpcodecs/vd_mpng.c
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * 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.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "config.h"
-#include "mp_msg.h"
-
-#include <png.h>
-
-#include "libavutil/common.h"
-#include "mpbswap.h"
-#include "libvo/fastmemcpy.h"
-
-#include "vd_internal.h"
-
-static const vd_info_t info = {
- "PNG Images decoder",
- "mpng",
- "A'rpi",
- ".so, based on mpng.c",
- "uses libpng, 8bpp modes not supported yet"
-};
-
-LIBVD_EXTERN(mpng)
-
-static unsigned int out_fmt=0;
-
-static int last_w=-1;
-static int last_h=-1;
-static int last_c=-1;
-
-// to set/get/query special features/parameters
-static int control(sh_video_t *sh,int cmd,void* arg,...){
- switch (cmd)
- {
- case VDCTRL_QUERY_FORMAT:
- if (*((int *) arg) == out_fmt) return CONTROL_TRUE;
- return CONTROL_FALSE;
- }
- return CONTROL_UNKNOWN;
-}
-
-// init driver
-static int init(sh_video_t *sh){
- last_w=-1;
- return 1;
-}
-
-// uninit driver
-static void uninit(sh_video_t *sh){
-}
-
-//mp_image_t* mpcodecs_get_image(sh_video_t *sh, int mp_imgtype, int mp_imgflag, int w, int h);
-
-static int pngPointer;
-static int pngLength;
-
-static void pngReadFN( png_structp pngstr,png_bytep buffer,png_size_t size )
-{
- char * p = png_get_io_ptr(pngstr);
- if(size>pngLength-pngPointer && pngLength>=pngPointer) size=pngLength-pngPointer;
- fast_memcpy( buffer,(char *)&p[pngPointer],size );
- pngPointer+=size;
-}
-
-// decode a frame
-static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
- png_structp png;
- png_infop info;
- png_infop endinfo;
-// png_bytep data;
- png_bytep * row_p;
- png_uint_32 png_width=0,png_height=0;
- int depth,color;
- png_uint_32 i;
- png_byte color_type;
- mp_image_t* mpi;
-
- int cols;
- png_colorp pal;
- unsigned char *p;
-
- if(len<=0) return NULL; // skipped frame
-
- png=png_create_read_struct( PNG_LIBPNG_VER_STRING,NULL,NULL,NULL );
- info=png_create_info_struct( png );
- endinfo=png_create_info_struct( png );
-
- pngPointer=8;
- pngLength=len;
- png_set_read_fn( png,data,pngReadFN );
- png_set_strip_16( png );
- png_set_sig_bytes( png,8 );
- png_read_info( png,info );
- png_get_IHDR( png,info,&png_width,&png_height,&depth,&color,NULL,NULL,NULL );
- png_set_bgr( png );
-
- color_type=png_get_color_type(png, info);
-
- switch( color_type ) {
- case PNG_COLOR_TYPE_GRAY_ALPHA:
- mp_msg( MSGT_DECVIDEO,MSGL_INFO,"Sorry gray scaled png with alpha channel not supported at moment.\n" );
- break;
- case PNG_COLOR_TYPE_GRAY:
- out_fmt=IMGFMT_Y800;
- break;
- case PNG_COLOR_TYPE_PALETTE:
- out_fmt=IMGFMT_BGR8;
- break;
- case PNG_COLOR_TYPE_RGB_ALPHA:
- out_fmt=IMGFMT_BGR32;
- break;
- case PNG_COLOR_TYPE_RGB:
- out_fmt=IMGFMT_BGR24;
- break;
- default:
- mp_msg( MSGT_DECVIDEO,MSGL_INFO,"Sorry, unsupported PNG colorspace: %d.\n" ,color_type);
- }
-
- // (re)init libvo if image parameters changed (width/height/colorspace)
- if(last_w!=png_width || last_h!=png_height || last_c!=out_fmt){
- last_w=png_width; last_h=png_height; last_c=out_fmt;
- if(!out_fmt) return NULL;
- if(!mpcodecs_config_vo(sh,png_width,png_height,out_fmt)) return NULL;
- }
-
-#if 0
- switch( info->color_type )
- {
- case PNG_COLOR_TYPE_GRAY_ALPHA: printf( "[png] used GrayA -> stripping alpha channel\n" ); break;
- case PNG_COLOR_TYPE_GRAY: printf( "[png] used Gray -> rgb\n" ); break;
- case PNG_COLOR_TYPE_PALETTE: printf( "[png] used palette -> rgb\n" ); break;
- case PNG_COLOR_TYPE_RGB_ALPHA: printf( "[png] used RGBA -> stripping alpha channel\n" ); break;
- case PNG_COLOR_TYPE_RGB: printf( "[png] read rgb datas.\n" ); break;
- }
-#endif
-
- mpi=mpcodecs_get_image(sh, MP_IMGTYPE_TEMP, MP_IMGFLAG_ACCEPT_STRIDE,
- png_width,png_height);
- if(!mpi) return NULL;
-
-// Let's DECODE!
- row_p=malloc( sizeof( png_bytep ) * png_height );
-//png_get_rowbytes( png,info )
- for ( i=0; i < png_height; i++ ) row_p[i]=mpi->planes[0] + mpi->stride[0]*i;
- png_read_image( png,row_p );
- free( row_p );
-
- if (out_fmt==IMGFMT_BGR8) {
- png_get_PLTE( png,info,&pal,&cols );
- mpi->planes[1] = realloc(mpi->planes[1], 4*cols);
- p = mpi->planes[1];
- for (i = 0; i < cols; i++) {
- *p++ = pal[i].blue;
- *p++ = pal[i].green;
- *p++ = pal[i].red;
- *p++ = 0;
- }
- }
-
- png_read_end( png,endinfo );
- png_destroy_read_struct( &png,&info,&endinfo );
-
- return mpi;
-}