diff --git a/src/media/video/encode/aom/aom_av1_encoder.cpp b/src/media/video/encode/aom/aom_av1_encoder.cpp index 3d10e8b..8e10f49 100644 --- a/src/media/video/encode/aom/aom_av1_encoder.cpp +++ b/src/media/video/encode/aom/aom_av1_encoder.cpp @@ -343,52 +343,11 @@ int AomAv1Encoder::Encode( LOG_INFO("Encoded frame qp = {}", qp); std::vector obus = ParseObus(encoded_frame_, encoded_frame_size_); - // LOG_ERROR("Obu size = [{}]", obus.size()); - // for (int i = 0; i < obus.size(); i++) { - // LOG_ERROR("Obu size = {} [{} {}]", i, obus[i].size_, - // obus[i].payload_size_); - // } - - // int consumed_size = 0; - // int offset = 0; - // int unit = 0; - // while (consumed_size < encoded_frame_size_) { - // int obu_size = 0; - // uint8_t obu_header; - // memcpy(&obu_header, encoded_frame_ + offset, sizeof(char)); - // obu_size = 1; - // offset += 1; - // // memcpy(reinterpret_cast(&obu_header), encoded_frame_, 1); - // int obu_type = (obu_header & 0b0'1111'000) >> 3; - - // bool obu_has_ext = obu_header & 0b0'0000'100; - // // LOG_ERROR("OBU has ext {}", obu_has_ext); - - // bool obu_has_size = obu_header & kObuSizePresentBit; - // LOG_ERROR("OBU has size {}", obu_has_size); - // if (!obu_has_size) { - // consumed_size = encoded_frame_size_; - // offset = encoded_frame_size_; - // } else { - // uint64_t size = 0; - // if (!ReadLeb128((char *)(encoded_frame_ + offset), &size) || - // size > encoded_frame_size_ - consumed_size) { - // LOG_ERROR( - // "Malformed AV1 input: declared size {} is larger than " - // "remaining buffer size {}", - // size, encoded_frame_size_ - consumed_size); - // return -1; - // } - - // LOG_ERROR("leb128 get size = {}, offset = {}", size, offset); - // consumed_size += size; - // offset += size; - // obu_size += size; - // } - - // LOG_ERROR("Temporal unit [{}], OBU size [{}], OBU type [{}]", unit++, - // obu_size, obu_type); - // } + for (int i = 0; i < obus.size(); i++) { + LOG_ERROR("[{}] Obu size = [{}], Obu type [{}]", i, + obus[i].payload_size_, + ObuTypeToString((OBU_TYPE)ObuType(obus[i].header_))); + } if (on_encoded_image) { on_encoded_image((char *)encoded_frame_, encoded_frame_size_); diff --git a/src/media/video/encode/aom/obu.cpp b/src/media/video/encode/aom/obu.cpp index d75306f..05ef420 100644 --- a/src/media/video/encode/aom/obu.cpp +++ b/src/media/video/encode/aom/obu.cpp @@ -17,6 +17,9 @@ Obu::Obu(const Obu &obu) { payload_size_ = obu.payload_size_; header_ = obu.header_; extension_header_ = obu.extension_header_; + } else { + header_ = obu.header_; + extension_header_ = obu.extension_header_; } } @@ -31,11 +34,16 @@ Obu::Obu(Obu &&obu) Obu &Obu::operator=(const Obu &obu) { if (&obu != this) { - payload_ = (uint8_t *)realloc(payload_, obu.payload_size_); - memcpy(payload_, obu.payload_, obu.payload_size_); - payload_size_ = obu.payload_size_; - header_ = obu.header_; - extension_header_ = obu.extension_header_; + if (obu.payload_size_ > 0) { + payload_ = (uint8_t *)realloc(payload_, obu.payload_size_); + memcpy(payload_, obu.payload_, obu.payload_size_); + payload_size_ = obu.payload_size_; + header_ = obu.header_; + extension_header_ = obu.extension_header_; + } else { + header_ = obu.header_; + extension_header_ = obu.extension_header_; + } } return *this; } diff --git a/src/media/video/encode/aom/obu_parser.cpp b/src/media/video/encode/aom/obu_parser.cpp index a05f769..0afd995 100644 --- a/src/media/video/encode/aom/obu_parser.cpp +++ b/src/media/video/encode/aom/obu_parser.cpp @@ -52,8 +52,7 @@ std::vector ParseObus(uint8_t* payload, int payload_size) { while (payload_reader.Length() > 0) { Obu obu; payload_reader.ReadUInt8(&obu.header_); - LOG_ERROR("Get obu type = [{}]", - ObuTypeToString((OBU_TYPE)ObuType(obu.header_))) + obu.size_ = 1; if (ObuHasExtension(obu.header_)) { if (payload_reader.Length() == 0) { @@ -70,7 +69,6 @@ std::vector ParseObus(uint8_t* payload, int payload_size) { obu.SetPayload(reinterpret_cast(payload_reader.Data()), payload_reader.Length()); payload_reader.Consume(payload_reader.Length()); - LOG_ERROR("payload_reader.Length() = {}", payload_reader.Length()); } else { uint64_t size = 0; if (!payload_reader.ReadUVarint(&size) || @@ -84,7 +82,6 @@ std::vector ParseObus(uint8_t* payload, int payload_size) { obu.SetPayload(reinterpret_cast(payload_reader.Data()), size); payload_reader.Consume(size); - LOG_ERROR("size = {}", size); } obu.size_ += obu.payload_size_; // Skip obus that shouldn't be transfered over rtp. @@ -94,19 +91,16 @@ std::vector ParseObus(uint8_t* payload, int payload_size) { // obu_type != kObuTypePadding) { // result.push_back(obu); // } - - LOG_ERROR("Obu size = [{}], Obu type [{}]", obu.size_, - ObuTypeToString((OBU_TYPE)ObuType(obu.header_))); if (1) { result.push_back(obu); } } - LOG_ERROR("Obu size = [{}]", result.size()); - for (int i = 0; i < result.size(); i++) { - LOG_ERROR("[{}] Obu size = [{}], Obu type [{}]", i, result[i].payload_size_, - ObuTypeToString((OBU_TYPE)ObuType(result[i].header_))); - } + // for (int i = 0; i < result.size(); i++) { + // LOG_ERROR("[{}] Obu size = [{}], Obu type [{}]", i, + // result[i].payload_size_, + // ObuTypeToString((OBU_TYPE)ObuType(result[i].header_))); + // } return result; } \ No newline at end of file diff --git a/src/media/video/encode/aom/obu_parser.h b/src/media/video/encode/aom/obu_parser.h index f7628ce..79514a7 100644 --- a/src/media/video/encode/aom/obu_parser.h +++ b/src/media/video/encode/aom/obu_parser.h @@ -15,4 +15,13 @@ #include "obu.h" std::vector ParseObus(uint8_t* payload, int payload_size); + +const char* ObuTypeToString(OBU_TYPE type); + +bool ObuHasExtension(uint8_t obu_header); + +bool ObuHasSize(uint8_t obu_header); + +int ObuType(uint8_t obu_header); + #endif \ No newline at end of file