]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/packet_internal.h
avcodec/packet_internal: move the next pointer in PacketList to the top of the struct
[ffmpeg] / libavcodec / packet_internal.h
index cdb9a27f2f586eb0f078d1ee369962a91e4bf308..a10931c106e547da1b5e3ffd38049557615052e3 100644 (file)
 
 #include "packet.h"
 
+typedef struct PacketList {
+    struct PacketList *next;
+    AVPacket pkt;
+} PacketList;
+
+/**
+ * Append an AVPacket to the list.
+ *
+ * @param head  List head element
+ * @param tail  List tail element
+ * @param pkt   The packet being appended. The data described in it will
+ *              be made reference counted if it isn't already.
+ * @param copy  A callback to copy the contents of the packet to the list.
+                May be null, in which case the packet's reference will be
+                moved to the list.
+ * @return 0 on success, negative AVERROR value on failure. On failure,
+           the packet and the list are unchanged.
+ */
+int avpriv_packet_list_put(PacketList **head, PacketList **tail,
+                           AVPacket *pkt,
+                           int (*copy)(AVPacket *dst, const AVPacket *src),
+                           int flags);
+
+/**
+ * Remove the oldest AVPacket in the list and return it.
+ *
+ * @note The pkt will be overwritten completely on success. The caller
+ *       owns the packet and must unref it by itself.
+ *
+ * @param head List head element
+ * @param tail List tail element
+ * @param pkt  Pointer to an AVPacket struct
+ * @return 0 on success, and a packet is returned. AVERROR(EAGAIN) if
+ *         the list was empty.
+ */
+int avpriv_packet_list_get(PacketList **head, PacketList **tail,
+                           AVPacket *pkt);
+
+/**
+ * Wipe the list and unref all the packets in it.
+ *
+ * @param head List head element
+ * @param tail List tail element
+ */
+void avpriv_packet_list_free(PacketList **head, PacketList **tail);
+
 int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type);
 
 int ff_side_data_set_prft(AVPacket *pkt, int64_t timestamp);