[FFmpeg-devel] [PATCH v2 2/3] avcodec/rawenc: propagate the Producer Reference time
James Almer
jamrial at gmail.com
Sat Nov 30 04:21:55 EET 2024
On 11/1/2024 2:21 PM, Clément Péron wrote:
> 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 at gmail.com>
> ---
> libavcodec/rawenc.c | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> 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);
What generated this side data? Blindly passing it through doesn't seem
like a good idea. An encoder should only generate one with a timestamp
for when the frame finished encoding, or when the frame was first
submitted to the encoder, but not bypass some value from some unknown
source blindly.
If what you want is a timestamp from when an encoder produced output,
then it should be added to the generic code in encode.c, after the
receive_packet() call, and attached to the output packet. If you want
one for when the frame was first fed to the encoder, then before
receive_packet() (and probably stored somewhere to be attached after the
packet is generated).
There's no need for a prft frame side data for this.
> + 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;
> }
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 495 bytes
Desc: OpenPGP digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20241129/dadef1a6/attachment.sig>
More information about the ffmpeg-devel
mailing list