[Mplayerxp-cvslog] CVS: mplayerxp/mplayerxp/libmpcodecs ad_ffmp3.c,1.8,1.9 vd_ffmpeg.c,1.15,1.16
Brought to you by:
olov
From: Nick K. <nic...@us...> - 2002-10-31 17:25:29
|
Update of /cvsroot/mplayerxp/mplayerxp/mplayerxp/libmpcodecs In directory usw-pr-cvs1:/tmp/cvs-serv447 Modified Files: ad_ffmp3.c vd_ffmpeg.c Log Message: phase #1 of wma support through libavcodec Index: ad_ffmp3.c =================================================================== RCS file: /cvsroot/mplayerxp/mplayerxp/mplayerxp/libmpcodecs/ad_ffmp3.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- ad_ffmp3.c 13 Jun 2002 17:58:49 -0000 1.8 +++ ad_ffmp3.c 31 Oct 2002 17:25:26 -0000 1.9 @@ -14,7 +14,7 @@ static AVCodec *lavc_codec=NULL; -static AVCodecContext lavc_context; +static AVCodecContext *lavc_context; static int acodec_inited; static ad_info_t info = @@ -37,7 +37,7 @@ int (*avcodec_decode_audio_ptr)(AVCodecContext *avctx, INT16 *samples, int *frame_size_ptr, UINT8 *buf, int buf_size); - +AVCodecContext* (*avcodec_alloc_context_ptr)(void); static void *dll_handle; static int load_dll(const char *libname) @@ -48,23 +48,24 @@ avcodec_build_ptr = dlsym(dll_handle,"avcodec_build"); avcodec_register_all_ptr = dlsym(dll_handle,"avcodec_register_all"); avcodec_find_decoder_by_name_ptr = dlsym(dll_handle,"avcodec_find_decoder_by_name"); + avcodec_alloc_context_ptr = dlsym(dll_handle,"avcodec_alloc_context"); avcodec_open_ptr = dlsym(dll_handle,"avcodec_open"); avcodec_close_ptr = dlsym(dll_handle,"avcodec_close"); avcodec_decode_audio_ptr = dlsym(dll_handle,"avcodec_decode_audio"); return avcodec_init_ptr && avcodec_register_all_ptr && avcodec_find_decoder_by_name_ptr && avcodec_open_ptr && avcodec_close_ptr && avcodec_decode_audio_ptr - && avcodec_version_ptr && avcodec_build_ptr; + && avcodec_version_ptr && avcodec_build_ptr && avcodec_alloc_context_ptr; } #define MIN_LIBAVCODEC_VERSION_INT 0x000406 -#define MIN_LIBAVCODEC_BUILD 4613 +#define MIN_LIBAVCODEC_BUILD 4632 int preinit(sh_audio_t *sh) { unsigned avc_version,avc_build; sh->audio_out_minsize=AVCODEC_MAX_AUDIO_FRAME_SIZE; - if(!load_dll("libffmpeg-0.4.6.so")) - if(!load_dll("libffmpeg.so")) + if(!load_dll("libavcodec-0.4.6.so")) + if(!load_dll("libavcodec.so")) { MSG_ERR("Detected error during loading libffmpeg.so! Try to upgrade this codec\n"); return 0; @@ -78,6 +79,7 @@ avc_version,avc_build,MIN_LIBAVCODEC_VERSION_INT,MIN_LIBAVCODEC_BUILD); return 0; } + sh->audio_out_minsize=AVCODEC_MAX_AUDIO_FRAME_SIZE; return 1; } @@ -95,9 +97,23 @@ MSG_ERR(MSGTR_MissingLAVCcodec,sh_audio->codec->dll_name); return 0; } - memset(&lavc_context, 0, sizeof(lavc_context)); + lavc_context = (*avcodec_alloc_context_ptr)(); + sh_audio->context = lavc_context; + lavc_context->channels = sh_audio->wf->nChannels; + lavc_context->sample_rate = sh_audio->wf->nSamplesPerSec; + lavc_context->bit_rate = sh_audio->wf->nAvgBytesPerSec * 8; + lavc_context->fourcc = sh_audio->format; + lavc_context->block_align = sh_audio->wf->nBlockAlign; + lavc_context->codec_id = lavc_codec->id; + /* alloc extra data */ + if (sh_audio->wf->cbSize > 0) { + lavc_context->extradata = malloc(sh_audio->wf->cbSize); + lavc_context->extradata_size = sh_audio->wf->cbSize; + memcpy(lavc_context->extradata, (char *)sh_audio->wf + sizeof(WAVEFORMATEX), + lavc_context->extradata_size); + } /* open it */ - if ((*avcodec_open_ptr)(&lavc_context, lavc_codec) < 0) { + if ((*avcodec_open_ptr)(lavc_context, lavc_codec) < 0) { MSG_ERR( MSGTR_CantOpenCodec); return 0; } @@ -108,9 +124,9 @@ if(x>0) sh_audio->a_buffer_len=x; #if 1 - sh_audio->channels=lavc_context.channels; - sh_audio->samplerate=lavc_context.sample_rate; - sh_audio->i_bps=lavc_context.bit_rate/8; + sh_audio->channels=lavc_context->channels; + sh_audio->samplerate=lavc_context->sample_rate; + sh_audio->i_bps=lavc_context->bit_rate/8; #else sh_audio->channels=sh_audio->wf->nChannels; sh_audio->samplerate=sh_audio->wf->nSamplesPerSec; @@ -121,8 +137,10 @@ void uninit(sh_audio_t *sh) { - (*avcodec_close_ptr)(&lavc_context); + (*avcodec_close_ptr)(lavc_context); dlclose(dll_handle); + if (lavc_context->extradata) free(lavc_context->extradata); + free(lavc_context); acodec_inited=0; } @@ -139,7 +157,7 @@ int len2=0; int x=ds_get_packet(sh_audio->ds,&start); if(x<=0) break; // error - y=(*avcodec_decode_audio_ptr)(&lavc_context,(INT16*)buf,&len2,start,x); + y=(*avcodec_decode_audio_ptr)(sh_audio->context,(INT16*)buf,&len2,start,x); if(y<0){ MSG_V("lavc_audio: error\n");break; } if(y<x) sh_audio->ds->buffer_pos+=y-x; // put back data (HACK!) if(len2>0){ Index: vd_ffmpeg.c =================================================================== RCS file: /cvsroot/mplayerxp/mplayerxp/mplayerxp/libmpcodecs/vd_ffmpeg.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- vd_ffmpeg.c 25 Jul 2002 15:54:34 -0000 1.15 +++ vd_ffmpeg.c 31 Oct 2002 17:25:26 -0000 1.16 @@ -58,6 +58,7 @@ int (*avcodec_decode_video_ptr)(AVCodecContext *avctx, AVPicture *picture, int *got_picture_ptr, UINT8 *buf, int buf_size); +AVCodecContext* (*avcodec_alloc_context_ptr)(void); static void *dll_handle; @@ -72,13 +73,14 @@ avcodec_open_ptr = dlsym(dll_handle,"avcodec_open"); avcodec_close_ptr = dlsym(dll_handle,"avcodec_close"); avcodec_decode_video_ptr = dlsym(dll_handle,"avcodec_decode_video"); + avcodec_alloc_context_ptr = dlsym(dll_handle,"avcodec_alloc_context"); return avcodec_version_ptr && avcodec_init_ptr && avcodec_register_all_ptr && avcodec_find_decoder_by_name_ptr && avcodec_open_ptr && avcodec_close_ptr && - avcodec_decode_video_ptr && avcodec_build_ptr; + avcodec_decode_video_ptr && avcodec_build_ptr && avcodec_alloc_context_ptr; } #define MIN_LIBAVCODEC_VERSION_INT 0x000406 -#define MIN_LIBAVCODEC_BUILD 4613 +#define MIN_LIBAVCODEC_BUILD 4632 #ifdef ENABLE_DR1 static void get_buffer(struct AVCodecContext *avctx, int width, int height, int pict_type){ @@ -152,8 +154,7 @@ return 0; } - ctx = sh->context = malloc(sizeof(AVCodecContext)); - memset(ctx, 0, sizeof(AVCodecContext)); + ctx = sh->context = (*avcodec_alloc_context_ptr)(); ctx->width = sh->disp_w; ctx->height= sh->disp_h; |