summaryrefslogtreecommitdiffstats
path: root/libmpdemux
diff options
context:
space:
mode:
authornicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-04-17 09:13:48 +0000
committernicodvb <nicodvb@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-04-17 09:13:48 +0000
commit1e12bf4d7190c4b3b01f58b92826459fcef8e538 (patch)
treecf9ec9df95bdb5faeca8c58a180ec856846a180e /libmpdemux
parent5249738b39935e88a91dd1237208975534b403ed (diff)
downloadmpv-1e12bf4d7190c4b3b01f58b92826459fcef8e538.tar.bz2
mpv-1e12bf4d7190c4b3b01f58b92826459fcef8e538.tar.xz
added missing initializer in URLProtocolo; mux packets only if len > 0; second mencoder's a/v sync model
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@15199 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux')
-rw-r--r--libmpdemux/muxer_lavf.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/libmpdemux/muxer_lavf.c b/libmpdemux/muxer_lavf.c
index 0c526cfc4c..8a669e0bf8 100644
--- a/libmpdemux/muxer_lavf.c
+++ b/libmpdemux/muxer_lavf.c
@@ -81,6 +81,7 @@ static URLProtocol mp_protocol = {
mp_write,
mp_seek,
mp_close,
+ NULL
};
static muxer_stream_t* lavf_new_stream(muxer_t *muxer, int type)
@@ -102,7 +103,7 @@ static muxer_stream_t* lavf_new_stream(muxer_t *muxer, int type)
mp_msg(MSGT_MUXER, MSGL_ERR, "Could not alloc muxer_stream, EXIT\n");
return NULL;
}
- stream->b_buffer = malloc(2048);
+ stream->b_buffer = (unsigned char *)malloc(2048);
if(!stream->b_buffer)
{
mp_msg(MSGT_MUXER, MSGL_ERR, "Could not alloc b_buffer, EXIT\n");
@@ -167,7 +168,9 @@ static void fix_parameters(muxer_stream_t *stream)
ctx->channels = stream->wf->nChannels;
if(stream->h.dwRate && (stream->h.dwScale * (int64_t)ctx->sample_rate) % stream->h.dwRate == 0)
ctx->frame_size= (stream->h.dwScale * (int64_t)ctx->sample_rate) / stream->h.dwRate;
-// printf("ctx->block_align = stream->wf->nBlockAlign; %d=%d stream->wf->nAvgBytesPerSec:%d\n", ctx->block_align, stream->wf->nBlockAlign, stream->wf->nAvgBytesPerSec);
+ mp_msg(MSGT_MUXER, MSGL_V, "MUXER_LAVF(audio stream) frame_size: %d, scale: %u, sps: %u, rate: %u, ctx->block_align = stream->wf->nBlockAlign; %d=%d stream->wf->nAvgBytesPerSec:%d\n",
+ ctx->frame_size, stream->h.dwScale, ctx->sample_rate, stream->h.dwRate,
+ ctx->block_align, stream->wf->nBlockAlign, stream->wf->nAvgBytesPerSec);
ctx->block_align = stream->wf->nBlockAlign;
}
else if(stream->type == MUXER_TYPE_VIDEO)
@@ -188,18 +191,17 @@ static void write_chunk(muxer_stream_t *stream, size_t len, unsigned int flags)
muxer_priv_t *priv = (muxer_priv_t *) muxer->priv;
muxer_stream_priv_t *spriv = (muxer_stream_priv_t *) stream->priv;
AVPacket pkt;
- AVCodecContext *ctx;
stream->size += len;
- if(stream->type == MUXER_TYPE_VIDEO && !len)
- return;
+ if(len)
+ {
av_init_packet(&pkt);
pkt.size = len;
pkt.stream_index= spriv->avstream->index;
pkt.data = stream->buffer;
- if((stream->type == MUXER_TYPE_VIDEO) && (flags & AVIIF_KEYFRAME))
+ if(flags & AVIIF_KEYFRAME)
pkt.flags |= PKT_FLAG_KEY;
else
pkt.flags = 0;
@@ -208,16 +210,16 @@ static void write_chunk(muxer_stream_t *stream, size_t len, unsigned int flags)
//pkt.pts = AV_NOPTS_VALUE;
pkt.pts = AV_TIME_BASE * stream->timer;
- if(stream->h.dwSampleSize) // CBR
- stream->h.dwLength += len / stream->h.dwSampleSize;
- else // VBR
- stream->h.dwLength++;
-
- //;
if(av_interleaved_write_frame(priv->oc, &pkt) != 0) //av_write_frame(priv->oc, &pkt)
{
mp_msg(MSGT_MUXER, MSGL_ERR, "Error while writing frame\n");
}
+ }
+
+ if(stream->h.dwSampleSize) // CBR
+ stream->h.dwLength += len / stream->h.dwSampleSize;
+ else // VBR
+ stream->h.dwLength++;
stream->timer = (double) stream->h.dwLength * stream->h.dwScale / stream->h.dwRate;
return;