summaryrefslogtreecommitdiff
path: root/libavformat/sdp.c
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2012-08-28 14:57:26 +0300
committerMartin Storsjö <martin@martin.st>2012-08-28 19:32:19 +0300
commit06b5246c845b4342ad1c5eaad6b2f18004d9223c (patch)
tree735a8e283ede47349cbdab80a84c5556c14920e5 /libavformat/sdp.c
parent6d35470063dd45f20f5a6a80ed49eb3a3e630990 (diff)
sdp: Include profile-level-id for H264
This is required for playback with the Stagefright RTSP framework on Android. Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavformat/sdp.c')
-rw-r--r--libavformat/sdp.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/libavformat/sdp.c b/libavformat/sdp.c
index 2304a68b8c..74133863f9 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 = NULL, *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;