[FFmpeg-devel] [PATCH] Implement PAFF in H.264

Michael Niedermayer michaelni
Thu Oct 4 23:19:00 CEST 2007


Hi

On Thu, Oct 04, 2007 at 03:07:09PM -0400, Jeff Downs wrote:
> On Thu, 4 Oct 2007, Jeff Downs wrote:
> 
> > I'll continue to split as I have time, given how productive this round 
> > was.
> > 
> 
> OK, here is the next round of split patches.  I took these diffs against a 
> tree with the defreflist and reordering patches (posted short time ago) 
> applied, but they will likely also apply clean to current svn.
> 
> Again, in suggested application order with commit message.
> 
> 
> 1. paff-mbaddress.patch
> Modifies macroblock addressing and current macroblock y-position for 
> field decoding. Part of PAFF implementation.
> 
> 2. paff-poc.patch 
> Set Picture.poc for fields and field pairs. Part of PAFF implementation.
> 
> 3. paff-emuedge.patch
> Edge emulation for fields. Part of PAFF implementation
> 
> 4. paff-mmcodecode.patch
> Augment mmcodecoding process to work properly with fields. Part of PAFF 
> implementation
> 
> 5. paff-mmcorefrename.patch
> Cosmetic renaming variable so that it makes more sense for forthcoming 
> PAFF mmco patches.
> 
> 6. paff-mmco.patch
> Augment MMCO execution to work with both fields and frames. Part of PAFF 
> implementation
> 
> 7. paff-mmco-indent.patch
> Re-indent after PAFF MMCO implementation patch.
> 
> 8. paff-picmgmt.patch
> Manage Picture buffers for fields as well as frames. Pair complementary 
> fields into one MPV Picture.  Part of PAFF implementation.
> 
> 
> 
> After these, there are two more -- one to indent after #8 and one to 
> actually enable PAFF handling by properly defining FIELD_PICTURE.
> Since the indent one is quite large, I'll wait until these can be looked 
> at to post the last two.
> 
> 	-Jeff

> Content-Description: Patch 1: mbaddress
[...]
> @@ -3928,6 +3928,11 @@
>      }
>      s->resync_mb_x = s->mb_x = first_mb_in_slice % s->mb_width;
>      s->resync_mb_y = s->mb_y = (first_mb_in_slice / s->mb_width) << h->mb_aff_frame;
> +    if (FIELD_PICTURE) {
> +        s->resync_mb_y = s->mb_y = s->mb_y * 2;
> +        if (s->picture_structure == PICT_BOTTOM_FIELD)
> +            s->resync_mb_y = s->mb_y = s->mb_y + 1;
> +    }
>      assert(s->mb_y < s->mb_height);

i think this breaks the check above this hunk


[...]
> @@ -6666,7 +6673,7 @@
>                  s->mb_x = 0;
>                  ff_draw_horiz_band(s, 16*s->mb_y, 16);
>                  ++s->mb_y;
> -                if(FRAME_MBAFF) {
> +                if(FRAME_MBAFF || FIELD_PICTURE) {

this really should be FRAME_MBAFF_OR_FIELD or something like that


[...]

> Content-Description: Patch 2: poc
[...]
ok


> Content-Description: Patch 3: emuedge
[...]
ok


> Content-Description: Patch 4: MMCO decode
[...]
ok

> Content-Description: Patch 5: MMCOrefrename
[...]
ok


> Content-Description: Patch 6: MMCO
[...]
>          case MMCO_LONG:
> +            j = 1;
> +            if (FIELD_PICTURE && !s->first_field) {
> +                if (h->long_ref[mmco[i].long_arg] == s->current_picture_ptr) {
> +                    /* Just mark second field as referenced */
> +                    j = 0;
> +                } else if (s->current_picture_ptr->reference) {
> +                    /* First field in pair is in short term list or
> +                     * at a different long term index.
> +                     * This is not allowed; see 7.4.3, notes 2 and 3.
> +                     * Report the problem and keep the pair where it is,
> +                     * and mark this field valid.
> +                     */
> +                    av_log(h->s.avctx, AV_LOG_ERROR,
> +                        "illegal long term reference assignment for second "
> +                        "field in complementary field pair (first field is "
> +                        "short term or has non-matching long index)\n");
> +                    j = 0;
> +                }
> +            }
> +
> +            if (j) {

please use a better name than j

[...]
> +        } else {
> +            av_log(h->s.avctx, AV_LOG_ERROR, "problem in internal reference "
> +                                             "list handling; marking second "
> +                                             "field in pair finds first field "
> +                                             "in reference, but not in any "
> +                                             "ref list\n");

if this cannot happen unless our code is buggy te correct behavior is
assert(0);

[...]

> Content-Description: Patch 7: MMCO indent

ok

[...]


> Content-Description: Patch 8: picmgmt

will review later

also i think it would be better if you would post 1 patch per email
instead of many as later can get quite confusing for everyone if 
some are approved some are not and some arent revied yet ...

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

While the State exists there can be no freedom; when there is freedom there
will be no State. -- Vladimir Lenin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20071004/aff6d763/attachment.pgp>



More information about the ffmpeg-devel mailing list