[FFmpeg-devel] [PATCH] libavfilter: pass QP table through the filter chain
Michael Niedermayer
michaelni at gmx.at
Fri Sep 7 03:17:23 CEST 2012
On Thu, Sep 06, 2012 at 10:56:18PM +0200, Stefano Sabatini wrote:
> On date Wednesday 2012-09-05 18:01:54 +0200, Michael Niedermayer encoded:
> > On Wed, Sep 05, 2012 at 04:53:52PM +0200, Stefano Sabatini wrote:
> > > On date Wednesday 2012-09-05 12:46:43 +0200, Michael Niedermayer encoded:
> > > > Any volunteers to port the pp and spp filters from libmpcodec?
> > > >
> > > > Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
> > > > ---
> > > > libavfilter/avcodec.c | 8 ++++++++
> > > > libavfilter/avfilter.h | 2 ++
> > > > libavfilter/buffer.c | 23 ++++++++++++++++++++++-
> > > > libavfilter/version.h | 4 ++--
> > > > libavfilter/video.c | 1 +
> > > > 5 files changed, 35 insertions(+), 3 deletions(-)
> > > >
> > > > diff --git a/libavfilter/avcodec.c b/libavfilter/avcodec.c
> > > > index f452303..51de6f5 100644
> > > > --- a/libavfilter/avcodec.c
> > > > +++ b/libavfilter/avcodec.c
> > > > @@ -42,6 +42,14 @@ int avfilter_copy_frame_props(AVFilterBufferRef *dst, const AVFrame *src)
> > > > dst->video->top_field_first = src->top_field_first;
> > > > dst->video->key_frame = src->key_frame;
> > > > dst->video->pict_type = src->pict_type;
> > > > + av_freep(&dst->video->qp_table);
> > > > + dst->video->qp_stride = 0;
> > > > + if (src->qscale_table) {
> > > > + int qsize = src->qstride ? src->qstride * ((src->height+15)/16) : (src->width+15)/16;
> > > > + dst->video->qp_stride = src->qstride;
> > > > + dst->video->qp_table = av_malloc(qsize);
> > > > + memcpy(dst->video->qp_table, src->qscale_table, qsize);
> > >
> > > What if malloc fails?
> >
> > fixed
> >
> >
> > >
> > > Also maybe we should factorize the code.
> >
> > yes i wanted to look into that in a subsequent patch
> >
> >
> > >
> > > > + }
> > > > break;
> > > > case AVMEDIA_TYPE_AUDIO:
> > > > dst->audio->sample_rate = src->sample_rate;
> > > > diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h
> > > > index c0575ce..5316559 100644
> > > > --- a/libavfilter/avfilter.h
> > > > +++ b/libavfilter/avfilter.h
> > > > @@ -131,6 +131,8 @@ typedef struct AVFilterBufferRefVideoProps {
> > > > int top_field_first; ///< field order
> > > > enum AVPictureType pict_type; ///< picture type of the frame
> > > > int key_frame; ///< 1 -> keyframe, 0-> not
> > > > + int qp_stride; ///< qp_table stride
> > > > + int8_t *qp_table; ///< array of Quantization Parameters
> > >
> > > "stride" is kinda an MPlayerism.
> > >
> > > Some alternatives:
> > > qp_table | qp_linesize
> > > qp | qp_linesize
> > > qp_data | qp_linesize
> > > qp_data | qp_data_linesize
> > > qp_table | qp_table_linesize
> >
> > qp alone is wrong, qp_data is not adding much information beyond qp
> > the linesize vs stride is bikeshed, we use stride for the matching
> > field in AVFrame though.
> > Iam happy if people rename the field to what they prefer ...
>
> Then what about the last:
> qp_table | qp_table_linesize
changed
>
> or qp_table_stride if you prefer.
>
> In AVCodecContext it is qscale_table/qstride, but this nomenclature is
> not very self-consistent (it's not apparent the relation between the
> two fields). Sorry to be boring on this side, but I think names matter.
>
> > [...]
> > > > @@ -173,7 +184,17 @@ void avfilter_copy_buffer_ref_props(AVFilterBufferRef *dst, AVFilterBufferRef *s
> > > > dst->pos = src->pos;
> > > >
> > > > switch (src->type) {
> > > > - case AVMEDIA_TYPE_VIDEO: *dst->video = *src->video; break;
> > > > + case AVMEDIA_TYPE_VIDEO: {
> > > > + if(dst->video->qp_table)
> > > > + av_freep(&dst->video->qp_table);
> > > > + *dst->video = *src->video;
> > > > + if(dst->video->qp_table) {
> > > ^^^
> > > src->video->qp_table?
> >
> > they are the same
>
> Yes, but it looks strange to set a struct if it is already defined in
> the *destination*.
fixed
>
> ...
>
> Nit: if_(...) {
changed
applied
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
There will always be a question for which you do not know the correct awnser.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20120907/9868f8ec/attachment.asc>
More information about the ffmpeg-devel
mailing list