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");
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);
}
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));
p += strlen(p);
r = r1;
}
+ if (orig_extradata) {
+ av_free(c->extradata);
+ c->extradata = orig_extradata;
+ c->extradata_size = orig_extradata_size;
+ }
return psets;
}
* actually specifies the maximum video size, but we only know
* the current size. This is required for playback on Android
* stagefright and on Samsung bada. */
+ if (!fmt || !fmt->oformat->priv_class ||
+ !av_opt_flag_is_set(fmt->priv_data, "rtpflags", "rfc2190") ||
+ c->codec_id == CODEC_ID_H263P)
av_strlcatf(buff, size, "a=rtpmap:%d H263-2000/90000\r\n"
"a=framesize:%d %d-%d\r\n",
payload_type,
payload_type,
8000, c->channels);
break;
+ case CODEC_ID_ADPCM_G726: {
+ if (payload_type >= RTP_PT_PRIVATE)
+ av_strlcatf(buff, size, "a=rtpmap:%d G726-%d/%d\r\n",
+ payload_type,
+ c->bits_per_coded_sample*8,
+ c->sample_rate);
+ break;
+ }
default:
/* Nothing special to do here... */
break;
{
}
#endif
-
-#if FF_API_SDP_CREATE
-int avf_sdp_create(AVFormatContext *ac[], int n_files, char *buff, int size)
-{
- return av_sdp_create(ac, n_files, buff, size);
-}
-#endif