@@ -68,39 +68,40 @@ using UniqueAVIOContext = std::
6868using UniqueSwsContext =
6969 std::unique_ptr<SwsContext, Deleter<SwsContext, void , sws_freeContext>>;
7070
71- // These 2 classes are meant to be used in tandem, like so:
72- // ```
73- // AVPacketHandler avPacketHandler;
71+ // These 2 classes share the same underlying AVPacket object. They are meant to
72+ // be used in tandem, like so:
73+ //
74+ // AutoFreedAVPacket autoFreedAVPacket; // <-- malloc for AVPacket happens here
7475// while(...){
75- // ReferencedAVPacket packet(avPacketHandler );
76- // av_read_frame(..., packet.get());
77- // }
78- // ```
76+ // AutoUnrefedAVPacket packet(autoFreedAVPacket );
77+ // av_read_frame(..., packet.get()); <-- av_packet_ref() called by FFmpeg
78+ // } <-- av_packet_unref() called here
79+ //
7980// This achieves a few desirable things:
80- // - Memory allocation of the underlying AVPacket happens only once, when the
81- // avPacketHandler created.
82- // - av_packet_free() is called when avPacketHandler gets out of scope
81+ // - Memory allocation of the underlying AVPacket happens only once, when
82+ // autoFreedAVPacket is created.
83+ // - av_packet_free() is called when autoFreedAVPacket gets out of scope
8384// - av_packet_unref() is automatically called when needed, i.e. at the end of
8485// each loop iteration (or when hitting break / continue). This prevents the
8586// risk of us forgetting to call it.
86- class AVPacketHandler {
87- friend class ReferencedAVPacket ;
87+ class AutoFreedAVPacket {
88+ friend class AutoUnrefedAVPacket ;
8889
8990 private:
9091 AVPacket* avPacket_;
9192
9293 public:
93- AVPacketHandler ();
94- ~AVPacketHandler ();
94+ AutoFreedAVPacket ();
95+ ~AutoFreedAVPacket ();
9596};
9697
97- class ReferencedAVPacket {
98+ class AutoUnrefedAVPacket {
9899 private:
99100 AVPacket* avPacket_;
100101
101102 public:
102- ReferencedAVPacket (AVPacketHandler & shared);
103- ~ReferencedAVPacket ();
103+ AutoUnrefedAVPacket (AutoFreedAVPacket & shared);
104+ ~AutoUnrefedAVPacket ();
104105 AVPacket* get ();
105106 AVPacket* operator ->();
106107};
0 commit comments