[FFmpeg-devel] [PATCH] lavc: add a pkt_pos field to AVFrame
Stefano Sabatini
stefano.sabatini-lala at poste.it
Fri Apr 29 12:33:26 CEST 2011
On date Friday 2011-04-29 12:31:35 +0200, Stefano Sabatini encoded:
> This is similar to what was done with pkt_pts. This simplifies the
> operation of extracting the pos information from the AVPacket, and
> allows further simplifications.
> ---
> cmdutils.c | 1 +
> ffplay.c | 2 +-
> libavcodec/avcodec.h | 7 +++++++
> libavcodec/rawdec.c | 1 +
> libavcodec/utils.c | 10 ++++++++--
> libavfilter/vsrc_movie.c | 3 +--
> 6 files changed, 19 insertions(+), 5 deletions(-)
>
> diff --git a/cmdutils.c b/cmdutils.c
> index 5ad45e1..f885a7c 100644
> --- a/cmdutils.c
> +++ b/cmdutils.c
> @@ -897,6 +897,7 @@ int get_filtered_video_frame(AVFilterContext *ctx, AVFrame *frame,
>
> memcpy(frame->data, picref->data, sizeof(frame->data));
> memcpy(frame->linesize, picref->linesize, sizeof(frame->linesize));
> + frame->pkt_pos = picref->pos;
> frame->interlaced_frame = picref->video->interlaced;
> frame->top_field_first = picref->video->top_field_first;
> frame->key_frame = picref->video->key_frame;
> diff --git a/ffplay.c b/ffplay.c
> index 3cd3c3f..35500d0 100644
> --- a/ffplay.c
> +++ b/ffplay.c
> @@ -1687,7 +1687,7 @@ static int input_request_frame(AVFilterLink *link)
> av_free_packet(&pkt);
>
> picref->pts = pts;
> - picref->pos = pkt.pos;
> + picref->pos = priv->frame->pkt_pos;
> picref->video->pixel_aspect = priv->is->video_st->codec->sample_aspect_ratio;
> avfilter_start_frame(link, picref);
> avfilter_draw_slice(link, 0, link->h, 1);
> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> index b69230f..251a038 100644
> --- a/libavcodec/avcodec.h
> +++ b/libavcodec/avcodec.h
> @@ -1004,6 +1004,13 @@ typedef struct AVPanScan{
> * - decoding: set by libavcodec, read by user.\
> */\
> int64_t best_effort_timestamp;\
> +\
> + /**\
> + * reordered pos from the last AVPacket that has been input into the decoder\
> + * - encoding: unused\
> + * - decoding: Read by user.\
> + */\
> + int64_t pkt_pos;\
>
>
> #define FF_QSCALE_TYPE_MPEG1 0
> diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c
> index d9993c0..029bee2 100644
> --- a/libavcodec/rawdec.c
> +++ b/libavcodec/rawdec.c
> @@ -124,6 +124,7 @@ static int raw_decode(AVCodecContext *avctx,
> frame->top_field_first = avctx->coded_frame->top_field_first;
> frame->reordered_opaque = avctx->reordered_opaque;
> frame->pkt_pts = avctx->pkt->pts;
> + frame->pkt_pos = avctx->pkt->pos;
>
> //2bpp and 4bpp raw in avi and mov (yes this is ugly ...)
> if (context->buffer) {
> diff --git a/libavcodec/utils.c b/libavcodec/utils.c
> index 45bf73f..ec22d8e 100644
> --- a/libavcodec/utils.c
> +++ b/libavcodec/utils.c
> @@ -341,8 +341,13 @@ int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){
> }
> s->internal_buffer_count++;
>
> - if(s->pkt) pic->pkt_pts= s->pkt->pts;
> - else pic->pkt_pts= AV_NOPTS_VALUE;
> + if (s->pkt) {
> + pic->pkt_pts = s->pkt->pts;
> + pic->pkt_pos = s->pkt->pos;
> + } else {
> + pic->pkt_pts = AV_NOPTS_VALUE;
> + pic->pkt_pos = -1;
> + }
While at it we could maybe add an AV_NOPOS_VALUE macro.
--
FFmpeg = Fantastic Fundamental MultiPurpose Erudite Guide
More information about the ffmpeg-devel
mailing list