Search for SPS NALU rather than assuming its position
Summary: The implementation of H264AnnexBBufferHasVideoFormatDescription was assuming that the SPS NALU is either the first NALU in the stream, or the second one, in case an AUD NALU is present in the first location. This change removes this assumption and instead searches for the SPS NALU, failing only if we can't find one. In addition, it cleans up some binary buffer manipulation code, using the the parsed NALU indices we already have in AnnexBBufferReader instead. Test Plan: Unit tests Change-Id: Id9715aa1d751f0ba1a1992def2b690607896df56 bug: webrtc:8922 Change-Id: Id9715aa1d751f0ba1a1992def2b690607896df56 Reviewed-on: https://webrtc-review.googlesource.com/49982 Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Kári Helgason <kthelgason@webrtc.org> Cr-Commit-Position: refs/heads/master@{#22205}
This commit is contained in:
committed by
Commit Bot
parent
0efa941d2f
commit
2fcb834bb4
@ -46,11 +46,6 @@ bool H264AnnexBBufferToCMSampleBuffer(const uint8_t* annexb_buffer,
|
||||
CMVideoFormatDescriptionRef video_format,
|
||||
CMSampleBufferRef* out_sample_buffer);
|
||||
|
||||
// Returns true if the type of the first NALU in the supplied Annex B buffer is
|
||||
// the SPS type.
|
||||
bool H264AnnexBBufferHasVideoFormatDescription(const uint8_t* annexb_buffer,
|
||||
size_t annexb_buffer_size);
|
||||
|
||||
// Returns a video format description created from the sps/pps information in
|
||||
// the Annex B buffer. If there is no such information, nullptr is returned.
|
||||
// The caller is responsible for releasing the description.
|
||||
@ -74,6 +69,15 @@ class AnnexBBufferReader final {
|
||||
// If the buffer has no remaining NALUs this will return zero.
|
||||
size_t BytesRemaining() const;
|
||||
|
||||
// Reset the reader to start reading from the first NALU
|
||||
void SeekToStart();
|
||||
|
||||
// Seek to the next position that holds a NALU of the desired type,
|
||||
// or the end if no such NALU is found.
|
||||
// Return true if a NALU of the desired type is found, false if we
|
||||
// reached the end instead
|
||||
bool SeekToNextNaluOfType(H264::NaluType type);
|
||||
|
||||
private:
|
||||
// Returns the the next offset that contains NALU data.
|
||||
size_t FindNextNaluHeader(const uint8_t* start,
|
||||
|
||||
Reference in New Issue
Block a user