From 8033393a74a6872ad8d702b10da34d98dde0bf41 Mon Sep 17 00:00:00 2001 From: Patrik2 Carlsson Date: Mon, 20 Aug 2012 09:53:09 +0200 Subject: [PATCH] h264 streaming: make profile-level-id optional profile-level-id is made optional according to rfc3984: "If no profile-level-id is present, the Baseline Profile without additional constraints at Level 1 MUST be implied." Change-Id: If868468a48917ceccb963b8ac15767583da29723 --- media/libstagefright/rtsp/APacketSource.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/media/libstagefright/rtsp/APacketSource.cpp b/media/libstagefright/rtsp/APacketSource.cpp index fc177d2abb..ddd2f0625e 100644 --- a/media/libstagefright/rtsp/APacketSource.cpp +++ b/media/libstagefright/rtsp/APacketSource.cpp @@ -110,14 +110,12 @@ static sp MakeAVCCodecSpecificData( *height = 0; AString val; - if (!GetAttribute(params, "profile-level-id", &val)) { - return NULL; + sp profileLevelID = NULL; + if (GetAttribute(params, "profile-level-id", &val)) { + profileLevelID = decodeHex(val); + CHECK_EQ(profileLevelID->size(), 3u); } - sp profileLevelID = decodeHex(val); - CHECK(profileLevelID != NULL); - CHECK_EQ(profileLevelID->size(), 3u); - Vector > paramSets; size_t numSeqParameterSets = 0; @@ -176,8 +174,15 @@ static sp MakeAVCCodecSpecificData( uint8_t *out = csd->data(); *out++ = 0x01; // configurationVersion - memcpy(out, profileLevelID->data(), 3); - out += 3; + if (profileLevelID != NULL) { + memcpy(out, profileLevelID->data(), 3); + out += 3; + } else { + *out++ = 0x42; // Baseline profile + *out++ = 0xE0; // Common subset for all profiles + *out++ = 0x0A; // Level 1 + } + *out++ = (0x3f << 2) | 1; // lengthSize == 2 bytes *out++ = 0xe0 | numSeqParameterSets; -- 2.11.0