mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-09 14:14:39 +02:00
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>
This commit is contained in:
parent
6d35470063
commit
06b5246c84
@ -155,8 +155,10 @@ static char *extradata2psets(AVCodecContext *c)
|
|||||||
char *psets, *p;
|
char *psets, *p;
|
||||||
const uint8_t *r;
|
const uint8_t *r;
|
||||||
const char *pset_string = "; sprop-parameter-sets=";
|
const char *pset_string = "; sprop-parameter-sets=";
|
||||||
|
const char *profile_string = "; profile-level-id=";
|
||||||
uint8_t *orig_extradata = NULL;
|
uint8_t *orig_extradata = NULL;
|
||||||
int orig_extradata_size = 0;
|
int orig_extradata_size = 0;
|
||||||
|
const uint8_t *sps = NULL, *sps_end;
|
||||||
|
|
||||||
if (c->extradata_size > MAX_EXTRADATA_SIZE) {
|
if (c->extradata_size > MAX_EXTRADATA_SIZE) {
|
||||||
av_log(c, AV_LOG_ERROR, "Too much extradata!\n");
|
av_log(c, AV_LOG_ERROR, "Too much extradata!\n");
|
||||||
@ -210,6 +212,10 @@ static char *extradata2psets(AVCodecContext *c)
|
|||||||
*p = ',';
|
*p = ',';
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
|
if (!sps) {
|
||||||
|
sps = r;
|
||||||
|
sps_end = r1;
|
||||||
|
}
|
||||||
if (av_base64_encode(p, MAX_PSET_SIZE - (p - psets), r, r1 - r) == NULL) {
|
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_log(c, AV_LOG_ERROR, "Cannot Base64-encode %td %td!\n", MAX_PSET_SIZE - (p - psets), r1 - r);
|
||||||
av_free(psets);
|
av_free(psets);
|
||||||
@ -219,6 +225,12 @@ static char *extradata2psets(AVCodecContext *c)
|
|||||||
p += strlen(p);
|
p += strlen(p);
|
||||||
r = r1;
|
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) {
|
if (orig_extradata) {
|
||||||
av_free(c->extradata);
|
av_free(c->extradata);
|
||||||
c->extradata = orig_extradata;
|
c->extradata = orig_extradata;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user