|
|
|
@@ -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; |
|
|
|
} |
|
|
|
|