mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-10-28 03:44:52 +08:00
obs-ffmpeg: use NvEncGetSequenceParams for NVENC header
The NvEncGetSequenceParams is the function used for extracting the header, so let's use that rather than manually splitting the packet.
This commit is contained in:
@@ -1111,33 +1111,24 @@ static bool get_encoded_packet(struct nvenc_data *enc, bool finalize)
|
||||
}
|
||||
|
||||
if (enc->first_packet) {
|
||||
uint8_t *new_packet;
|
||||
size_t size;
|
||||
NV_ENC_SEQUENCE_PARAM_PAYLOAD payload = {0};
|
||||
uint8_t buf[256];
|
||||
uint32_t size = 0;
|
||||
|
||||
payload.version = NV_ENC_SEQUENCE_PARAM_PAYLOAD_VER;
|
||||
payload.spsppsBuffer = buf;
|
||||
payload.inBufferSize = sizeof(buf);
|
||||
payload.outSPSPPSPayloadSize = &size;
|
||||
|
||||
nv.nvEncGetSequenceParams(s, &payload);
|
||||
enc->header = bmemdup(buf, size);
|
||||
enc->header_size = size;
|
||||
enc->first_packet = false;
|
||||
|
||||
if (enc->codec == CODEC_HEVC) {
|
||||
obs_extract_hevc_headers(
|
||||
lock.bitstreamBufferPtr,
|
||||
lock.bitstreamSizeInBytes, &new_packet,
|
||||
&size, &enc->header, &enc->header_size,
|
||||
&enc->sei, &enc->sei_size);
|
||||
|
||||
} else if (enc->codec == CODEC_H264) {
|
||||
obs_extract_avc_headers(
|
||||
lock.bitstreamBufferPtr,
|
||||
lock.bitstreamSizeInBytes, &new_packet,
|
||||
&size, &enc->header, &enc->header_size,
|
||||
&enc->sei, &enc->sei_size);
|
||||
}
|
||||
|
||||
da_copy_array(enc->packet_data, new_packet, size);
|
||||
bfree(new_packet);
|
||||
} else {
|
||||
da_copy_array(enc->packet_data, lock.bitstreamBufferPtr,
|
||||
lock.bitstreamSizeInBytes);
|
||||
}
|
||||
|
||||
da_copy_array(enc->packet_data, lock.bitstreamBufferPtr,
|
||||
lock.bitstreamSizeInBytes);
|
||||
|
||||
enc->packet_pts = (int64_t)lock.outputTimeStamp;
|
||||
enc->packet_keyframe = lock.pictureType == NV_ENC_PIC_TYPE_IDR;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user