diff -uNr xawdecode/src/divx.c xawdecode-new/src/divx.c --- xawdecode/src/divx.c 2007-09-10 23:13:34 +0400 +++ xawdecode-new/src/divx.c 2007-09-10 23:05:36 +0400 @@ -1,7 +1,7 @@ /***************************************************************************** * divx.c: DivX recording ***************************************************************************** - * $Id: divx.c,v 1.205 2007/05/01 17:59:00 alainjj Exp $ + * $Id: divx.c,v 1.214 2007/07/20 17:22:31 pingus77 Exp $ ***************************************************************************** * Copyright (C) 2001 Keuleu * @@ -135,7 +135,9 @@ 0, // stream 63427, // http_port 0, // maxsize, in Mb +#ifdef HAVE_LAME 1, // correctdelaylame +#endif }; #ifdef HAVE_FFMPEG @@ -358,12 +360,12 @@ {-1,NULL} }; +#ifdef HAVE_FFMPEG static char *av_buffer = NULL, *av_buffer0 = NULL; static int av_buffer_size = 0, av_buffer0_l; - -#ifdef HAVE_FFMPEG static AVCodec *av_codec = NULL; AVCodecContext *audio_codec_context = NULL; + int xdtv_to_audioffmpeg(int x) { switch(x) { case FFMPEG_MP2: return CODEC_ID_MP2; @@ -850,7 +852,7 @@ char * get_filename(void) { char *filename=NULL; - char begin_name[256]; + char begin_name[sizeof(wchar_t)*256]; struct stat buf; char *divx_file; update_divxfilename(); @@ -1193,6 +1195,7 @@ #ifdef HAVE_FFMPEG else if(xdtv_to_ffmpeg(divx.codec)!=-1) { avcodec_init(); + avcodec_register_all(); #if LIBAVCODEC_BUILD <= 4759 sprintf(xawmesstmp, translate("divx_init: initializing %s version %d (build %d)\n"), codec_name, avcodec_version(), avcodec_build()); #else @@ -1202,70 +1205,7 @@ sprintf(xawmesstmp, translate("divx_init: initializing %s - build %i.%i.%i\n"), codec_name, A_div.quot, B_div.quot, B_div.rem);} #endif strcat(xawmessage,xawmesstmp); - switch(divx.codec) { -#ifdef HAVE_FFMPEG_XVID -#if LIBAVCODEC_BUILD >= 4719 - case FFMPEG_XVID: register_avcodec(&xvid_encoder); break; -#endif -#endif - case FFMPEG_MPEG4: register_avcodec(&mpeg4_encoder); break; - case FFMPEG_MPEG1: register_avcodec(&mpeg1video_encoder); break; -#if LIBAVCODEC_BUILD >= 4676 - case FFMPEG_MPEG2: register_avcodec(&mpeg2video_encoder); break; -#endif - case FFMPEG_MJPEG: register_avcodec(&mjpeg_encoder); break; -#if LIBAVCODEC_BUILD >= 4670 - case FFMPEG_LJPEG: register_avcodec(&ljpeg_encoder); break; - case FFMPEG_FLV1: register_avcodec(&flv_encoder); break; -#endif -#if LIBAVCODEC_BUILD >= 4735 - case FFMPEG_RV20: register_avcodec(&rv20_encoder); break; -#endif - case FFMPEG_RV10: register_avcodec(&rv10_encoder); break; -#ifdef HAVE_FFMPEG_X264 -#if LIBAVCODEC_BUILD >= 4748 - case FFMPEG_X264: register_avcodec(&x264_encoder); break; -#endif -#endif - case FFMPEG_H263P: register_avcodec(&h263p_encoder); break; - case FFMPEG_H263: register_avcodec(&h263_encoder); break; -#if LIBAVCODEC_BUILD >= 4729 - case FFMPEG_H261: register_avcodec(&h261_encoder); break; -#endif - case FFMPEG_MSMPEG4V3: register_avcodec(&msmpeg4v3_encoder); break; - case FFMPEG_MSMPEG4V2: register_avcodec(&msmpeg4v2_encoder); break; -/* Already implemented into the 0.4.6 version but only work correctly with the 0.4.7 version */ -#if LIBAVCODEC_BUILD >= 4675 - case FFMPEG_WMV2: register_avcodec(&wmv2_encoder); break; -#endif - case FFMPEG_WMV1: register_avcodec(&wmv1_encoder); break; -#if LIBAVCODEC_BUILD >= 4677 - case FFMPEG_ASV2: register_avcodec(&asv2_encoder); break; -#endif -#if LIBAVCODEC_BUILD >= 4668 - case FFMPEG_ASV1: register_avcodec(&asv1_encoder); break; -#endif -/* appeared with the 4719 version but don't work correctly actually */ -#if LIBAVCODEC_BUILD >= 16777215 - case FFMPEG_SVQ1: register_avcodec(&svq1_encoder); break; -#endif -/* appeared with the 4669 version -but only work correctly with the 4755 version */ -#if LIBAVCODEC_BUILD >= 4755 - case FFMPEG_FFV1: register_avcodec(&ffv1_encoder); break; -#endif -#if LIBAVCODEC_BUILD >= 4719 - case FFMPEG_SNOW: register_avcodec(&snow_encoder); break; -#endif - -#if LIBAVCODEC_BUILD >= 4734 - case FFMPEG_FFVHUFF: register_avcodec(&ffvhuff_encoder); break; -#endif - case FFMPEG_HUFFYUV: register_avcodec(&huffyuv_encoder); break; -#if LIBAVCODEC_BUILD >= 4707 - case FFMPEG_DVVIDEO: register_avcodec(&dvvideo_encoder); break; -#endif - } + codec = avcodec_find_encoder(xdtv_to_ffmpeg(divx.codec)); if (codec == NULL) { @@ -2094,30 +2034,24 @@ return; } avcodec_init(); + avcodec_register_all(); + + if (audio_codec_context == NULL) + audio_codec_context = avcodec_alloc_context(); + audio_codec_context->codec_id = xdtv_to_audioffmpeg(divx.audio_codec); + audio_codec_context->codec_type= CODEC_TYPE_AUDIO; switch(divx.audio_codec) { - case FFMPEG_MP2: register_avcodec(&mp2_encoder); break; -#ifdef HAVE_FFMPEG_MP3 - case FFMPEG_MP3: register_avcodec(&mp3lame_encoder); break; -#endif -#ifdef HAVE_FFMPEG_AC3 - case FFMPEG_AC3: register_avcodec(&ac3_encoder); break; -#endif -#ifdef HAVE_FFMPEG_AAC - case FFMPEG_AAC: register_avcodec(&faac_encoder); break; -#endif - case FFMPEG_PCMS16LE: register_avcodec(&pcm_s16le_encoder); break; #ifdef HAVE_FFMPEG_AMR_NB - case FFMPEG_AMR_NB: register_avcodec(&amr_nb_encoder); break; + // we force to the maximum bitrate as it's not possible to configure it through the GUI + case FFMPEG_AMR_NB: audio_codec_context->bit_rate = 12200; break; #endif #ifdef HAVE_FFMPEG_AMR_WB - case FFMPEG_AMR_WB: register_avcodec(&amr_wb_encoder); break; + // we force to the maximum bitrate as it's not possible to configure it through the GUI + case FFMPEG_AMR_WB: audio_codec_context->bit_rate = 23850; break; #endif + // by default you can use the bitrate you want but.... modulo 16... only + default: audio_codec_context->bit_rate = (divx.mp3_bitrate * 1000); break; } - if (audio_codec_context == NULL) - audio_codec_context = avcodec_alloc_context(); - audio_codec_context->codec_id = xdtv_to_audioffmpeg(divx.audio_codec); - audio_codec_context->codec_type= CODEC_TYPE_AUDIO; - audio_codec_context->bit_rate = (divx.mp3_bitrate * 1000); audio_codec_context->sample_rate = divx.audio_freq; audio_codec_context->channels = achans; av_codec = avcodec_find_encoder(audio_codec_context->codec_id); diff -uNr xawdecode/src/divx.h xawdecode-new/src/divx.h --- xawdecode/src/divx.h 2007-05-01 21:59:00 +0400 +++ xawdecode-new/src/divx.h 2007-09-10 23:05:36 +0400 @@ -1,7 +1,7 @@ /***************************************************************************** * divx.h: DivX recording functions and other definitions ***************************************************************************** - * $Id: divx.h,v 1.57 2007/05/01 17:59:00 alainjj Exp $ + * $Id: divx.h,v 1.62 2007/07/20 17:22:31 pingus77 Exp $ ***************************************************************************** * Copyright (C) 2001 Keuleu * @@ -212,7 +212,9 @@ int stream; int http_port; int maxsize; +#ifdef HAVE_LAME int correctdelaylame; +#endif } divx_t; #ifdef HAVE_FFMPEG diff -uNr xawdecode/src/divx_ui.c xawdecode-new/src/divx_ui.c --- xawdecode/src/divx_ui.c 2007-09-10 23:13:34 +0400 +++ xawdecode-new/src/divx_ui.c 2007-09-10 23:12:40 +0400 @@ -1,7 +1,7 @@ /***************************************************************************** * divx_ui.c: DivX Parameters editor ***************************************************************************** - * $Id: divx_ui.c,v 1.113 2007/04/24 19:31:42 estre Exp $ + * $Id: divx_ui.c,v 1.115 2007/07/20 17:22:31 pingus77 Exp $ ***************************************************************************** * Copyright (C) 2001 Keuleu * @@ -167,6 +167,9 @@ Widget c_audiostreamopen; Widget c_audiosave; Widget c_audioopenmain; +#ifdef HAVE_LAME +Widget c_correctdelaylame_onoff; +#endif //streaming Widget c_streamdivxopen; @@ -202,7 +205,10 @@ DIVX_AUDIO_FMT, DIVX_AUDIO_CODEC, DIVX_MP3_VBR, - DIVX_STREAM_ONOFF + DIVX_STREAM_ONOFF, +#ifdef HAVE_LAME + DIVX_CORRECTDELAYLAME_ONOFF +#endif }; static struct STRTAB on_off_list[] = { @@ -882,8 +888,30 @@ if (-1 != (j = popup_menu (widget, translate("Audio Codec"), translate_struct_copy(cont_handler->a_codecs)))) { update_acodec(j); +#ifdef HAVE_LAME + if (divx.audio_codec != LAME) + XtVaSetValues(c_correctdelaylame_onoff, XtNsensitive, False, NULL); + else + XtVaSetValues(c_correctdelaylame_onoff, XtNsensitive, True, NULL); +#endif + } + break; + +#ifdef HAVE_LAME + // Correct Delay Lame + case DIVX_CORRECTDELAYLAME_ONOFF: + if (-1 != (j = popup_menu (widget, translate("Correct Delay Lame"), on_off_list))) + { + divx.correctdelaylame = j; + sprintf (label, "%-*s: %s", ALI(LAB_WIDTH3, translate("Correct Delay Lame")), + int_to_str (divx.correctdelaylame, on_off_list)); + XtVaSetValues (c_correctdelaylame_onoff, XtNlabel, label, NULL); + + if (tv_debug) + fprintf(stderr,"Correct Delay Lame: %d\n",divx.correctdelaylame); } break; +#endif case DIVX_MP3_VBR: if (-1 != (j = popup_menu (widget, translate("Bitrate Mode"), mp3_vbr_list))) @@ -1784,10 +1812,24 @@ divx.audio_codec = AUDIO_UNCOMPRESSED; XtVaSetValues(c_compressaudio, XtNsensitive, False, NULL); } + sprintf (label, "%-*s: %s", ALI(LAB_WIDTH3, translate("Audio Codec")), int_to_str (divx.audio_codec, audio_codec_list_t)); XtVaSetValues (c, XtNlabel, label, NULL); +#ifdef HAVE_LAME + /* Correct Delay Lame */ + c_correctdelaylame_onoff = c = XtVaCreateManagedWidget ("divxcorrecdelaylame", commandWidgetClass, divxaudio_paned, + PANED_FIX, NULL); + XtAddCallback (c, XtNcallback, divx_menu_cb, (XtPointer) DIVX_CORRECTDELAYLAME_ONOFF); + sprintf (label, "%-*s: %s", ALI(LAB_WIDTH3, translate("Correct Delay Lame")), + int_to_str (divx.correctdelaylame, on_off_list)); + XtVaSetValues (c, XtNlabel, label, NULL); + if (divx.audio_codec != LAME) + XtVaSetValues(c_correctdelaylame_onoff, XtNsensitive, False, NULL); + else + XtVaSetValues(c_correctdelaylame_onoff, XtNsensitive, True, NULL); +#endif /* Select bitrate mode */ c_mp3_vbr = c = @@ -1800,7 +1842,6 @@ if (divx.audio_codec==AUDIO_UNCOMPRESSED) XtVaSetValues(c_mp3_vbr, XtNsensitive, False, NULL); - /* MP3 Constant Bitrate Slider */ p_divxmp3bitrate = p = XtVaCreateManagedWidget ("divxmp3bitrate", panedWidgetClass, divxaudio_paned,