Mercurial > mplayer.hg
changeset 7233:e70c8d96da8f
removed obsoleted dll_init.c/h
author | alex |
---|---|
date | Sun, 01 Sep 2002 18:25:05 +0000 |
parents | f83050f59e23 |
children | 9edd9060e955 |
files | Makefile dll_init.c dll_init.h |
diffstat | 3 files changed, 0 insertions(+), 659 deletions(-) [+] |
line wrap: on
line diff
--- a/Makefile Sun Sep 01 18:23:18 2002 +0000 +++ b/Makefile Sun Sep 01 18:25:05 2002 +0000 @@ -57,9 +57,6 @@ ifneq ($(W32_LIB),) PARTS += loader loader/dshow -SRCS_MPLAYER += dll_init.c -SRCS_MENCODER += dll_init.c -# SRCS += dll_init.c endif LOADER_DEP = $(W32_DEP) $(DS_DEP) LIB_LOADER = $(W32_LIB) $(DS_LIB)
--- a/dll_init.c Sun Sep 01 18:23:18 2002 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,637 +0,0 @@ - -#include "config.h" - -#include <stdio.h> -#ifdef HAVE_MALLOC_H -#include <malloc.h> -#endif -#include <stdlib.h> -#include <unistd.h> - -#include "mp_msg.h" -#include "help_mp.h" - -#include "stream.h" -#include "demuxer.h" - -#include "loader.h" -//#include "wine/mmreg.h" -#include "wine/vfw.h" -#include "wine/avifmt.h" - -#include "codec-cfg.h" -#include "stheader.h" - -#include "dll_init.h" - -#include "libvo/img_format.h" -#include "linux/shmem.h" - -extern int divx_quality; - -// ACM audio and VfW video codecs initialization -// based on the avifile library [http://divx.euro.ru] - -int init_acm_audio_codec(sh_audio_t *sh_audio){ - HRESULT ret; - WAVEFORMATEX *in_fmt=sh_audio->wf; - unsigned int srcsize=0; - - mp_msg(MSGT_WIN32,MSGL_V,"======= Win32 (ACM) AUDIO Codec init =======\n"); - - sh_audio->srcstream=NULL; - - sh_audio->o_wf.nChannels=in_fmt->nChannels; - sh_audio->o_wf.nSamplesPerSec=in_fmt->nSamplesPerSec; - sh_audio->o_wf.nAvgBytesPerSec=2*sh_audio->o_wf.nSamplesPerSec*sh_audio->o_wf.nChannels; - sh_audio->o_wf.wFormatTag=WAVE_FORMAT_PCM; - sh_audio->o_wf.nBlockAlign=2*in_fmt->nChannels; - sh_audio->o_wf.wBitsPerSample=16; -// sh_audio->o_wf.wBitsPerSample=in_fmt->wBitsPerSample; - sh_audio->o_wf.cbSize=0; - - if(verbose) { -#if 1 - printf("Input format:\n"); - printf(" wFormatTag %d\n", in_fmt->wFormatTag); - printf(" nChannels %d\n", in_fmt->nChannels); - printf(" nSamplesPerSec %ld\n", in_fmt->nSamplesPerSec); - printf(" nAvgBytesPerSec %d\n", in_fmt->nAvgBytesPerSec); - printf(" nBlockAlign %d\n", in_fmt->nBlockAlign); - printf(" wBitsPerSample %d\n", in_fmt->wBitsPerSample); - printf(" cbSize %d\n", in_fmt->cbSize); - printf("Output fmt:\n"); - printf(" wFormatTag %d\n", sh_audio->o_wf.wFormatTag); - printf(" nChannels %d\n", sh_audio->o_wf.nChannels); - printf(" nSamplesPerSec %ld\n", sh_audio->o_wf.nSamplesPerSec); - printf(" nAvgBytesPerSec %d\n", sh_audio->o_wf.nAvgBytesPerSec); - printf(" nBlockAlign %d\n", sh_audio->o_wf.nBlockAlign); - printf(" wBitsPerSample %d\n", sh_audio->o_wf.wBitsPerSample); - printf(" cbSize %d\n", sh_audio->o_wf.cbSize); -#else - printf("Input format:\n"); - print_wave_header(in_fmt); - print_wave_header(sh_audio->wf); - printf("Output fmt:\n"); - print_wave_header(&sh_audio->o_wf); - printf("\n"); -#endif - } - - - win32_codec_name = sh_audio->codec->dll; - ret=acmStreamOpen(&sh_audio->srcstream,(HACMDRIVER)NULL, - in_fmt,&sh_audio->o_wf, - NULL,0,0,0); - if(ret){ - if(ret==ACMERR_NOTPOSSIBLE) - mp_msg(MSGT_WIN32,MSGL_ERR,"ACM_Decoder: Unappropriate audio format\n"); - else - mp_msg(MSGT_WIN32,MSGL_ERR,"ACM_Decoder: acmStreamOpen error: %d", (int)ret); - sh_audio->srcstream=NULL; - return 0; - } - mp_msg(MSGT_WIN32,MSGL_V,"Audio codec opened OK! ;-)\n"); - - acmStreamSize(sh_audio->srcstream, in_fmt->nBlockAlign, &srcsize, ACM_STREAMSIZEF_SOURCE); - //if(verbose) printf("Audio ACM output buffer min. size: %ld (reported by codec)\n",srcsize); - srcsize*=2; - //if(srcsize<MAX_OUTBURST) srcsize=MAX_OUTBURST; - if(!srcsize){ - mp_msg(MSGT_WIN32,MSGL_WARN,"Warning! ACM codec reports srcsize=0\n"); - srcsize=16384; - } - // limit srcsize to 4-16kb - //while(srcsize && srcsize<4096) srcsize*=2; - //while(srcsize>16384) srcsize/=2; - sh_audio->audio_out_minsize=srcsize; // audio output min. size - mp_msg(MSGT_WIN32,MSGL_V,"Audio ACM output buffer min. size: %ld\n",srcsize); - - acmStreamSize(sh_audio->srcstream, srcsize, &srcsize, ACM_STREAMSIZEF_DESTINATION); -// if(srcsize<in_fmt->nBlockAlign) srcsize=in_fmt->nBlockAlign; - - mp_msg(MSGT_WIN32,MSGL_V,"Audio ACM input buffer min. size: %ld\n",srcsize); - - sh_audio->audio_in_minsize=2*srcsize; // audio input min. size - - return 1; -} - -int acm_decode_audio(sh_audio_t *sh_audio, void* a_buffer,int minlen,int maxlen){ - ACMSTREAMHEADER ash; - HRESULT hr; - DWORD srcsize=0; - DWORD len=minlen; - acmStreamSize(sh_audio->srcstream,len , &srcsize, ACM_STREAMSIZEF_DESTINATION); - mp_msg(MSGT_WIN32,MSGL_DBG3,"acm says: srcsize=%ld (buffsize=%d) out_size=%d\n",srcsize,sh_audio->a_in_buffer_size,len); - - if(srcsize<sh_audio->wf->nBlockAlign){ - srcsize=sh_audio->wf->nBlockAlign; - acmStreamSize(sh_audio->srcstream, srcsize, &len, ACM_STREAMSIZEF_SOURCE); - if(len>maxlen) len=maxlen; - } - -// if(srcsize==0) srcsize=((WAVEFORMATEX *)&sh_audio->o_wf_ext)->nBlockAlign; - if(srcsize>sh_audio->a_in_buffer_size) srcsize=sh_audio->a_in_buffer_size; // !!!!!! - if(sh_audio->a_in_buffer_len<srcsize){ - sh_audio->a_in_buffer_len+= - demux_read_data(sh_audio->ds,&sh_audio->a_in_buffer[sh_audio->a_in_buffer_len], - srcsize-sh_audio->a_in_buffer_len); - } - mp_msg(MSGT_WIN32,MSGL_DBG3,"acm convert %d -> %d bytes\n",sh_audio->a_in_buffer_len,len); - memset(&ash, 0, sizeof(ash)); - ash.cbStruct=sizeof(ash); - ash.fdwStatus=0; - ash.dwUser=0; - ash.pbSrc=sh_audio->a_in_buffer; - ash.cbSrcLength=sh_audio->a_in_buffer_len; - ash.pbDst=a_buffer; - ash.cbDstLength=len; - hr=acmStreamPrepareHeader(sh_audio->srcstream,&ash,0); - if(hr){ - mp_msg(MSGT_WIN32,MSGL_V,"ACM_Decoder: acmStreamPrepareHeader error %d\n",(int)hr); - return -1; - } - hr=acmStreamConvert(sh_audio->srcstream,&ash,0); - if(hr){ - mp_msg(MSGT_WIN32,MSGL_DBG2,"ACM_Decoder: acmStreamConvert error %d\n",(int)hr); - switch(hr) - { - case ACMERR_NOTPOSSIBLE: - case ACMERR_UNPREPARED: - mp_msg(MSGT_WIN32, MSGL_DBG2, "ACM_Decoder: acmStreamConvert error: probarly not initialized!\n"); - } -// return -1; - } - if(verbose>1) - mp_msg(MSGT_WIN32,MSGL_DBG2,"acm converted %d -> %d\n",ash.cbSrcLengthUsed,ash.cbDstLengthUsed); - if(ash.cbSrcLengthUsed>=sh_audio->a_in_buffer_len){ - sh_audio->a_in_buffer_len=0; - } else { - sh_audio->a_in_buffer_len-=ash.cbSrcLengthUsed; - memcpy(sh_audio->a_in_buffer,&sh_audio->a_in_buffer[ash.cbSrcLengthUsed],sh_audio->a_in_buffer_len); - } - len=ash.cbDstLengthUsed; - hr=acmStreamUnprepareHeader(sh_audio->srcstream,&ash,0); - if(hr){ - mp_msg(MSGT_WIN32,MSGL_V,"ACM_Decoder: acmStreamUnprepareHeader error %d\n",(int)hr); - } - return len; -} - -int close_acm_audio_codec(sh_audio_t *sh_audio) -{ - HRESULT ret; - - ret = acmStreamClose(sh_audio->srcstream, 0); - - if (ret) - switch(ret) - { - case ACMERR_BUSY: - case ACMERR_CANCELED: - mp_msg(MSGT_WIN32, MSGL_DBG2, "ACM_Decoder: stream busy, waiting..\n"); - sleep(100); - return(close_acm_audio_codec(sh_audio)); - case ACMERR_UNPREPARED: - case ACMERR_NOTPOSSIBLE: - return(0); - default: - mp_msg(MSGT_WIN32, MSGL_WARN, "ACM_Decoder: unknown error occured: %d\n", ret); - return(0); - } - -// MSACM_UnregisterAllDrivers(); - return(1); -} - -int init_vfw_video_codec(sh_video_t *sh_video,int ex){ - HRESULT ret; - int yuv=0; - unsigned int outfmt=sh_video->codec->outfmt[sh_video->outfmtidx]; - char *temp; - int temp_len; - int i; - - mp_msg(MSGT_WIN32,MSGL_V,"======= Win32 (VFW) VIDEO Codec init =======\n"); - - memset(&sh_video->o_bih, 0, sizeof(BITMAPINFOHEADER)); - sh_video->o_bih.biSize = sizeof(BITMAPINFOHEADER); - - win32_codec_name = sh_video->codec->dll; -// sh_video->hic = ICOpen( 0x63646976, sh_video->bih->biCompression, ICMODE_FASTDECOMPRESS); - sh_video->hic = ICOpen( 0x63646976, sh_video->bih->biCompression, ICMODE_DECOMPRESS); - if(!sh_video->hic){ - mp_msg(MSGT_WIN32,MSGL_ERR,"ICOpen failed! unknown codec / wrong parameters?\n"); - return 0; - } - -// sh_video->bih->biBitCount=32; - - temp_len = ICDecompressGetFormatSize(sh_video->hic, sh_video->bih); - - if (temp_len < sh_video->o_bih.biSize) - temp_len = sh_video->o_bih.biSize; - - temp = malloc(temp_len); - printf("ICDecompressGetFormatSize ret: %d\n", temp_len); - -#if 0 -{ - ICINFO icinfo; - ret = ICGetInfo(sh_video->hic, &icinfo, sizeof(ICINFO)); - printf("%d - %d - %d\n", ret, icinfo.dwSize, sizeof(ICINFO)); -printf("Compressor type: %.4x\n", icinfo.fccType); -printf("Compressor subtype: %.4x\n", icinfo.fccHandler); -printf("Compressor flags: %lu, version %lu, ICM version: %lu\n", - icinfo.dwFlags, icinfo.dwVersion, icinfo.dwVersionICM); -printf("Compressor name: %s\n", icinfo.szName); -printf("Compressor description: %s\n", icinfo.szDescription); - -printf("Flags:"); -if (icinfo.dwFlags & VIDCF_QUALITY) - printf(" quality"); -if (icinfo.dwFlags & VIDCF_FASTTEMPORALD) - printf(" fast-decompr"); -if (icinfo.dwFlags & VIDCF_QUALITYTIME) - printf(" temp-quality"); -printf("\n"); -} -#endif - - // Note: DivX.DLL overwrites 4 bytes _AFTER_ the o_bih header, so it corrupts - // the sh_video struct content. We call it with an 1024-byte temp space and - // then copy out the data we need: - memset(temp,0x77,temp_len); -// memcpy(temp,sh_video->bih,sizeof(BITMAPINFOHEADER)); -// sh_video->o_bih.biSize = temp_len; - - ret = ICDecompressGetFormat(sh_video->hic, sh_video->bih, temp); - if(ret < 0){ - mp_msg(MSGT_WIN32,MSGL_ERR,"ICDecompressGetFormat failed: Error %d\n", (int)ret); - for (i=0; i < temp_len; i++) mp_msg(MSGT_WIN32, MSGL_DBG2, "%02x ", temp[i]); - return 0; - } - mp_msg(MSGT_WIN32,MSGL_V,"ICDecompressGetFormat OK\n"); - - memcpy(&sh_video->o_bih,temp,sizeof(sh_video->o_bih)); - - if (temp_len > sizeof(sh_video->o_bih)) - { - mp_msg(MSGT_WIN32, MSGL_V, "Extra info in o_bih (%d bytes)!\n", - temp_len-sizeof(sh_video->o_bih)); - for(i=sizeof(sh_video->o_bih);i<temp_len;i++) mp_msg(MSGT_WIN32, MSGL_DBG2, "%02X ",temp[i]); - } - free(temp); -// printf("ICM_DECOMPRESS_QUERY=0x%X",ICM_DECOMPRESS_QUERY); - -// sh_video->o_bih.biWidth=sh_video->bih.biWidth; -// sh_video->o_bih.biCompression = 0x32315659; // mmioFOURCC('U','Y','V','Y'); -// ret=ICDecompressGetFormatSize(sh_video->hic,&sh_video->o_bih); -// sh_video->o_bih.biCompression = 3; //0x32315659; -// sh_video->o_bih.biCompression = mmioFOURCC('U','Y','V','Y'); -// sh_video->o_bih.biCompression = mmioFOURCC('U','Y','V','Y'); -// sh_video->o_bih.biCompression = mmioFOURCC('Y','U','Y','2'); -// sh_video->o_bih.biPlanes=3; -// sh_video->o_bih.biBitCount=16; - -#if 0 - // workaround for pegasus MJPEG: - if(!sh_video->o_bih.biWidth) sh_video->o_bih.biWidth=sh_video->bih->biWidth; - if(!sh_video->o_bih.biHeight) sh_video->o_bih.biHeight=sh_video->bih->biHeight; - if(!sh_video->o_bih.biPlanes) sh_video->o_bih.biPlanes=sh_video->bih->biPlanes; -#endif - - switch (outfmt) { - -/* planar format */ - case IMGFMT_YV12: - case IMGFMT_I420: - case IMGFMT_IYUV: - sh_video->o_bih.biBitCount=12; - yuv=1; - break; - case IMGFMT_YVU9: - case IMGFMT_IF09: - sh_video->o_bih.biBitCount=9; - yuv=1; - break; - -/* packed format */ - case IMGFMT_YUY2: - case IMGFMT_UYVY: - case IMGFMT_YVYU: - sh_video->o_bih.biBitCount=16; - yuv=1; - break; - -/* rgb/bgr format */ - case IMGFMT_RGB8: - case IMGFMT_BGR8: - sh_video->o_bih.biBitCount=8; - break; - - case IMGFMT_RGB15: - case IMGFMT_RGB16: - case IMGFMT_BGR15: - case IMGFMT_BGR16: - sh_video->o_bih.biBitCount=16; - break; - - case IMGFMT_RGB24: - case IMGFMT_BGR24: - sh_video->o_bih.biBitCount=24; - break; - - case IMGFMT_RGB32: - case IMGFMT_BGR32: - sh_video->o_bih.biBitCount=32; - break; - - default: - mp_msg(MSGT_WIN32,MSGL_ERR,"unsupported image format: 0x%x\n", outfmt); - return 0; - } - - sh_video->o_bih.biSizeImage = sh_video->o_bih.biWidth * sh_video->o_bih.biHeight * (sh_video->o_bih.biBitCount/8); - - if(!(sh_video->codec->outflags[sh_video->outfmtidx]&CODECS_FLAG_FLIP)) { - sh_video->o_bih.biHeight=-sh_video->bih->biHeight; // flip image! - } - - if(yuv && !(sh_video->codec->outflags[sh_video->outfmtidx] & CODECS_FLAG_YUVHACK)) - sh_video->o_bih.biCompression = outfmt; - else - sh_video->o_bih.biCompression = 0; - - if(verbose) { - printf("Starting decompression, format:\n"); - printf(" biSize %ld\n", sh_video->bih->biSize); - printf(" biWidth %ld\n", sh_video->bih->biWidth); - printf(" biHeight %ld\n", sh_video->bih->biHeight); - printf(" biPlanes %d\n", sh_video->bih->biPlanes); - printf(" biBitCount %d\n", sh_video->bih->biBitCount); - printf(" biCompression 0x%lx ('%.4s')\n", sh_video->bih->biCompression, (char *)&sh_video->bih->biCompression); - printf(" biSizeImage %ld\n", sh_video->bih->biSizeImage); - printf("Dest fmt:\n"); - printf(" biSize %ld\n", sh_video->o_bih.biSize); - printf(" biWidth %ld\n", sh_video->o_bih.biWidth); - printf(" biHeight %ld\n", sh_video->o_bih.biHeight); - printf(" biPlanes %d\n", sh_video->o_bih.biPlanes); - printf(" biBitCount %d\n", sh_video->o_bih.biBitCount); - printf(" biCompression 0x%lx ('%.4s')\n", sh_video->o_bih.biCompression, (char *)&sh_video->o_bih.biCompression); - printf(" biSizeImage %ld\n", sh_video->o_bih.biSizeImage); - } - - ret = ex ? - ICDecompressQueryEx(sh_video->hic, sh_video->bih, &sh_video->o_bih) : - ICDecompressQuery(sh_video->hic, sh_video->bih, &sh_video->o_bih); - if(ret){ - mp_msg(MSGT_WIN32,MSGL_ERR,"ICDecompressQuery failed: Error %d\n", (int)ret); -// return 0; - } else - mp_msg(MSGT_WIN32,MSGL_V,"ICDecompressQuery OK\n"); - - ret = ex ? - ICDecompressBeginEx(sh_video->hic, sh_video->bih, &sh_video->o_bih) : - ICDecompressBegin(sh_video->hic, sh_video->bih, &sh_video->o_bih); - if(ret){ - mp_msg(MSGT_WIN32,MSGL_ERR,"ICDecompressBegin failed: Error %d\n", (int)ret); -// return 0; - } - - sh_video->our_out_buffer = (char*)memalign(64,sh_video->o_bih.biSizeImage); - if(!sh_video->our_out_buffer){ - mp_msg(MSGT_WIN32,MSGL_ERR,MSGTR_NoMemForDecodedImage, sh_video->o_bih.biSizeImage); - return 0; - } - - if(yuv && sh_video->codec->outflags[sh_video->outfmtidx] & CODECS_FLAG_YUVHACK) - sh_video->o_bih.biCompression = outfmt; - -// avi_header.our_in_buffer=malloc(avi_header.video.dwSuggestedBufferSize); // FIXME!!!! - - ICSendMessage(sh_video->hic, ICM_USER+80, (long)(&divx_quality) ,NULL); - - mp_msg(MSGT_WIN32,MSGL_V,"VIDEO CODEC Init OK!!! ;-)\n"); - return 1; -} - -int vfw_set_postproc(sh_video_t* sh_video,int quality){ - // Works only with opendivx/divx4 based DLL - return ICSendMessage(sh_video->hic, ICM_USER+80, (long)(&quality) ,NULL); -} - -int vfw_decode_video(sh_video_t* sh_video,void* start,int in_size,int drop_frame,int ex){ - HRESULT ret; - - sh_video->bih->biSizeImage = in_size; - - if(ex) - ret = ICDecompressEx(sh_video->hic, - ( (sh_video->ds->flags&1) ? 0 : ICDECOMPRESS_NOTKEYFRAME ) | - ( (drop_frame==2 && !(sh_video->ds->flags&1))?(ICDECOMPRESS_HURRYUP|ICDECOMPRESS_PREROL):0 ) , - sh_video->bih, start, - &sh_video->o_bih, - drop_frame ? 0 : sh_video->our_out_buffer); - else - ret = ICDecompress(sh_video->hic, - ( (sh_video->ds->flags&1) ? 0 : ICDECOMPRESS_NOTKEYFRAME ) | - ( (drop_frame==2 && !(sh_video->ds->flags&1))?(ICDECOMPRESS_HURRYUP|ICDECOMPRESS_PREROL):0 ) , - sh_video->bih, start, - &sh_video->o_bih, - drop_frame ? 0 : sh_video->our_out_buffer); - - return (int)ret; -} - -int vfw_close_video_codec(sh_video_t *sh_video, int ex) -{ - HRESULT ret; - - ret = ICDecompressEnd(sh_video->hic); - if (ret) - { - mp_msg(MSGT_WIN32, MSGL_WARN, "ICDecompressEnd failed: %d\n", ret); - return(0); - } - - ret = ICClose(sh_video->hic); - if (ret) - { - mp_msg(MSGT_WIN32, MSGL_WARN, "ICClose failed: %d\n", ret); - return(0); - } - - return(1); -} - -/************************ VFW COMPRESSION *****************************/ - -static int encoder_hic=0; -static void* encoder_buf=NULL; -static int encoder_buf_size=0; -static int encoder_frameno=0; - -//int init_vfw_encoder(char *dll_name, BITMAPINFOHEADER *input_bih, BITMAPINFOHEADER *output_bih) -BITMAPINFOHEADER* vfw_open_encoder(char *dll_name, BITMAPINFOHEADER *input_bih,unsigned int out_fourcc) -{ - HRESULT ret; - BITMAPINFOHEADER* output_bih=NULL; - int temp_len; - -//sh_video = malloc(sizeof(sh_video_t)); - - mp_msg(MSGT_WIN32,MSGL_V,"======= Win32 (VFW) VIDEO Encoder init =======\n"); - -// memset(&sh_video->o_bih, 0, sizeof(BITMAPINFOHEADER)); -// output_bih->biSize = sizeof(BITMAPINFOHEADER); - - win32_codec_name = dll_name; - encoder_hic = ICOpen( 0x63646976, out_fourcc, ICMODE_COMPRESS); - if(!encoder_hic){ - mp_msg(MSGT_WIN32,MSGL_ERR,"ICOpen failed! unknown codec / wrong parameters?\n"); - return NULL; - } - printf("HIC: %x\n", encoder_hic); - -#if 1 -{ - ICINFO icinfo; - - ret = ICGetInfo(encoder_hic, &icinfo, sizeof(ICINFO)); - printf("%d - %d - %d\n", ret, icinfo.dwSize, sizeof(ICINFO)); -printf("Compressor type: %.4x\n", icinfo.fccType); -printf("Compressor subtype: %.4x\n", icinfo.fccHandler); -printf("Compressor flags: %lu, version %lu, ICM version: %lu\n", - icinfo.dwFlags, icinfo.dwVersion, icinfo.dwVersionICM); -//printf("Compressor name: %s\n", icinfo.szName); -//printf("Compressor description: %s\n", icinfo.szDescription); - -printf("Flags:"); -if (icinfo.dwFlags & VIDCF_QUALITY) - printf(" quality"); -if (icinfo.dwFlags & VIDCF_FASTTEMPORALD) - printf(" fast-decompr"); -if (icinfo.dwFlags & VIDCF_QUALITYTIME) - printf(" temp-quality"); -printf("\n"); -} -#endif - - temp_len = ICCompressGetFormatSize(encoder_hic, input_bih); - printf("ICCompressGetFormatSize ret: %d\n", temp_len); - - if (temp_len < sizeof(BITMAPINFOHEADER)) temp_len=sizeof(BITMAPINFOHEADER); - - output_bih = malloc(temp_len+4); - memset(output_bih,0,temp_len); - output_bih->biSize = temp_len; //sizeof(BITMAPINFOHEADER); - - return output_bih; -} - -int vfw_start_encoder(BITMAPINFOHEADER *input_bih, BITMAPINFOHEADER *output_bih){ - HRESULT ret; - int temp_len=output_bih->biSize; - int i; - - ret = ICCompressGetFormat(encoder_hic, input_bih, output_bih); - if(ret < 0){ - unsigned char* temp=(unsigned char*)output_bih; - mp_msg(MSGT_WIN32,MSGL_ERR,"ICCompressGetFormat failed: Error %d (0x%X)\n", (int)ret, (int)ret); - for (i=0; i < temp_len; i++) mp_msg(MSGT_WIN32, MSGL_DBG2, "%02x ", temp[i]); - return 0; - } - mp_msg(MSGT_WIN32,MSGL_V,"ICCompressGetFormat OK\n"); - - if (temp_len > sizeof(BITMAPINFOHEADER)) - { - unsigned char* temp=(unsigned char*)output_bih; - mp_msg(MSGT_WIN32, MSGL_V, "Extra info in o_bih (%d bytes)!\n", - temp_len-sizeof(BITMAPINFOHEADER)); - for(i=sizeof(output_bih);i<temp_len;i++) mp_msg(MSGT_WIN32, MSGL_DBG2, "%02X ",temp[i]); - } - -// if(verbose) { - printf("Starting compression:\n"); - printf(" Input format:\n"); - printf(" biSize %ld\n", input_bih->biSize); - printf(" biWidth %ld\n", input_bih->biWidth); - printf(" biHeight %ld\n", input_bih->biHeight); - printf(" biPlanes %d\n", input_bih->biPlanes); - printf(" biBitCount %d\n", input_bih->biBitCount); - printf(" biCompression 0x%lx ('%.4s')\n", input_bih->biCompression, (char *)&input_bih->biCompression); - printf(" biSizeImage %ld\n", input_bih->biSizeImage); - printf(" Output format:\n"); - printf(" biSize %ld\n", output_bih->biSize); - printf(" biWidth %ld\n", output_bih->biWidth); - printf(" biHeight %ld\n", output_bih->biHeight); - printf(" biPlanes %d\n", output_bih->biPlanes); - printf(" biBitCount %d\n", output_bih->biBitCount); - printf(" biCompression 0x%lx ('%.4s')\n", output_bih->biCompression, (char *)&output_bih->biCompression); - printf(" biSizeImage %ld\n", output_bih->biSizeImage); -// } - - output_bih->biWidth=input_bih->biWidth; - output_bih->biHeight=input_bih->biHeight; - - ret = ICCompressQuery(encoder_hic, input_bih, output_bih); - if(ret){ - mp_msg(MSGT_WIN32,MSGL_ERR,"ICCompressQuery failed: Error %d\n", (int)ret); - return 0; - } else - mp_msg(MSGT_WIN32,MSGL_V,"ICCompressQuery OK\n"); - - ret = ICCompressBegin(encoder_hic, input_bih, output_bih); - if(ret){ - mp_msg(MSGT_WIN32,MSGL_ERR,"ICCompressBegin failed: Error %d\n", (int)ret); -// return 0; - } else - mp_msg(MSGT_WIN32,MSGL_V,"ICCompressBegin OK\n"); - - printf(" Output format after query/begin:\n"); - printf(" biSize %ld\n", output_bih->biSize); - printf(" biWidth %ld\n", output_bih->biWidth); - printf(" biHeight %ld\n", output_bih->biHeight); - printf(" biPlanes %d\n", output_bih->biPlanes); - printf(" biBitCount %d\n", output_bih->biBitCount); - printf(" biCompression 0x%lx ('%.4s')\n", output_bih->biCompression, (char *)&output_bih->biCompression); - printf(" biSizeImage %ld\n", output_bih->biSizeImage); - - encoder_buf_size=input_bih->biSizeImage; - encoder_buf=malloc(encoder_buf_size); - encoder_frameno=0; - - mp_msg(MSGT_WIN32,MSGL_V,"VIDEO CODEC Init OK!!! ;-)\n"); - return 1; -} - -int vfw_encode_frame(BITMAPINFOHEADER* biOutput,void* OutBuf, - BITMAPINFOHEADER* biInput,void* Image, - long* keyframe, int quality){ - HRESULT ret; - -//long VFWAPIV ICCompress( -// HIC hic,long dwFlags,LPBITMAPINFOHEADER lpbiOutput,void* lpOutputBuf, -// LPBITMAPINFOHEADER lpbiInput,void* lpImage,long* lpckid, -// long* lpdwFlags,long lFrameNum,long dwFrameSize,long dwQuality, -// LPBITMAPINFOHEADER lpbiInputPrev,void* lpImagePrev -//); - -// printf("vfw_encode_frame(%p,%p, %p,%p, %p,%d)\n",biOutput,OutBuf,biInput,Image,keyframe,quality); - - ret=ICCompress(encoder_hic, 0, - biOutput, OutBuf, - biInput, Image, - NULL, keyframe, encoder_frameno, 0, quality, - biInput, encoder_buf); - -// printf("ok. size=%d\n",biOutput->biSizeImage); - - memcpy(encoder_buf,Image,encoder_buf_size); - ++encoder_frameno; - - return (int)ret; -} -
--- a/dll_init.h Sun Sep 01 18:23:18 2002 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ - -// Win32 VfW/ACM interface: - -extern char* win32_codec_name; // must be set before calling DrvOpen() !!! - -int init_acm_audio_codec(sh_audio_t *sh_audio); -int close_acm_audio_codec(sh_audio_t *sh_audio); -int acm_decode_audio(sh_audio_t *sh_audio, void* a_buffer,int minlen,int maxlen); - -int init_vfw_video_codec(sh_video_t *sh_video,int ex); -int vfw_close_video_codec(sh_video_t *sh_video, int ex); -int vfw_decode_video(sh_video_t* sh_video,void* start,int in_size,int drop_frame,int ex); -int vfw_set_postproc(sh_video_t* sh_video,int quality); - -BITMAPINFOHEADER* vfw_open_encoder(char *dll_name, BITMAPINFOHEADER *input_bih,unsigned int out_fourcc); -int vfw_start_encoder(BITMAPINFOHEADER *input_bih, BITMAPINFOHEADER *output_bih); -int vfw_encode_frame(BITMAPINFOHEADER* biOutput,void* OutBuf, - BITMAPINFOHEADER* biInput,void* Image, - long* keyframe, int quality);