mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-06-14 03:55:58 +08:00
整理H264/H265 Frame对象及相关代码
This commit is contained in:
@@ -50,56 +50,6 @@ bool getHEVCInfo(const string &strVps, const string &strSps, int &iVideoWidth, i
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
bool H265Frame::keyFrame() const {
|
||||
return isKeyFrame(H265_TYPE(_buffer[_prefix_size]), _buffer.data() + _prefix_size);
|
||||
}
|
||||
|
||||
bool H265Frame::configFrame() const {
|
||||
switch (H265_TYPE(_buffer[_prefix_size])) {
|
||||
case H265Frame::NAL_VPS:
|
||||
case H265Frame::NAL_SPS:
|
||||
case H265Frame::NAL_PPS : return true;
|
||||
default : return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool H265Frame::isKeyFrame(int type, const char *ptr) {
|
||||
if (ptr) {
|
||||
return (((*((uint8_t *) ptr + 2)) >> 7) & 0x01) == 1 && (type == NAL_IDR_N_LP || type == NAL_IDR_W_RADL);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
H265Frame::H265Frame(){
|
||||
_codec_id = CodecH265;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
H265FrameNoCacheAble::H265FrameNoCacheAble(char *ptr, size_t size, uint32_t dts, uint32_t pts, size_t prefix_size) {
|
||||
_ptr = ptr;
|
||||
_size = size;
|
||||
_dts = dts;
|
||||
_pts = pts;
|
||||
_prefix_size = prefix_size;
|
||||
_codec_id = CodecH265;
|
||||
}
|
||||
|
||||
bool H265FrameNoCacheAble::keyFrame() const {
|
||||
return H265Frame::isKeyFrame(H265_TYPE(((uint8_t *) _ptr)[_prefix_size]), _ptr + _prefix_size);
|
||||
}
|
||||
|
||||
bool H265FrameNoCacheAble::configFrame() const {
|
||||
switch (H265_TYPE(((uint8_t *) _ptr)[_prefix_size])) {
|
||||
case H265Frame::NAL_VPS:
|
||||
case H265Frame::NAL_SPS:
|
||||
case H265Frame::NAL_PPS: return true;
|
||||
default: return false;
|
||||
}
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
H265Track::H265Track(const string &vps,const string &sps, const string &pps,int vps_prefix_len, int sps_prefix_len, int pps_prefix_len) {
|
||||
_vps = vps.substr(vps_prefix_len);
|
||||
_sps = sps.substr(sps_prefix_len);
|
||||
@@ -154,17 +104,16 @@ void H265Track::inputFrame(const Frame::Ptr &frame) {
|
||||
}
|
||||
|
||||
void H265Track::inputFrame_l(const Frame::Ptr &frame) {
|
||||
int type = H265_TYPE(((uint8_t *) frame->data() + frame->prefixSize())[0]);
|
||||
if (H265Frame::isKeyFrame(type, frame->data() + frame->prefixSize())) {
|
||||
if (frame->keyFrame()) {
|
||||
insertConfigFrame(frame);
|
||||
VideoTrack::inputFrame(frame);
|
||||
_is_idr = true;
|
||||
return;
|
||||
}
|
||||
_is_idr = false;
|
||||
|
||||
_is_idr = false;
|
||||
//非idr帧
|
||||
switch (type) {
|
||||
switch (H265_TYPE(((uint8_t *) frame->data() + frame->prefixSize())[0])) {
|
||||
case H265Frame::NAL_VPS: {
|
||||
_vps = string(frame->data() + frame->prefixSize(), frame->size() - frame->prefixSize());
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user