Revert of Save width/height of SPS nalus and restore them on the first packet of an IDR. (patchset #6 id:100001 of https://codereview.webrtc.org/2750633003/ )
Reason for revert:
Breaks build bots.
Original issue's description:
> Save width/height of SPS nalus and restore them on the first packet of an IDR.
>
> It appears that for some H264 streams that the width/height is not set for
> the first packet of the IDR but in the packet containing the SPS/PPS.
>
> BUG=chromium:698088, webrtc:7139
>
> Review-Url: https://codereview.webrtc.org/2750633003
> Cr-Commit-Position: refs/heads/master@{#17239}
> Committed: 620d75f5be
TBR=stefan@webrtc.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=chromium:698088, webrtc:7139
Review-Url: https://codereview.webrtc.org/2754543005
Cr-Commit-Position: refs/heads/master@{#17250}
This commit is contained in:
@ -45,7 +45,6 @@ H264SpsPpsTracker::PacketAction H264SpsPpsTracker::CopyAndFixBitstream(
|
||||
bool insert_packet = codec_header.nalus_length == 0 ? true : false;
|
||||
|
||||
int pps_id = -1;
|
||||
int sps_id = -1;
|
||||
size_t required_size = 0;
|
||||
for (size_t i = 0; i < codec_header.nalus_length; ++i) {
|
||||
const NaluInfo& nalu = codec_header.nalus[i];
|
||||
@ -56,8 +55,6 @@ H264SpsPpsTracker::PacketAction H264SpsPpsTracker::CopyAndFixBitstream(
|
||||
sps_data_[nalu.sps_id].data.reset(new uint8_t[nalu.size]);
|
||||
memcpy(sps_data_[nalu.sps_id].data.get(), data + nalu.offset,
|
||||
nalu.size);
|
||||
sps_data_[nalu.sps_id].width = packet->width;
|
||||
sps_data_[nalu.sps_id].height = packet->height;
|
||||
break;
|
||||
}
|
||||
case H264::NaluType::kPps: {
|
||||
@ -86,8 +83,7 @@ H264SpsPpsTracker::PacketAction H264SpsPpsTracker::CopyAndFixBitstream(
|
||||
return kRequestKeyframe;
|
||||
}
|
||||
|
||||
sps_id = pps->second.sps_id;
|
||||
auto sps = sps_data_.find(sps_id);
|
||||
auto sps = sps_data_.find(pps->second.sps_id);
|
||||
if (sps == sps_data_.end()) {
|
||||
LOG(LS_WARNING) << "No SPS with id << "
|
||||
<< pps_data_[nalu.pps_id].sps_id << " received";
|
||||
@ -181,8 +177,6 @@ H264SpsPpsTracker::PacketAction H264SpsPpsTracker::CopyAndFixBitstream(
|
||||
memcpy(insert_at, data, data_size);
|
||||
}
|
||||
|
||||
packet->width = sps_data_[sps_id].width;
|
||||
packet->height = sps_data_[sps_id].height;
|
||||
packet->dataPtr = buffer;
|
||||
packet->sizeBytes = required_size;
|
||||
return kInsert;
|
||||
@ -228,8 +222,6 @@ void H264SpsPpsTracker::InsertSpsPpsNalus(const std::vector<uint8_t>& sps,
|
||||
|
||||
SpsInfo sps_info;
|
||||
sps_info.size = sps.size();
|
||||
sps_info.width = parsed_sps->width;
|
||||
sps_info.height = parsed_sps->height;
|
||||
uint8_t* sps_data = new uint8_t[sps_info.size];
|
||||
memcpy(sps_data, sps.data(), sps_info.size);
|
||||
sps_info.data.reset(sps_data);
|
||||
|
||||
@ -42,8 +42,6 @@ class H264SpsPpsTracker {
|
||||
|
||||
struct SpsInfo {
|
||||
size_t size = 0;
|
||||
int width = -1;
|
||||
int height = -1;
|
||||
std::unique_ptr<uint8_t[]> data;
|
||||
};
|
||||
|
||||
|
||||
@ -265,7 +265,6 @@ TEST_F(TestH264SpsPpsTracker, SpsPpsOutOfBand) {
|
||||
constexpr uint8_t kData[] = {1, 2, 3};
|
||||
|
||||
// Generated by "ffmpeg -r 30 -f avfoundation -i "default" out.h264" on macos.
|
||||
// width: 320, height: 240
|
||||
const std::vector<uint8_t> sps(
|
||||
{0x67, 0x7a, 0x00, 0x0d, 0xbc, 0xd9, 0x41, 0x41, 0xfa, 0x10, 0x00, 0x00,
|
||||
0x03, 0x00, 0x10, 0x00, 0x00, 0x03, 0x03, 0xc0, 0xf1, 0x42, 0x99, 0x60});
|
||||
@ -280,8 +279,6 @@ TEST_F(TestH264SpsPpsTracker, SpsPpsOutOfBand) {
|
||||
idr_packet.sizeBytes = sizeof(kData);
|
||||
EXPECT_EQ(H264SpsPpsTracker::kInsert,
|
||||
tracker_.CopyAndFixBitstream(&idr_packet));
|
||||
EXPECT_EQ(320, idr_packet.width);
|
||||
EXPECT_EQ(240, idr_packet.height);
|
||||
if (idr_packet.dataPtr != kData) {
|
||||
// In case CopyAndFixBitStream() prepends SPS/PPS nalus to the packet, it
|
||||
// uses new uint8_t[] to allocate memory. Caller of CopyAndFixBitStream()
|
||||
@ -330,34 +327,5 @@ TEST_F(TestH264SpsPpsTracker, SpsPpsOutOfBandIncompleteNalu) {
|
||||
tracker_.CopyAndFixBitstream(&idr_packet));
|
||||
}
|
||||
|
||||
TEST_F(TestH264SpsPpsTracker, SaveRestoreWidthHeight) {
|
||||
std::vector<uint8_t> data;
|
||||
|
||||
// Insert an SPS/PPS packet with width/height and make sure
|
||||
// that information is set on the first IDR packet.
|
||||
VCMPacket sps_pps_packet1 = GetDefaultPacket();
|
||||
AddSps(&sps_pps_packet1, 0, &data);
|
||||
AddPps(&sps_pps_packet1, 0, 1, &data);
|
||||
sps_pps_packet1.dataPtr = data.data();
|
||||
sps_pps_packet1.sizeBytes = data.size();
|
||||
sps_pps_packet1.width = 320;
|
||||
sps_pps_packet1.height = 240;
|
||||
EXPECT_EQ(H264SpsPpsTracker::kDrop,
|
||||
tracker_.CopyAndFixBitstream(&sps_pps_packet1));
|
||||
|
||||
VCMPacket idr_packet1 = GetDefaultPacket();
|
||||
idr_packet1.video_header.is_first_packet_in_frame = true;
|
||||
AddIdr(&idr_packet1, 1);
|
||||
data.insert(data.end(), {1, 2, 3});
|
||||
idr_packet1.dataPtr = data.data();
|
||||
idr_packet1.sizeBytes = data.size();
|
||||
EXPECT_EQ(H264SpsPpsTracker::kInsert,
|
||||
tracker_.CopyAndFixBitstream(&idr_packet1));
|
||||
|
||||
EXPECT_EQ(320, idr_packet1.width);
|
||||
EXPECT_EQ(240, idr_packet1.height);
|
||||
delete[] idr_packet1.dataPtr;
|
||||
}
|
||||
|
||||
} // namespace video_coding
|
||||
} // namespace webrtc
|
||||
|
||||
Reference in New Issue
Block a user