/* nal_units.h
*
* Copyright (c) 2003-2021 HandBrake Team
* This file is part of the HandBrake source code.
* Homepage: .
* It may be used under the terms of the GNU General Public License v2.
* For full terms see the file COPYING file or visit http://www.gnu.org/licenses/gpl-2.0.html
*/
#ifndef HANDBRAKE_NAL_UNITS_H
#define HANDBRAKE_NAL_UNITS_H
#include
#include "handbrake/common.h"
/*
* Write a NAL unit of the specified size to the provided
* output buffer, using the requested output format.
* Returns the amount (in bytes) of data written to the buffer.
*
* The provided NAL unit must start with the NAL unit header.
*
* Note: the buffer is assumed to be large enough to hold the NAL unit
* as well as any additional data the function may prepend/append to it.
*
* The caller may check the minimum required buffer size by passing a
* NULL buffer to the function and checking the returned size value.
*/
size_t hb_nal_unit_write_annexb(uint8_t *buf, const uint8_t *nal_unit, const size_t nal_unit_size);
size_t hb_nal_unit_write_isomp4(uint8_t *buf, const uint8_t *nal_unit, const size_t nal_unit_size);
/*
* Search the provided data buffer for NAL units in Annex B format.
*
* Returns a pointer to the start (start code prefix excluded) of the
* first NAL unit found, or NULL if no NAL units were found in the buffer.
*
* On input, size holds the length of the provided data buffer.
* On output, size holds the length of the returned NAL unit.
*/
uint8_t* hb_annexb_find_next_nalu(const uint8_t *start, size_t *size);
/*
* Returns a newly-allocated buffer holding a copy of the provided
* NAL unit bitstream data, converted to the requested format.
*/
hb_buffer_t* hb_nal_bitstream_annexb_to_mp4(const uint8_t *data, const size_t size);
hb_buffer_t* hb_nal_bitstream_mp4_to_annexb(const uint8_t *data, const size_t size, const uint8_t nal_length_size);
#endif // HANDBRAKE_NAL_UNITS_H