From 0ebd4083e114a3c88c0e74852c10aeaea826d24d Mon Sep 17 00:00:00 2001 From: Martin Storsjö Date: Fri, 9 Dec 2011 21:00:09 +0200 Subject: sdp: Restore the original mp4 format h264 extradata if converted MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If the sdp is generated before the rtp muxer is initialized (e.g. as when called from the rtsp muxer), this has to be done, otherwise the rtp muxer doesn't know that the input really is in mp4 format. Signed-off-by: Martin Storsjö --- libavformat/sdp.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'libavformat/sdp.c') diff --git a/libavformat/sdp.c b/libavformat/sdp.c index f0d4253da2..d89591fe80 100644 --- a/libavformat/sdp.c +++ b/libavformat/sdp.c @@ -156,6 +156,8 @@ static char *extradata2psets(AVCodecContext *c) char *psets, *p; const uint8_t *r; const char *pset_string = "; sprop-parameter-sets="; + uint8_t *orig_extradata = NULL; + int orig_extradata_size = 0; if (c->extradata_size > MAX_EXTRADATA_SIZE) { av_log(c, AV_LOG_ERROR, "Too much extradata!\n"); @@ -172,6 +174,15 @@ static char *extradata2psets(AVCodecContext *c) return NULL; } + + orig_extradata_size = c->extradata_size; + orig_extradata = av_mallocz(orig_extradata_size + + FF_INPUT_BUFFER_PADDING_SIZE); + if (!orig_extradata) { + av_bitstream_filter_close(bsfc); + return NULL; + } + memcpy(orig_extradata, c->extradata, orig_extradata_size); av_bitstream_filter_filter(bsfc, c, NULL, &dummy_p, &dummy_int, NULL, 0, 0); av_bitstream_filter_close(bsfc); } @@ -179,6 +190,7 @@ static char *extradata2psets(AVCodecContext *c) psets = av_mallocz(MAX_PSET_SIZE); if (psets == NULL) { av_log(c, AV_LOG_ERROR, "Cannot allocate memory for the parameter sets.\n"); + av_free(orig_extradata); return NULL; } memcpy(psets, pset_string, strlen(pset_string)); @@ -208,6 +220,11 @@ static char *extradata2psets(AVCodecContext *c) p += strlen(p); r = r1; } + if (orig_extradata) { + av_free(c->extradata); + c->extradata = orig_extradata; + c->extradata_size = orig_extradata_size; + } return psets; } -- cgit v1.2.3