[Libav-user] Odp: Re: How to pass custom information to AVPacket and receive it in AVFrame?
Wodzu
brucedickinson at wp.pl
Mon Sep 30 13:37:05 EEST 2024
No that is not it, the same goes for opaque field (I've managed to get it copied via AV_CODEC_FLAG_COPY_OPAQUE) but thanks anyway. Dnia 30 września 2024 09:36 Ben Harper <rogojin at gmail.com> napisał(a): I'm afraid I don't know good answers to your questions, but you do say that you're manipulating the pos, PTS, etc fields. Maybe your manipulation of them is causing the presentation order/buffering that you mention. On Sun, 29 Sept 2024, 13:16 Wodzu, < brucedickinson at wp.pl > wrote: Hello, I am decoding a raw h264 stream based on example from: github.com https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/decode_video.c The problem is that I need to somehow tie up a custom information to AVPacket and receive it in AVFrame. Because it is raw h264, I am sure that one AVPacket sent is equal to one AVFrame received. I've tried the following: AVPacket->opaque but this field is not passed to AVFrame->opaque. So I've tried some ugly hacks and use one of these fields: av_packet->duration = av_packet->pts = av_packet->dts = av_packet->pos = These can be read from frame after calling: avcodec_receive_frame(codec_context, frame); However, there are two strange things that are occurring: When I am sending the very first IFrame (which also contains PPS and SPS) via avcodec_send_packet(codec_context, packet) and then I want to receive a corresponding frame via avcodec_receive_frame(), the function will return me AVERROR(EAGAIN). I don't understand why it needs more data if what it got is a full IFrame?. I need to send two more packets (each containing exactly one frame) to get first frame out of avcodec_receive_frame(). Why the decoder decides to store two frames in its buffer before sending me anything. Even though the frames are received in correct order (I've saved them as images and checked them), the fields like av_packet->pos which was passed to frame and can be read through frame->pkt_pos are in not correct order. Take a look: avcodec_send_packet - (av_packet->pos): 0 avcodec_send_packet - (av_packet->pos): 1 avcodec_send_packet - (av_packet->pos): 2 avcodec_receive_frame - (frame->pkt_pos): 0 <- first frame received after sending three packets, each containing one frame. avcodec_send_packet - (av_packet->pos): 3 avcodec_receive_frame - (frame->pkt_pos): 2 <- mixed order, pkt_pos should be 1? avcodec_send_packet - (av_packet->pos): 4 avcodec_receive_frame - (frame->pkt_pos): 1 avcodec_send_packet - (av_packet->pos): 5 avcodec_receive_frame - (frame->pkt_pos): 3 avcodec_send_packet - (av_packet->pos): 6 avcodec_receive_frame - (frame->pkt_pos): 4 avcodec_send_packet - (av_packet->pos): 7 avcodec_receive_frame - (frame->pkt_pos): 5 avcodec_send_packet - (av_packet->pos): 8 avcodec_receive_frame - (frame->pkt_pos): 6 avcodec_send_packet - (av_packet->pos): 9 flush called avcodec_receive_frame - (frame->pkt_pos): 8 <- again mixed order, should be 7. avcodec_receive_frame - (frame->pkt_pos): 7 avcodec_receive_frame - (frame->pkt_pos): 9 I would be grateful if you could: 1. Show me how can I force decoder to send me a frame immediately rather thanb keeping it in its buffer. 2. Show me how to fix that strange ordering. 3. Given any other advice how could I pass information in AVPacket and receive it in corresponding AVFrame. Thank you. _______________________________________________ Libav-user mailing list Libav-user at ffmpeg.org ffmpeg.org https://ffmpeg.org/mailman/listinfo/libav-user To unsubscribe, visit link above, or email libav-user-request at ffmpeg.org with subject "unsubscribe". _______________________________________________ Libav-user mailing list Libav-user at ffmpeg.org ffmpeg.org https://ffmpeg.org/mailman/listinfo/libav-user To unsubscribe, visit link above, or email libav-user-request at ffmpeg.org with subject "unsubscribe".
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://ffmpeg.org/pipermail/libav-user/attachments/20240930/ff0030d1/attachment.htm>
More information about the Libav-user
mailing list