diff mbox series

[FFmpeg-devel,v2,2/3] avcodec/rawenc: propagate the Producer Reference time

Message ID 20241101173929.70837-3-peron.clem@gmail.com
State New
Headers show
Series Propagate PRFT side data | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished

Commit Message

Clément Péron Nov. 1, 2024, 5:21 p.m. UTC
The Producer Reference time contains the source time when the frame
has been produced. This is usefull in the muxer so propagate it.

Signed-off-by: Clément Péron <peron.clem@gmail.com>
---
 libavcodec/rawenc.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)
diff mbox series

Patch

diff --git a/libavcodec/rawenc.c b/libavcodec/rawenc.c
index 8c577006d9..f238c8e165 100644
--- a/libavcodec/rawenc.c
+++ b/libavcodec/rawenc.c
@@ -49,6 +49,8 @@  static av_cold int raw_encode_init(AVCodecContext *avctx)
 static int raw_encode(AVCodecContext *avctx, AVPacket *pkt,
                       const AVFrame *frame, int *got_packet)
 {
+    AVFrameSideData *side_data;
+
     int ret = av_image_get_buffer_size(frame->format,
                                        frame->width, frame->height, 1);
 
@@ -78,6 +80,16 @@  static int raw_encode(AVCodecContext *avctx, AVPacket *pkt,
         }
     }
     *got_packet = 1;
+
+    // Forward the PRFT to Mux
+    side_data = av_frame_get_side_data(frame, AV_FRAME_DATA_PRFT);
+    if (side_data && side_data->size) {
+        uint8_t *buf = av_packet_new_side_data(pkt, AV_PKT_DATA_PRFT, side_data->size);
+        if (!buf)
+            return AVERROR(ENOMEM);
+        memcpy(buf, side_data->data, side_data->size);
+    }
+
     return 0;
 }