mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
UniquePtr: Support SrsUniquePtr to replace SrsAutoFree. v6.0.136 (#4109)
To manage an object: ```cpp // Before MyClass* ptr = new MyClass(); SrsAutoFree(MyClass, ptr); ptr->do_something(); // Now SrsUniquePtr<MyClass> ptr(new MyClass()); ptr->do_something(); ``` To manage an array of objects: ```cpp // Before char* ptr = new char[10]; SrsAutoFreeA(char, ptr); ptr[0] = 0xf; // Now SrsUniquePtr<char[]> ptr(new char[10]); ptr[0] = 0xf; ``` In fact, SrsUniquePtr is a limited subset of SrsAutoFree, mainly managing pointers and arrays. SrsUniquePtr is better than SrsAutoFree because it has the same API to standard unique ptr. ```cpp SrsUniquePtr<MyClass> ptr(new MyClass()); ptr->do_something(); MyClass* p = ptr.get(); ``` SrsAutoFree actually uses a pointer to a pointer, so it can be set to NULL, allowing the pointer's value to be changed later (this usage is different from SrsUniquePtr). ```cpp // OK to free ptr correctly. MyClass* ptr; SrsAutoFree(MyClass, ptr); ptr = new MyClass(); // Crash because ptr is an invalid pointer. MyClass* ptr; SrsUniquePtr<MyClass> ptr(ptr); ptr = new MyClass(); ``` Additionally, SrsAutoFreeH can use specific release functions, which SrsUniquePtr does not support. --------- Co-authored-by: Jacob Su <suzp1984@gmail.com>
This commit is contained in:
parent
baf22d01c1
commit
23d2602c34
72 changed files with 1720 additions and 1669 deletions
|
|
@ -125,11 +125,10 @@ srs_error_t SrsRawH264Stream::mux_sequence_header(string sps, string pps, string
|
|||
// Nbytes of pps:
|
||||
// pictureParameterSetNALUnit
|
||||
int nb_packet = 5 + (3 + (int)sps.length()) + (3 + (int)pps.length());
|
||||
char* packet = new char[nb_packet];
|
||||
SrsAutoFreeA(char, packet);
|
||||
|
||||
SrsUniquePtr<char[]> packet(new char[nb_packet]);
|
||||
|
||||
// use stream to generate the h264 packet.
|
||||
SrsBuffer stream(packet, nb_packet);
|
||||
SrsBuffer stream(packet.get(), nb_packet);
|
||||
|
||||
// decode the SPS:
|
||||
// @see: 7.3.2.1.1, ISO_IEC_14496-10-AVC-2012.pdf, page 62
|
||||
|
|
@ -186,7 +185,7 @@ srs_error_t SrsRawH264Stream::mux_sequence_header(string sps, string pps, string
|
|||
// 5.3.4.2.1 Syntax, ISO_IEC_14496-15-AVC-format-2012.pdf, page 16
|
||||
// profile_idc == 100 || profile_idc == 110 || profile_idc == 122 || profile_idc == 144
|
||||
|
||||
sh = string(packet, nb_packet);
|
||||
sh = string(packet.get(), nb_packet);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
@ -200,11 +199,10 @@ srs_error_t SrsRawH264Stream::mux_ipb_frame(char* frame, int nb_frame, string& i
|
|||
// Nbytes of nalu.
|
||||
// NALUnit
|
||||
int nb_packet = 4 + nb_frame;
|
||||
char* packet = new char[nb_packet];
|
||||
SrsAutoFreeA(char, packet);
|
||||
|
||||
SrsUniquePtr<char[]> packet(new char[nb_packet]);
|
||||
|
||||
// use stream to generate the h264 packet.
|
||||
SrsBuffer stream(packet, nb_packet);
|
||||
SrsBuffer stream(packet.get(), nb_packet);
|
||||
|
||||
// 5.3.4.2.1 Syntax, ISO_IEC_14496-15-AVC-format-2012.pdf, page 16
|
||||
// lengthSizeMinusOne, or NAL_unit_length, always use 4bytes size
|
||||
|
|
@ -217,7 +215,7 @@ srs_error_t SrsRawH264Stream::mux_ipb_frame(char* frame, int nb_frame, string& i
|
|||
// NALUnit
|
||||
stream.write_bytes(frame, nb_frame);
|
||||
|
||||
ibp = string(packet, nb_packet);
|
||||
ibp = string(packet.get(), nb_packet);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
@ -406,11 +404,10 @@ srs_error_t SrsRawHEVCStream::mux_sequence_header(std::string vps, std::string s
|
|||
}
|
||||
|
||||
int nb_packet = 23 + 5 + (int)vps.length() + 5 + (int)sps.length() + 5 + pps_size - 2;
|
||||
char* packet = new char[nb_packet];
|
||||
SrsAutoFreeA(char, packet);
|
||||
SrsUniquePtr<char[]> packet(new char[nb_packet]);
|
||||
|
||||
// use stream to generate the hevc packet.
|
||||
SrsBuffer stream(packet, nb_packet);
|
||||
SrsBuffer stream(packet.get(), nb_packet);
|
||||
|
||||
SrsFormat format;
|
||||
if ((err = format.initialize()) != srs_success) {
|
||||
|
|
@ -511,7 +508,7 @@ srs_error_t SrsRawHEVCStream::mux_sequence_header(std::string vps, std::string s
|
|||
}
|
||||
}
|
||||
|
||||
hvcC = string(packet, nb_packet);
|
||||
hvcC = string(packet.get(), nb_packet);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
@ -525,11 +522,10 @@ srs_error_t SrsRawHEVCStream::mux_ipb_frame(char *frame, int nb_frame, std::stri
|
|||
// Nbytes of nalu.
|
||||
// NALUnit
|
||||
int nb_packet = 4 + nb_frame;
|
||||
char *packet = new char[nb_packet];
|
||||
SrsAutoFreeA(char, packet);
|
||||
SrsUniquePtr<char[]> packet(new char[nb_packet]);
|
||||
|
||||
// use stream to generate the h265 packet.
|
||||
SrsBuffer stream(packet, nb_packet);
|
||||
SrsBuffer stream(packet.get(), nb_packet);
|
||||
|
||||
// 5.3.4.2.1 Syntax, ISO_IEC_14496-15-AVC-format-2012.pdf, page 16
|
||||
// lengthSizeMinusOne, or NAL_unit_length, always use 4bytes size
|
||||
|
|
@ -542,7 +538,7 @@ srs_error_t SrsRawHEVCStream::mux_ipb_frame(char *frame, int nb_frame, std::stri
|
|||
// NALUnit
|
||||
stream.write_bytes(frame, nb_frame);
|
||||
|
||||
ibp = string(packet, nb_packet);
|
||||
ibp = string(packet.get(), nb_packet);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue