On Thu, Sep 20, 2007 at 03:04:50PM -0400, Jeff Downs wrote:
On Wed, 19 Sep 2007, Michael Niedermayer wrote: [...] case MMCO_LONG: - pic= remove_long(h, mmco[i].long_arg); - if(pic) unreference_pic(h, pic); + 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->valid_structure) { + /* First field in pair in short term list. + * This is not allowed; see 7.4.3, notes 2 and 3. + */ + 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)\n"); + j = 0; [...] - if(!current_is_long){ - pic= remove_short(h, s->current_picture_ptr->frame_num); + if (!current_ref_assigned && FIELD_PICTURE && + !s->first_field && s->current_picture_ptr->valid_structure) { + + /* Second field of complementary field pair; the first field of + * which is already referenced. If short referenced, it + * should be first entry in short_ref. If not, it must exist + * in long_ref; trying to put it on the short list here is an + * error in the encoded bit stream (ref: 7.4.3, NOTE 2 and 3). + * If on neither list, we have a logic problem elsewhere + */
the notes 2 & 3 in 7.4.3 do not say anything that would support that view. the notes 2 & 3 in 7.4.3.3 could be bent toward this given the assumtation that the stream does not contain non paired reference fields. What made you think such fields do not occur? No i dont have a stream that i know contains such things. iam just curious if theres something in the spec that supports this view. [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Breaking DRM is a little like attempting to break through a door even though the window is wide open and the only thing in the house is a bunch of things you dont want and which you would get tomorrow for free anyway