hevc.h 4.12 KB
Newer Older
1 2 3
/*
 * Copyright (c) 2014 Tim Walker <tdskywalker@gmail.com>
 *
4
 * This file is part of FFmpeg.
5
 *
6
 * FFmpeg is free software; you can redistribute it and/or
7 8 9 10
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
11
 * FFmpeg is distributed in the hope that it will be useful,
12 13 14 15 16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
17
 * License along with FFmpeg; if not, write to the Free Software
18 19 20 21 22 23 24 25 26 27 28 29 30 31
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

/**
 * @file
 * internal header for HEVC (de)muxer utilities
 */

#ifndef AVFORMAT_HEVC_H
#define AVFORMAT_HEVC_H

#include <stdint.h>
#include "avio.h"

32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
/**
 * Writes Annex B formatted HEVC NAL units to the provided AVIOContext.
 *
 * The NAL units are converted to an MP4-compatible format (start code prefixes
 * are replaced by 4-byte size fields, as per ISO/IEC 14496-15).
 *
 * If filter_ps is non-zero, any HEVC parameter sets found in the input will be
 * discarded, and *ps_count will be set to the number of discarded PS NAL units.
 *
 * @param pb address of the AVIOContext where the data shall be written
 * @param buf_in address of the buffer holding the input data
 * @param size size (in bytes) of the input buffer
 * @param filter_ps whether to write parameter set NAL units to the output (0)
 *        or to discard them (non-zero)
 * @param ps_count address of the variable where the number of discarded
 *        parameter set NAL units shall be written, may be NULL
 * @return the amount (in bytes) of data written in case of success, a negative
 *         value corresponding to an AVERROR code in case of failure
 */
int ff_hevc_annexb2mp4(AVIOContext *pb, const uint8_t *buf_in,
                       int size, int filter_ps, int *ps_count);

/**
 * Writes Annex B formatted HEVC NAL units to a data buffer.
 *
 * The NAL units are converted to an MP4-compatible format (start code prefixes
 * are replaced by 4-byte size fields, as per ISO/IEC 14496-15).
 *
 * If filter_ps is non-zero, any HEVC parameter sets found in the input will be
 * discarded, and *ps_count will be set to the number of discarded PS NAL units.
 *
 * On output, *size holds the size (in bytes) of the output data buffer.
 *
 * @param buf_in address of the buffer holding the input data
 * @param size address of the variable holding the size (in bytes) of the input
 *        buffer (on input) and of the output buffer (on output)
 * @param buf_out address of the variable holding the address of the output
 *        buffer
 * @param filter_ps whether to write parameter set NAL units to the output (0)
 *        or to discard them (non-zero)
 * @param ps_count address of the variable where the number of discarded
 *        parameter set NAL units shall be written, may be NULL
74 75
 * @return the amount (in bytes) of data written in case of success, a negative
 *         value corresponding to an AVERROR code in case of failure
76 77 78 79
 */
int ff_hevc_annexb2mp4_buf(const uint8_t *buf_in, uint8_t **buf_out,
                           int *size, int filter_ps, int *ps_count);

80 81 82 83 84 85 86 87 88 89 90 91
/**
 * Writes HEVC extradata (parameter sets, declarative SEI NAL units) to the
 * provided AVIOContext.
 *
 * If the extradata is Annex B format, it gets converted to hvcC format before
 * writing.
 *
 * @param pb address of the AVIOContext where the hvcC shall be written
 * @param data address of the buffer holding the data needed to write the hvcC
 * @param size size (in bytes) of the data buffer
 * @param ps_array_completeness whether all parameter sets are in the hvcC (1)
 *        or there may be additional parameter sets in the bitstream (0)
92
 * @return >=0 in case of success, a negative value corresponding to an AVERROR
93 94 95 96 97 98
 *         code in case of failure
 */
int ff_isom_write_hvcc(AVIOContext *pb, const uint8_t *data,
                       int size, int ps_array_completeness);

#endif /* AVFORMAT_HEVC_H */