Message ID | 1346155156-43567-1-git-send-email-martin@martin.st |
---|---|
State | Committed |
Headers | show |
On 8/28/12 1:59 PM, Martin Storsjö wrote: > This is required for playback with the Stagefright RTSP framework > on Android. > --- > libavformat/sdp.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > Ok.
On 28/08/2012 04:59, Martin Storsjö wrote: > const char *pset_string = "; sprop-parameter-sets="; > + const char *profile_string = "; profile-level-id="; Any particular reasons why these are not `static const char name[]`?
On Tue, 28 Aug 2012, Diego Elio Pettenò wrote: > On 28/08/2012 04:59, Martin Storsjö wrote: >> const char *pset_string = "; sprop-parameter-sets="; >> + const char *profile_string = "; profile-level-id="; > > Any particular reasons why these are not `static const char name[]`? Not really - I did this one like the previous one for consistency now, I can change them both as a later commit. // Martin
diff --git a/libavformat/sdp.c b/libavformat/sdp.c index 2304a68..b89f4b7 100644 --- a/libavformat/sdp.c +++ b/libavformat/sdp.c @@ -155,8 +155,10 @@ static char *extradata2psets(AVCodecContext *c) char *psets, *p; const uint8_t *r; const char *pset_string = "; sprop-parameter-sets="; + const char *profile_string = "; profile-level-id="; uint8_t *orig_extradata = NULL; int orig_extradata_size = 0; + const uint8_t *sps, *sps_end; if (c->extradata_size > MAX_EXTRADATA_SIZE) { av_log(c, AV_LOG_ERROR, "Too much extradata!\n"); @@ -210,6 +212,10 @@ static char *extradata2psets(AVCodecContext *c) *p = ','; p++; } + if (!sps) { + sps = r; + sps_end = r1; + } if (av_base64_encode(p, MAX_PSET_SIZE - (p - psets), r, r1 - r) == NULL) { av_log(c, AV_LOG_ERROR, "Cannot Base64-encode %td %td!\n", MAX_PSET_SIZE - (p - psets), r1 - r); av_free(psets); @@ -219,6 +225,12 @@ static char *extradata2psets(AVCodecContext *c) p += strlen(p); r = r1; } + if (sps && sps_end - sps >= 4) { + memcpy(p, profile_string, strlen(profile_string)); + p += strlen(p); + ff_data_to_hex(p, sps + 1, 3, 0); + p[6] = '\0'; + } if (orig_extradata) { av_free(c->extradata); c->extradata = orig_extradata;