[FFmpeg-devel] [RFC] Windows issues with av_destruct_packet_nofree

Art Clarke aclarke
Thu Feb 19 19:22:32 CET 2009


>
>
> 10min later, maybe theres a better solution, read my reply to reimar
>

Doh!  And I just finished the patch (attached just for posterity).  Where's
your reply to reimar?

- Art

-- 
http://www.xuggle.com/
xu?ggle (z?' gl) v. To freely encode, decode, and experience audio and
video.

Use Xuggle to get the power of FFMPEG in Java.
-------------- next part --------------
Index: libavformat/avformat.h
===================================================================
--- libavformat/avformat.h	(revision 17458)
+++ libavformat/avformat.h	(working copy)
@@ -153,10 +153,31 @@
 } AVPacket;
 #define PKT_FLAG_KEY   0x0001
 
+/**
+ * Alternate packet destructor that clears out the data in a AVPacket
+ * without freeing the memory.
+ *
+ * Use this destructor if you create your own AVPacket values and
+ * want to ensure libavformat doesn't call avfree(void*) on your
+ * underlying data.
+ *
+ * WARNING: Function pointers to this method cannot be used reliably
+ * from a Microsoft Windows program that dynamically loads AVFORMAT.DLL,
+ * because Windows C Compilers (gcc or MSVC) will resolve this declaration
+ * to a stub function inside your executable, not the one in AVFORMAT.DLL.
+ *
+ * Do not assign it directly to AVPacket->destruct in those cases.
+ *
+ * Instead, you can call (assuming AVPacket* your_packet):
+ *   av_init_packet(&fake_packet);
+ *   your_packet->destruct = fake_packet.destruct
+ * to work around the issue.
+ */
 void av_destruct_packet_nofree(AVPacket *pkt);
 
 /**
- * Default packet destructor.
+ * Default AVPacket destructor.  Clears out the data in a AVPacket
+ * and calls av_free(void*) on the underlying memory.
  */
 void av_destruct_packet(AVPacket *pkt);
 



More information about the ffmpeg-devel mailing list