mirror of
https://github.com/mpv-player/mpv
synced 2025-01-11 17:39:38 +00:00
xanim, raw, rle added
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4970 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
15222e9be6
commit
0827d3b1a7
@ -3,7 +3,7 @@ include ../config.mak
|
||||
|
||||
LIBNAME = libmpcodecs.a
|
||||
|
||||
SRCS=dec_video.c vd.c vd_null.c vd_cinepak.c vd_qtrpza.c vd_ffmpeg.c vd_dshow.c vd_vfw.c vd_odivx.c vd_divx4.c
|
||||
SRCS=dec_video.c vd.c vd_null.c vd_cinepak.c vd_qtrpza.c vd_ffmpeg.c vd_dshow.c vd_vfw.c vd_odivx.c vd_divx4.c vd_raw.c vd_xanim.c vd_rle.c
|
||||
|
||||
OBJS=$(SRCS:.c=.o)
|
||||
|
||||
|
@ -30,6 +30,9 @@ extern vd_functions_t mpcodecs_vd_vfw;
|
||||
extern vd_functions_t mpcodecs_vd_vfwex;
|
||||
extern vd_functions_t mpcodecs_vd_odivx;
|
||||
extern vd_functions_t mpcodecs_vd_divx4;
|
||||
extern vd_functions_t mpcodecs_vd_raw;
|
||||
extern vd_functions_t mpcodecs_vd_xanim;
|
||||
extern vd_functions_t mpcodecs_vd_rle;
|
||||
|
||||
vd_functions_t* mpcodecs_vd_drivers[] = {
|
||||
&mpcodecs_vd_null,
|
||||
@ -50,6 +53,11 @@ vd_functions_t* mpcodecs_vd_drivers[] = {
|
||||
#ifdef NEW_DECORE
|
||||
&mpcodecs_vd_divx4,
|
||||
#endif
|
||||
#endif
|
||||
&mpcodecs_vd_raw,
|
||||
&mpcodecs_vd_rle,
|
||||
#ifdef USE_XANIM
|
||||
&mpcodecs_vd_xanim,
|
||||
#endif
|
||||
NULL
|
||||
};
|
||||
|
81
libmpcodecs/vd_raw.c
Normal file
81
libmpcodecs/vd_raw.c
Normal file
@ -0,0 +1,81 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "mp_msg.h"
|
||||
|
||||
#include "codec-cfg.h"
|
||||
#include "../libvo/img_format.h"
|
||||
|
||||
#include "stream.h"
|
||||
#include "demuxer.h"
|
||||
#include "stheader.h"
|
||||
|
||||
#include "vd.h"
|
||||
#include "vd_internal.h"
|
||||
|
||||
static vd_info_t info = {
|
||||
"RAW Uncompressed Video",
|
||||
"raw",
|
||||
VFM_RAW,
|
||||
"A'rpi",
|
||||
"A'rpi & Alex",
|
||||
"uncompressed"
|
||||
};
|
||||
|
||||
LIBVD_EXTERN(raw)
|
||||
|
||||
// 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)) == sh->format ) return CONTROL_TRUE;
|
||||
return CONTROL_FALSE;
|
||||
}
|
||||
return CONTROL_UNKNOWN;
|
||||
}
|
||||
|
||||
// init driver
|
||||
static int init(sh_video_t *sh){
|
||||
// set format fourcc for raw RGB:
|
||||
if(sh->format==0){
|
||||
switch(sh->bih->biBitCount){
|
||||
case 15:
|
||||
case 16: sh->format=IMGFMT_BGR15; break;
|
||||
case 24: sh->format=IMGFMT_BGR24; break;
|
||||
case 32: sh->format=IMGFMT_BGR32; break;
|
||||
default:
|
||||
mp_msg(MSGT_DECVIDEO,MSGL_WARN,"RAW: depth %d not supported\n",sh->bih->biBitCount);
|
||||
}
|
||||
}
|
||||
mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,sh->format);
|
||||
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);
|
||||
|
||||
// decode a frame
|
||||
static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
|
||||
mp_image_t* mpi;
|
||||
if(len<=0) return NULL; // skipped frame
|
||||
|
||||
mpi=mpcodecs_get_image(sh, MP_IMGTYPE_EXPORT, 0,
|
||||
sh->disp_w, sh->disp_h);
|
||||
if(!mpi) return NULL;
|
||||
|
||||
if(mpi->flags&MP_IMGFLAG_PLANAR){
|
||||
// TODO !!!
|
||||
mpi->planes[0]=data;
|
||||
mpi->stride[0]=mpi->width;
|
||||
} else {
|
||||
mpi->planes[0]=data;
|
||||
mpi->stride[0]=mpi->width*(mpi->bpp/8);
|
||||
}
|
||||
|
||||
return mpi;
|
||||
}
|
||||
|
81
libmpcodecs/vd_rle.c
Normal file
81
libmpcodecs/vd_rle.c
Normal file
@ -0,0 +1,81 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "mp_msg.h"
|
||||
|
||||
#include "codec-cfg.h"
|
||||
#include "../libvo/img_format.h"
|
||||
|
||||
#include "stream.h"
|
||||
#include "demuxer.h"
|
||||
#include "stheader.h"
|
||||
|
||||
#include "vd.h"
|
||||
#include "vd_internal.h"
|
||||
|
||||
static vd_info_t info = {
|
||||
"RLE Video decoder",
|
||||
"rle",
|
||||
VFM_RLE,
|
||||
"A'rpi",
|
||||
"XAnim rip...",
|
||||
"native codec"
|
||||
};
|
||||
|
||||
LIBVD_EXTERN(rle)
|
||||
|
||||
// to set/get/query special features/parameters
|
||||
static int control(sh_video_t *sh,int cmd,void* arg,...){
|
||||
return CONTROL_UNKNOWN;
|
||||
}
|
||||
|
||||
// init driver
|
||||
static int init(sh_video_t *sh){
|
||||
mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,IMGFMT_BGR24);
|
||||
if( (((sh->codec->outfmt[sh->outfmtidx]&255)+7)/8)==2 ){
|
||||
unsigned int* pal=(unsigned int*)(((char*)sh->bih)+40);
|
||||
int cols=(sh->bih->biSize-40)/4;
|
||||
//int cols=1<<(sh_video->bih->biBitCount);
|
||||
int i;
|
||||
if(cols>256) cols=256;
|
||||
mp_msg(MSGT_DECVIDEO,MSGL_V,"RLE: converting palette for %d colors.\n",cols);
|
||||
for(i=0;i<cols;i++){
|
||||
unsigned int c=pal[i];
|
||||
unsigned int b=c&255;
|
||||
unsigned int g=(c>>8)&255;
|
||||
unsigned int r=(c>>16)&255;
|
||||
if((sh->codec->outfmt[sh->outfmtidx]&255)==15)
|
||||
pal[i]=((r>>3)<<10)|((g>>3)<<5)|((b>>3));
|
||||
else
|
||||
pal[i]=((r>>3)<<11)|((g>>2)<<5)|((b>>3));
|
||||
}
|
||||
}
|
||||
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);
|
||||
|
||||
void AVI_Decode_RLE8(char *image,char *delta,int tdsize,
|
||||
unsigned int *map,int imagex,int imagey,unsigned char x11_bytes_pixel);
|
||||
|
||||
// decode a frame
|
||||
static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
|
||||
mp_image_t* mpi;
|
||||
if(len<=0) return NULL; // skipped frame
|
||||
|
||||
mpi=mpcodecs_get_image(sh, MP_IMGTYPE_STATIC, MP_IMGFLAG_PRESERVE,
|
||||
sh->disp_w, sh->disp_h);
|
||||
if(!mpi) return NULL;
|
||||
|
||||
AVI_Decode_RLE8(mpi->planes[0],data,len,
|
||||
(int*)(((char*)sh->bih)+40),
|
||||
sh->disp_w,sh->disp_h,((mpi->imgfmt&255)+7)/8);
|
||||
|
||||
return mpi;
|
||||
}
|
||||
|
74
libmpcodecs/vd_xanim.c
Normal file
74
libmpcodecs/vd_xanim.c
Normal file
@ -0,0 +1,74 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "config.h"
|
||||
#ifdef USE_XANIM
|
||||
|
||||
#include "mp_msg.h"
|
||||
|
||||
#include "codec-cfg.h"
|
||||
#include "../libvo/img_format.h"
|
||||
|
||||
#include "stream.h"
|
||||
#include "demuxer.h"
|
||||
#include "stheader.h"
|
||||
|
||||
#include "vd.h"
|
||||
#include "vd_internal.h"
|
||||
|
||||
static vd_info_t info = {
|
||||
"XAnim codecs",
|
||||
"xanim",
|
||||
VFM_XANIM,
|
||||
"A'rpi & Alex",
|
||||
"XAnim... TODO: name+url here",
|
||||
"binary codec plugins"
|
||||
};
|
||||
|
||||
LIBVD_EXTERN(xanim)
|
||||
|
||||
#include "xacodec.h"
|
||||
|
||||
// to set/get/query special features/parameters
|
||||
static int control(sh_video_t *sh,int cmd,void* arg,...){
|
||||
return CONTROL_UNKNOWN;
|
||||
}
|
||||
|
||||
// init driver
|
||||
static int init(sh_video_t *sh){
|
||||
mpcodecs_config_vo(sh,sh->disp_w,sh->disp_h,sh->format);
|
||||
return xacodec_init_video(sh,sh->codec->outfmt[sh->outfmtidx]);
|
||||
}
|
||||
|
||||
// uninit driver
|
||||
static void uninit(sh_video_t *sh){
|
||||
xacodec_exit();
|
||||
}
|
||||
|
||||
//mp_image_t* mpcodecs_get_image(sh_video_t *sh, int mp_imgtype, int mp_imgflag, int w, int h);
|
||||
|
||||
// decode a frame
|
||||
static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
|
||||
mp_image_t* mpi;
|
||||
xacodec_image_t* image;
|
||||
|
||||
if(len<=0) return NULL; // skipped frame
|
||||
|
||||
image=xacodec_decode_frame(data,len,(flags&3)?1:0);
|
||||
if(!image) return NULL;
|
||||
|
||||
mpi=mpcodecs_get_image(sh, MP_IMGTYPE_EXPORT, MP_IMGFLAG_PRESERVE,
|
||||
sh->disp_w, sh->disp_h);
|
||||
if(!mpi) return NULL;
|
||||
|
||||
mpi->planes[0]=image->planes[0];
|
||||
mpi->planes[1]=image->planes[1];
|
||||
mpi->planes[2]=image->planes[2];
|
||||
mpi->stride[0]=image->stride[0];
|
||||
mpi->stride[1]=image->stride[1];
|
||||
mpi->stride[2]=image->stride[2];
|
||||
|
||||
return mpi;
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user