changeset 7502:6a2b6f3d619c

best audio/video codec selection & init moved to libmpcodecs
author arpi
date Wed, 25 Sep 2002 23:45:34 +0000
parents 20910550332f
children f0888351bd46
files libmpcodecs/dec_audio.c libmpcodecs/dec_audio.h libmpcodecs/dec_video.c libmpcodecs/dec_video.h mencoder.c mplayer.c
diffstat 6 files changed, 89 insertions(+), 125 deletions(-) [+]
line wrap: on
line diff
--- a/libmpcodecs/dec_audio.c	Wed Sep 25 22:19:11 2002 +0000
+++ b/libmpcodecs/dec_audio.c	Wed Sep 25 23:45:34 2002 +0000
@@ -129,6 +129,41 @@
   return 1;
 }
 
+int init_best_audio_codec(sh_audio_t *sh_audio,char* audio_codec,char* audio_fm){
+  // Go through the codec.conf and find the best codec...
+  sh_audio->codec=NULL;
+  if(audio_fm) mp_msg(MSGT_DECAUDIO,MSGL_INFO,MSGTR_TryForceAudioFmtStr,audio_fm);
+  while(1){
+    sh_audio->codec=find_codec(sh_audio->format,NULL,sh_audio->codec,1);
+    if(!sh_audio->codec){
+      if(audio_fm) {
+        sh_audio->codec=NULL; /* re-search */
+        mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_CantFindAfmtFallback);
+        audio_fm=NULL;
+        continue;
+      }
+      mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_CantFindAudioCodec,sh_audio->format);
+      mp_msg(MSGT_DECAUDIO,MSGL_HINT, MSGTR_TryUpgradeCodecsConfOrRTFM,get_path("codecs.conf"));
+      return 0;
+    }
+    if(audio_codec && strcmp(sh_audio->codec->name,audio_codec)) continue;
+    if(audio_fm && strcmp(sh_audio->codec->drv,audio_fm)) continue;
+    mp_msg(MSGT_DECAUDIO,MSGL_INFO,"%s audio codec: [%s] afm:%s (%s)\n",
+	audio_codec?mp_gettext("Forcing"):mp_gettext("Detected"),sh_audio->codec->name,sh_audio->codec->drv,sh_audio->codec->info);
+    break;
+  }
+  // found it...
+  if(!init_audio(sh_audio)){
+    mp_msg(MSGT_DECAUDIO,MSGL_ERR,MSGTR_CouldntInitAudioCodec);
+    return 0;
+  }
+  mp_msg(MSGT_DECAUDIO,MSGL_INFO,"AUDIO: %d Hz, %d ch, sfmt: 0x%X (%d bps), ratio: %d->%d (%3.1f kbit)\n",
+	sh_audio->samplerate,sh_audio->channels,
+	sh_audio->sample_format,sh_audio->samplesize,
+        sh_audio->i_bps,sh_audio->o_bps,sh_audio->i_bps*8*0.001);
+  return 1; // success!
+}
+
 void uninit_audio(sh_audio_t *sh_audio)
 {
     if(sh_audio->inited){
--- a/libmpcodecs/dec_audio.h	Wed Sep 25 22:19:11 2002 +0000
+++ b/libmpcodecs/dec_audio.h	Wed Sep 25 23:45:34 2002 +0000
@@ -1,6 +1,7 @@
 
 // dec_audio.c:
 extern void afm_help();
+extern int init_best_audio_codec(sh_audio_t *sh_audio,char* audio_codec,char* audio_fm);
 extern int init_audio(sh_audio_t *sh_audio);
 extern int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int maxlen);
 extern void resync_audio_stream(sh_audio_t *sh_audio);
--- a/libmpcodecs/dec_video.c	Wed Sep 25 22:19:11 2002 +0000
+++ b/libmpcodecs/dec_video.c	Wed Sep 25 23:45:34 2002 +0000
@@ -204,6 +204,39 @@
     return 0;
 }
 
+int init_best_video_codec(sh_video_t *sh_video,char* video_codec,char* video_fm){
+// Go through the codec.conf and find the best codec...
+sh_video->inited=0;
+codecs_reset_selection(0);
+if(video_codec){
+    // forced codec by name:
+    mp_msg(MSGT_DECVIDEO,MSGL_INFO,MSGTR_ForcedVideoCodec,video_codec);
+    init_video(sh_video,video_codec,NULL,-1);
+} else {
+    int status;
+    // try in stability order: UNTESTED, WORKING, BUGGY. never try CRASHING.
+    if(video_fm){
+	// try first the preferred codec family:
+	mp_msg(MSGT_DECVIDEO,MSGL_INFO,MSGTR_TryForceVideoFmtStr,video_fm);
+	for(status=CODECS_STATUS__MAX;status>=CODECS_STATUS__MIN;--status)
+	    if(init_video(sh_video,NULL,video_fm,status)) break;
+    }
+    if(!sh_video->inited)
+	for(status=CODECS_STATUS__MAX;status>=CODECS_STATUS__MIN;--status)
+	    if(init_video(sh_video,NULL,NULL,status)) break;
+}
+
+if(!sh_video->inited){
+    mp_msg(MSGT_DECVIDEO,MSGL_HINT, MSGTR_TryUpgradeCodecsConfOrRTFM,get_path("codecs.conf"));
+    mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_CantFindVideoCodec,sh_video->format);
+    return 0; // failed
+}
+
+mp_msg(MSGT_DECVIDEO,MSGL_INFO,"%s video codec: [%s] vfm:%s (%s)\n",
+    video_codec?mp_gettext("Forcing"):mp_gettext("Detected"),sh_video->codec->name,sh_video->codec->drv,sh_video->codec->info);
+return 1; // success
+}
+
 extern int vo_directrendering;
 
 int decode_video(sh_video_t *sh_video,unsigned char *start,int in_size,int drop_frame){
--- a/libmpcodecs/dec_video.h	Wed Sep 25 22:19:11 2002 +0000
+++ b/libmpcodecs/dec_video.h	Wed Sep 25 23:45:34 2002 +0000
@@ -4,6 +4,8 @@
 
 extern void vfm_help();
 
+extern int init_best_video_codec(sh_video_t *sh_video,char* video_codec,char* video_fm);
+
 //extern int init_video(sh_video_t *sh_video, int *pitches);
 extern int init_video(sh_video_t *sh_video,char* codecname,char* vfm,int status);
 extern void uninit_video(sh_video_t *sh_video);
--- a/mencoder.c	Wed Sep 25 22:19:11 2002 +0000
+++ b/mencoder.c	Wed Sep 25 23:45:34 2002 +0000
@@ -485,38 +485,11 @@
 
 if(sh_audio && (out_audio_codec || seek_to_sec || !sh_audio->wf)){
   // Go through the codec.conf and find the best codec...
-  sh_audio->codec=NULL;
-  if(audio_fm) mp_msg(MSGT_MENCODER,MSGL_INFO,MSGTR_TryForceAudioFmtStr,audio_fm);
-  while(1){
-    sh_audio->codec=find_codec(sh_audio->format,NULL,sh_audio->codec,1);
-    if(!sh_audio->codec){
-      if(audio_fm) {
-        sh_audio->codec=NULL; /* re-search */
-        mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_CantFindAfmtFallback);
-        audio_fm=NULL;
-        continue;      
-      }
-      mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_CantFindAudioCodec,sh_audio->format);
-      mp_msg(MSGT_MENCODER,MSGL_HINT, MSGTR_TryUpgradeCodecsConfOrRTFM,get_path("codecs.conf"));
-      sh_audio=d_audio->sh=NULL;
-      break;
-    }
-    if(audio_codec && strcmp(sh_audio->codec->name,audio_codec)) continue;
-    else if(audio_fm && strcmp(sh_audio->codec->drv,audio_fm)) continue;
-    mp_msg(MSGT_MENCODER,MSGL_INFO,"%s audio codec: [%s] afm:%s (%s)\n",audio_codec?"Forcing":"Detected",sh_audio->codec->name,sh_audio->codec->drv,sh_audio->codec->info);
-    break;
+  mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n");
+  if(!init_best_audio_codec(sh_audio,audio_codec,audio_fm)){
+    sh_audio=d_audio->sh=NULL; // failed to init :(
   }
-}
-
-if(sh_audio && (out_audio_codec || seek_to_sec || !sh_audio->wf)){
-  mp_msg(MSGT_MENCODER,MSGL_V,MSGTR_InitializingAudioCodec);
-  if(!init_audio(sh_audio)){
-    mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_CouldntInitAudioCodec);
-    sh_audio=d_audio->sh=NULL;
-  } else {
-    mp_msg(MSGT_MENCODER,MSGL_INFO,"AUDIO: srate=%d  chans=%d  bps=%d  sfmt=0x%X  ratio: %d->%d\n",sh_audio->samplerate,sh_audio->channels,sh_audio->samplesize,
-        sh_audio->sample_format,sh_audio->i_bps,sh_audio->o_bps);
-  }
+  mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n");
 }
 
 // set up video encoder:
@@ -659,32 +632,10 @@
     sh_video->vfilter=vf_open_filter(sh_video->vfilter,"expand","-1:-1:-1:-1:1");
     sh_video->vfilter=append_filters(sh_video->vfilter);
 
-mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n");
-// Go through the codec.conf and find the best codec...
-sh_video->inited=0;
-codecs_reset_selection(0);
-if(video_codec){
-    // forced codec by name:
-    mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_ForcedVideoCodec,video_codec);
-    init_video(sh_video,video_codec,NULL,-1);
-} else {
-    int status;
-    // try in stability order: UNTESTED, WORKING, BUGGY, BROKEN
-    if(video_fm) mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_TryForceVideoFmtStr,video_fm);
-    for(status=CODECS_STATUS__MAX;status>=CODECS_STATUS__MIN;--status){
-	if(video_fm) // try first the preferred codec family:
-	    if(init_video(sh_video,NULL,video_fm,status)) break;
-	if(init_video(sh_video,NULL,NULL,status)) break;
-    }
-}
-if(!sh_video->inited){
-    mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantFindVideoCodec,sh_video->format);
-    mp_msg(MSGT_CPLAYER,MSGL_HINT, MSGTR_TryUpgradeCodecsConfOrRTFM,get_path("codecs.conf"));
-    mencoder_exit(1,NULL);
-}
-mp_msg(MSGT_CPLAYER,MSGL_INFO,"%s video codec: [%s] vfm:%s (%s)\n",
-    video_codec?mp_gettext("Forcing"):mp_gettext("Detected"),sh_video->codec->name,sh_video->codec->drv,sh_video->codec->info);
-mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n");
+    mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n");
+    init_best_video_codec(sh_video,video_codec,video_fm);
+    mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n");
+    if(!sh_video->inited) mencoder_exit(1,NULL);
 
 }
 
--- a/mplayer.c	Wed Sep 25 22:19:11 2002 +0000
+++ b/mplayer.c	Wed Sep 25 23:45:34 2002 +0000
@@ -1200,54 +1200,19 @@
 #endif
 
 //================== Init AUDIO (codec) ==========================
-current_module="find_audio_codec";
-
 if(sh_audio){
   // Go through the codec.conf and find the best codec...
-  sh_audio->codec=NULL;
+  current_module="init_audio_codec";
   mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n");
-  if(audio_fm) mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_TryForceAudioFmtStr,audio_fm);
-  while(1){
-    sh_audio->codec=find_codec(sh_audio->format,NULL,sh_audio->codec,1);
-    if(!sh_audio->codec){
-      if(audio_fm) {
-        sh_audio->codec=NULL; /* re-search */
-        mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantFindAfmtFallback);
-        audio_fm=NULL;
-        continue;
-      }
-      mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantFindAudioCodec,sh_audio->format);
-      mp_msg(MSGT_CPLAYER,MSGL_HINT, MSGTR_TryUpgradeCodecsConfOrRTFM,get_path("codecs.conf"));
-      sh_audio=d_audio->sh=NULL;
-      break;
-    }
-    if(audio_codec && strcmp(sh_audio->codec->name,audio_codec)) continue;
-    if(audio_fm && strcmp(sh_audio->codec->drv,audio_fm)) continue;
-    mp_msg(MSGT_CPLAYER,MSGL_INFO,"%s audio codec: [%s] afm:%s (%s)\n",
-	audio_codec?mp_gettext("Forcing"):mp_gettext("Detected"),sh_audio->codec->name,sh_audio->codec->drv,sh_audio->codec->info);
-    break;
+  if(!init_best_audio_codec(sh_audio,audio_codec,audio_fm)){
+    sh_audio=d_audio->sh=NULL; // failed to init :(
   }
+  mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n");
 }
 
-current_module="init_audio_codec";
-
-if(sh_audio){
-  mp_msg(MSGT_CPLAYER,MSGL_V,MSGTR_InitializingAudioCodec);
-  if(!init_audio(sh_audio)){
-    mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CouldntInitAudioCodec);
-    sh_audio=d_audio->sh=NULL;
-  } else {
-    mp_msg(MSGT_CPLAYER,MSGL_INFO,"AUDIO: %d Hz, %d ch, sfmt: 0x%X (%d bps), ratio: %d->%d (%3.1f kbit)\n",
-	sh_audio->samplerate,sh_audio->channels,
-	sh_audio->sample_format,sh_audio->samplesize,
-        sh_audio->i_bps,sh_audio->o_bps,sh_audio->i_bps*8*0.001);
-  }
-}
+if(!sh_video) goto main; // audio-only
 
 //================== Init VIDEO (codec & libvo) ==========================
-if(!sh_video)
-   goto main;
-
 current_module="preinit_libvo";
 
 vo_config_count=0;
@@ -1269,40 +1234,15 @@
 current_module="init_video_codec";
 
 mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n");
+init_best_video_codec(sh_video,video_codec,video_fm);
+mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n");
 
-// Go through the codec.conf and find the best codec...
-sh_video->inited=0;
-codecs_reset_selection(0);
-if(video_codec){
-    // forced codec by name:
-    mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_ForcedVideoCodec,video_codec);
-    init_video(sh_video,video_codec,NULL,-1);
-} else {
-    int status;
-    // try in stability order: UNTESTED, WORKING, BUGGY. never try CRASHING.
-    if(video_fm){
-	// try first the preferred codec family:
-	mp_msg(MSGT_CPLAYER,MSGL_INFO,MSGTR_TryForceVideoFmtStr,video_fm);
-	for(status=CODECS_STATUS__MAX;status>=CODECS_STATUS__MIN;--status)
-	    if(init_video(sh_video,NULL,video_fm,status)) break;
-    }
-    if(!sh_video->inited)
-	for(status=CODECS_STATUS__MAX;status>=CODECS_STATUS__MIN;--status)
-	    if(init_video(sh_video,NULL,NULL,status)) break;
-}
 if(!sh_video->inited){
-    mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantFindVideoCodec,sh_video->format);
-    mp_msg(MSGT_CPLAYER,MSGL_HINT, MSGTR_TryUpgradeCodecsConfOrRTFM,get_path("codecs.conf"));
-    mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n");
     if(!sh_audio) goto goto_next_file;
     sh_video = d_video->sh = NULL;
     goto main; // exit_player(MSGTR_Exit_error);
 }
 
-mp_msg(MSGT_CPLAYER,MSGL_INFO,"%s video codec: [%s] vfm:%s (%s)\n",
-    video_codec?mp_gettext("Forcing"):mp_gettext("Detected"),sh_video->codec->name,sh_video->codec->drv,sh_video->codec->info);
-mp_msg(MSGT_CPLAYER,MSGL_INFO,"==========================================================================\n");
-
 if(auto_quality>0){
     // Auto quality option enabled
     output_quality=get_video_quality_max(sh_video);
@@ -1335,7 +1275,9 @@
 #endif
 
 //================== MAIN: ==========================
-   main:
+main:
+current_module="main";
+
 if(!sh_video) osd_level = 0;
 
 fflush(stdout);