[evidence-CVS] evidence/src/thumbnailer/mpeg3 mpeg3.c,1.3,1.4
Status: Alpha
Brought to you by:
azundris
From: <azu...@us...> - 2004-06-16 11:07:34
|
Update of /cvsroot/evidence/evidence/src/thumbnailer/mpeg3 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20134/src/thumbnailer/mpeg3 Modified Files: mpeg3.c Log Message: * thumbnailer: modular Index: mpeg3.c =================================================================== RCS file: /cvsroot/evidence/evidence/src/thumbnailer/mpeg3/mpeg3.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** mpeg3.c 15 Jun 2004 19:14:25 -0000 1.3 --- mpeg3.c 16 Jun 2004 11:07:10 -0000 1.4 *************** *** 3,10 **** */ #include "debug.h" #include "errors.h" ! #include "../thumbnail.h" --- 3,148 ---- */ + #include "config.h" #include "debug.h" #include "errors.h" ! #include "../thumbnail_private.h" ! ! #include <stdlib.h> /* malloc(), free() */ ! #include <libmpeg3.h> ! ! ! ! /*****************************************************************************/ ! ! /** ! * thumbnail an MPEG (using libmpeg3). ! * ! * called from thumbnail_generate() only. ! * @return an error-code ! * @param e - the thumbnail struct ! */ ! static inline Imlib_Image evidence_thumb_mpeg3_image_preview(Evidence_Thumb *e) { ! int ret=NOIR_IGNORED; ! mpeg3_t *mpg=NULL; ! unsigned char *dst=NULL,**rows=NULL,*sp,*dp; ! DATA32 *ip; ! int sx=0,sy=0, ! sw,sh, ! dw,dh, ! x,y,i; ! int stream=0; ! char *p,*tmp=NULL; ! Imlib_Image img=NULL; ! ! if(!(p=evidence_thumbnail_path(e->size,e->hashedname,EXT_PNG))) { ! ret=NOIR_OOM; ! goto done; } ! ! if(e->thumbfile) ! free(e->thumbfile); ! e->thumbfile=p; ! ! if(!(tmp=evidence_get_tmpname(p,EXT_JPG))) { ! ret=NOIR_OOM; ! goto done; } ! ! if(!(mpeg3_check_sig(e->origfile))) { ! ret=NOIR_TYPEMISMATCH; ! goto done; } ! ! if(!(mpg=mpeg3_open(e->origfile))) { ! ret=NOIR_FAIL; ! goto done; } ! ! mpeg3_set_mmx(mpg,0); ! mpeg3_set_cpus(mpg,1); ! ! if(!mpeg3_has_video(mpg)) { ! ret=NOIR_NODATA; ! goto done; } ! ! dw=sw=mpeg3_video_width(mpg, stream); ! dh=sh=mpeg3_video_height(mpg,stream); ! if(!sw||!sh) { ! ret=NOIR_NODATA; ! goto done; } ! ! E(3,"detected mpeg3 %dx%d, ratio %2.2f, rate %3.2f in \"%s\"\n",sw,sh, ! mpeg3_aspect_ratio(mpg,stream), ! mpeg3_frame_rate(mpg,stream), ! e->origfile); ! ! if(!(dst=malloc(sw*sh*3+4))||!(rows=malloc(sh*sizeof(unsigned char *)))) { ! ret=NOIR_OOM; ! goto done; } ! ! for(y=0;y<sh;y++) ! rows[y]=&dst[y*sw*3]; ! ! mpeg3_seek_percentage(mpg,0.21); ! ! for(i=0;i<16;i++) { ! if(mpeg3_read_frame(mpg,rows,sx,sy,sw,sh,sw,sh,MPEG3_RGB888,stream)) { ! if(i) ! break; ! E(0,"error reading \"%s\"...\n",e->origfile); ! ret=NOIR_FAIL; ! goto done; }} ! ! if(!(img=imlib_create_image(dw,dh))) { ! ret=NOIR_OOM; ! goto done; } ! ! imlib_context_set_image(img); ! if(!(ip=imlib_image_get_data())) { ! E(0,"couldn't get imlib2 data!?\n"); ! ret=NOIR_FAIL; ! goto done; } ! ! sp=(unsigned char *)dst; ! dp=(unsigned char *)ip; ! ! for(y=0;y<dh;y++) { ! for(x=0;x<dw;x++) { ! # ifdef FONTTHUMB_TRANSLUCENT ! dp[3]=239; /* alpha */ ! # else ! dp[3]=255; /* alpha */ ! # endif ! dp[2]=sp[0]; /* red */ ! dp[1]=sp[1]; /* green */ ! dp[0]=sp[2]; /* blue */ ! sp+=3; ! dp+=4; }} ! ! imlib_image_put_back_data(ip); ! imlib_image_set_has_alpha(1); ! ! if((img=evidence_thumb_imlib_standardize(e))) ! ret=NOIR_SUCC; ! ! ! done: ! mpeg3_close(mpg); ! ! if(dst) ! free(dst); ! if(rows) ! free(rows); ! ! if(tmp) ! free(tmp); ! ! if(ret!=NOIR_SUCC) ! E(0,"failed to thumbnail \"%s\": #%d\n",e->origfile,ret); ! ! return img; } ! ! ! ! ! ! /*****************************************************************************/ *************** *** 17,21 **** int thumbnail_plugin_init(thumbnail_plugin *tp) { thumbnailer_register_mime(tp,"video/mpeg"); ! return (TP_IMAGE|TP_VIDEO); } --- 155,159 ---- int thumbnail_plugin_init(thumbnail_plugin *tp) { thumbnailer_register_mime(tp,"video/mpeg"); ! return (TP_IMAGE|TP_IMLIB|TP_VIDEO); } *************** *** 36,42 **** * @param tp an opaque thumbnailer-plugin struct * @param e the struct describing the thumbnail * @param what what is to be created (if the thumbnailer has more than one capability) */ ! int thumbnail_plugin_make(thumbnail_plugin *tp,Evidence_Thumb *e,thumbnailer_capabilities what) { ! return NOIR_IGNORED; ! } --- 174,195 ---- * @param tp an opaque thumbnailer-plugin struct * @param e the struct describing the thumbnail + * @param data the imlib-image (if TP_IMLIB) + */ + int thumbnail_plugin_make(thumbnail_plugin *tp,Evidence_Thumb *e,void **data) { + return NOIR_IGNORED; } + + + + /** + * create a live thumbnail + * @return an error-code + * @param tp an opaque thumbnailer-plugin struct + * @param e the struct describing the thumbnail * @param what what is to be created (if the thumbnailer has more than one capability) */ ! int thumbnail_plugin_live(thumbnail_plugin *tp,Evidence_Thumb *e,thumbnailer_capabilities what) { ! return NOIR_IGNORED; } ! ! ! ! /*****************************************************************************/ |