More fixes to FLV memory bookkeeping.
This commit is contained in:
parent
debce93475
commit
a9df633e87
1 changed files with 36 additions and 44 deletions
|
@ -513,17 +513,15 @@ bool FLV::Tag::DTSCVideoInit(DTSC::Track & video){
|
||||||
if (video.codec == "H264"){
|
if (video.codec == "H264"){
|
||||||
len = video.init.size() + 20;
|
len = video.init.size() + 20;
|
||||||
}
|
}
|
||||||
if (len > 0){
|
if (len <= 0 || !checkBufferSize()){
|
||||||
if ( !checkBufferSize()){
|
return false;
|
||||||
return false;
|
|
||||||
}
|
|
||||||
memcpy(data + 16, video.init.c_str(), len - 20);
|
|
||||||
data[12] = 0; //H264 sequence header
|
|
||||||
data[13] = 0;
|
|
||||||
data[14] = 0;
|
|
||||||
data[15] = 0;
|
|
||||||
data[11] = 0x17; //H264 keyframe (0x07 & 0x10)
|
|
||||||
}
|
}
|
||||||
|
memcpy(data + 16, video.init.c_str(), len - 20);
|
||||||
|
data[12] = 0; //H264 sequence header
|
||||||
|
data[13] = 0;
|
||||||
|
data[14] = 0;
|
||||||
|
data[15] = 0;
|
||||||
|
data[11] = 0x17; //H264 keyframe (0x07 & 0x10)
|
||||||
setLen();
|
setLen();
|
||||||
data[0] = 0x09;
|
data[0] = 0x09;
|
||||||
data[1] = ((len - 15) >> 16) & 0xFF;
|
data[1] = ((len - 15) >> 16) & 0xFF;
|
||||||
|
@ -546,34 +544,31 @@ bool FLV::Tag::DTSCAudioInit(DTSC::Track & audio){
|
||||||
if (audio.codec == "AAC"){
|
if (audio.codec == "AAC"){
|
||||||
len = audio.init.size() + 17;
|
len = audio.init.size() + 17;
|
||||||
}
|
}
|
||||||
if (len > 0){
|
if (len <= 0 || !checkBufferSize()){
|
||||||
if ( !checkBufferSize()){
|
return false;
|
||||||
return false;
|
}
|
||||||
}
|
memcpy(data + 13, audio.init.c_str(), len - 17);
|
||||||
memcpy(data + 13, audio.init.c_str(), len - 17);
|
data[12] = 0; //AAC sequence header
|
||||||
data[12] = 0; //AAC sequence header
|
data[11] = 0;
|
||||||
data[11] = 0;
|
if (audio.codec == "AAC"){
|
||||||
if (audio.codec == "AAC"){
|
data[11] += 0xA0;
|
||||||
data[11] += 0xA0;
|
}
|
||||||
}
|
if (audio.codec == "MP3"){
|
||||||
if (audio.codec == "MP3"){
|
data[11] += 0x20;
|
||||||
data[11] += 0x20;
|
}
|
||||||
}
|
unsigned int datarate = audio.rate;
|
||||||
unsigned int datarate = audio.rate;
|
if (datarate >= 44100){
|
||||||
if (datarate >= 44100){
|
data[11] += 0x0C;
|
||||||
data[11] += 0x0C;
|
}else if (datarate >= 22050){
|
||||||
}else if (datarate >= 22050){
|
data[11] += 0x08;
|
||||||
data[11] += 0x08;
|
}else if (datarate >= 11025){
|
||||||
}else if (datarate >= 11025){
|
data[11] += 0x04;
|
||||||
data[11] += 0x04;
|
}
|
||||||
}
|
if (audio.size == 16){
|
||||||
if (audio.size == 16){
|
data[11] += 0x02;
|
||||||
data[11] += 0x02;
|
}
|
||||||
}
|
if (audio.channels > 1){
|
||||||
if (audio.channels > 1){
|
data[11] += 0x01;
|
||||||
data[11] += 0x01;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
setLen();
|
setLen();
|
||||||
data[0] = 0x08;
|
data[0] = 0x08;
|
||||||
|
@ -689,13 +684,10 @@ bool FLV::Tag::DTSCMetaInit(DTSC::Stream & S, DTSC::Track & videoRef, DTSC::Trac
|
||||||
|
|
||||||
std::string tmp = amfdata.Pack();
|
std::string tmp = amfdata.Pack();
|
||||||
len = tmp.length() + 15;
|
len = tmp.length() + 15;
|
||||||
if (len > 0){
|
if (len <= 0 || checkBufferSize()){
|
||||||
if (checkBufferSize()){
|
return false;
|
||||||
memcpy(data + 11, tmp.c_str(), len - 15);
|
|
||||||
}else{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
memcpy(data + 11, tmp.c_str(), len - 15);
|
||||||
setLen();
|
setLen();
|
||||||
data[0] = 0x12;
|
data[0] = 0x12;
|
||||||
data[1] = ((len - 15) >> 16) & 0xFF;
|
data[1] = ((len - 15) >> 16) & 0xFF;
|
||||||
|
|
Loading…
Add table
Reference in a new issue