changeset 11974:9134c957116a

write out extraheaders from lavc
author alex
date Wed, 18 Feb 2004 13:33:16 +0000
parents f5efd4195730
children 645975e01061
files mencoder.c
diffstat 1 files changed, 17 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/mencoder.c	Wed Feb 18 12:34:32 2004 +0000
+++ b/mencoder.c	Wed Feb 18 13:33:16 2004 +0000
@@ -730,6 +730,8 @@
 
 mux_a->buffer_size=0x100000; //16384;
 mux_a->buffer=malloc(mux_a->buffer_size);
+if (!mux_a->buffer)
+    mencoder_exit(1,"memory allocation failed");
 
 mux_a->source=sh_audio;
 
@@ -894,10 +896,7 @@
 	exit(1);
     }
 
-    if (sizeof(MPEGLAYER3WAVEFORMAT) != 30)  // should be 30
-	broken_c_compiler___size_of_MPEGLAYER3WAVEFORMAT_not_30();
-
-    mux_a->wf = malloc(sizeof(MPEGLAYER3WAVEFORMAT));
+    mux_a->wf = malloc(sizeof(WAVEFORMATEX)+lavc_actx->extradata_size+256);
     mux_a->wf->wFormatTag = lavc_param_atag;
     mux_a->wf->nChannels = lavc_actx->channels;
     mux_a->wf->nSamplesPerSec = lavc_actx->sample_rate;
@@ -942,11 +941,21 @@
 	((MPEGLAYER3WAVEFORMAT *) (mux_a->wf))->nCodecDelay = 0;
 	break;
     default:
-	mux_a->wf->cbSize = 0;
 	mux_a->wf->wBitsPerSample = 0; /* Unknown */
+	if (lavc_actx->extradata && (lavc_actx->extradata_size > 0))
+	{
+	    memcpy(mux_a->wf+sizeof(WAVEFORMATEX), lavc_actx->extradata,
+		    lavc_actx->extradata_size);
+	    mux_a->wf->cbSize = lavc_actx->extradata_size;
+	}
+	else
+	    mux_a->wf->cbSize = 0;
 	break;
     }
 
+    // Fix allocation    
+    mux_a->wf = realloc(mux_a->wf, sizeof(WAVEFORMATEX)+mux_a->wf->cbSize);
+
     // setup filter:
     if (!init_audio_filters(
 	sh_audio,
@@ -1827,6 +1836,9 @@
     if(! strcasecmp(codec, "adpcm_ima_wav"))
        return 0x11;
 
+    if(! strncasecmp(codec, "bonk", 4))
+       return 0x2048;
+
     return 0;
 }
 #endif