changeset 16805:50fb26acbcba

processing audio is sometimes essential for a/v sync, so 1000l to whoever made rawvideo muxer disable audio!! with this patch, audio is processed but simply thrown away by the muxer. various 'error' conditions in rawvideo muxer are removed to make it work. feel free to re-add them if they can be done without breaking anything, but do not use printf !!!! btw old behavior can be obtained by manually specifying -nosound.
author rfelker
date Wed, 19 Oct 2005 05:44:27 +0000
parents a0a0ee2715ea
children fd2722529d77
files libmpdemux/muxer_rawvideo.c mencoder.c
diffstat 2 files changed, 4 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/libmpdemux/muxer_rawvideo.c	Tue Oct 18 21:48:09 2005 +0000
+++ b/libmpdemux/muxer_rawvideo.c	Wed Oct 19 05:44:27 2005 +0000
@@ -21,14 +21,6 @@
 static muxer_stream_t* rawvideofile_new_stream(muxer_t *muxer,int type){
     muxer_stream_t* s;
     if (!muxer) return NULL;
-    if (type == MUXER_TYPE_AUDIO) {
-	printf("Rawvideo muxer does not support audio !\n");
-	return NULL;
-    }
-    if(muxer->avih.dwStreams>=1){
-	printf("Too many streams! Rawvideo muxer supports only one video stream !\n");
-	return NULL;
-    }
     s=malloc(sizeof(muxer_stream_t));
     memset(s,0,sizeof(muxer_stream_t));
     if(!s) return NULL; // no mem!?
@@ -44,9 +36,6 @@
       s->h.fccType=streamtypeVIDEO;
       if(!muxer->def_v) muxer->def_v=s;
       break;
-    default:
-      printf("WarninG! unknown stream type: %d\n",type);
-      return NULL;
     }
     muxer->avih.dwStreams++;
     return s;
@@ -65,6 +54,7 @@
     muxer_t *muxer=s->muxer;
 
     // write out the chunk:
+    if (s->type == MUXER_TYPE_VIDEO)
     write_rawvideo_chunk(muxer->file,len,s->buffer); /* unsigned char */
 
     // alter counters:
--- a/mencoder.c	Tue Oct 18 21:48:09 2005 +0000
+++ b/mencoder.c	Wed Oct 19 05:44:27 2005 +0000
@@ -580,10 +580,6 @@
     mp_msg(MSGT_MENCODER,MSGL_INFO,MSGTR_ForcingInputFPS, sh_video->fps);
   }
 
-  if(sh_audio && out_file_format==MUXER_TYPE_RAWVIDEO){
-      mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_RawvideoDoesNotSupportAudio);
-      sh_audio=NULL;
-  }
   if(sh_audio && out_audio_codec<0){
     if(audio_id==-2)
 	mp_msg(MSGT_MENCODER,MSGL_ERR,MSGTR_DemuxerDoesntSupportNosound);
@@ -1302,6 +1298,8 @@
       badframes++;
       if(skip_flag<=0){
 	// unwanted skipping of a frame, what to do?
+        v_timer_corr-=(float)mux_v->h.dwScale/mux_v->h.dwRate;
+#if 0
 	if(skip_limit==0){
 	    // skipping not allowed -> write empty frame:
 	    if (!encode_duplicates || !sh_video->vfilter || ((vf_instance_t *)sh_video->vfilter)->control(sh_video->vfilter, VFCTRL_DUPLICATE_FRAME, 0) != CONTROL_TRUE)
@@ -1310,6 +1308,7 @@
 	    // skipping allowed -> skip it and distriubute timer error:
 	    v_timer_corr-=(float)mux_v->h.dwScale/mux_v->h.dwRate;
 	}
+#endif
       }
     }
 }