]> git.sesse.net Git - ffmpeg/blobdiff - libavformat/av1.h
avdevice: Constify all devices
[ffmpeg] / libavformat / av1.h
index 9f2a71f35356c021e884632f6cd0494dd9f88670..dd5b47dc252b868c0857bde754a54bd6400bfb77 100644 (file)
 
 #include "avio.h"
 
+typedef struct AV1SequenceParameters {
+    uint8_t profile;
+    uint8_t level;
+    uint8_t tier;
+    uint8_t bitdepth;
+    uint8_t monochrome;
+    uint8_t chroma_subsampling_x;
+    uint8_t chroma_subsampling_y;
+    uint8_t chroma_sample_position;
+    uint8_t color_description_present_flag;
+    uint8_t color_primaries;
+    uint8_t transfer_characteristics;
+    uint8_t matrix_coefficients;
+    uint8_t color_range;
+} AV1SequenceParameters;
+
 /**
  * Filter out AV1 OBUs not meant to be present in ISOBMFF sample data and write
  * the resulting bitstream to the provided AVIOContext.
 int ff_av1_filter_obus(AVIOContext *pb, const uint8_t *buf, int size);
 
 /**
- * Filter out AV1 OBUs not meant to be present in ISOBMFF sample data and write
- * the resulting bitstream to a newly allocated data buffer.
+ * Filter out AV1 OBUs not meant to be present in ISOBMFF sample data and return
+ * the result in a data buffer, avoiding allocations and copies if possible.
  *
- * @param pb pointer to the AVIOContext where the filtered bitstream shall be
- *           written
- * @param buf input data buffer
- * @param out pointer to pointer that will hold the allocated data buffer
+ * @param in input data buffer
+ * @param out pointer to pointer for the returned buffer. In case of success,
+ *            it is independently allocated if and only if `*out` differs from in.
  * @param size size of the input data buffer. The size of the resulting output
-               data buffer will be written here
+ *             data buffer will be written here
+ * @param offset offset of the returned data inside `*out`: It runs from
+ *               `*out + offset` (inclusive) to `*out + offset + size`
+ *               (exclusive); is zero if `*out` is independently allocated.
  *
- * @return the amount of bytes written in case of success, a negative AVERROR
- *         code in case of failure. On failure, out and size are unchanged
+ * @return 0 in case of success, a negative AVERROR code in case of failure.
+ *         On failure, *out and *size are unchanged
+ * @note *out will be treated as unintialized on input and will not be freed.
+ */
+int ff_av1_filter_obus_buf(const uint8_t *in, uint8_t **out,
+                           int *size, int *offset);
+
+/**
+ * Parses a Sequence Header from the the provided buffer.
+ *
+ * @param seq pointer to the AV1SequenceParameters where the parsed values will
+ *            be written
+ * @param buf input data buffer
+ * @param size size in bytes of the input data buffer
+ *
+ * @return >= 0 in case of success, a negative AVERROR code in case of failure
  */
-int ff_av1_filter_obus_buf(const uint8_t *buf, uint8_t **out, int *size);
+int ff_av1_parse_seq_header(AV1SequenceParameters *seq, const uint8_t *buf, int size);
 
 /**
  * Writes AV1 extradata (Sequence Header and Metadata OBUs) to the provided
  * AVIOContext.
  *
- * @param pb pointer to the AVIOContext where the hvcC shall be written
+ * @param pb pointer to the AVIOContext where the av1C box shall be written
  * @param buf input data buffer
  * @param size size in bytes of the input data buffer
  *