You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-15 14:13:16 +02:00
sdp: Restore the original mp4 format h264 extradata if converted
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ö <martin@martin.st>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user