Main from the first version are:
1/8: included Ronald's atomics patch with my changes
2/8:
    - av_buffer_realloc() should now work properly
    - added av_buffer_allocz()
3/8: new lock-free buffer pool API
8/8: added metadata (was not meta enough before)

RFC:
    - av_get_frame_defaults() -- is it actually needed? I cannot think
      of a situation where it would be more appropriate than
      av_frame_unref().
    - av_frame_get_buffer() -- wondering if i should add an alloc
      callback to it, so that it can be used with buffer pools. Othewise
      I have to basically duplicate the same code in lavc, but with
      av_buffer_alloc() -> av_buffer_alloc_pool()

Mpegvideo is now mostly done, but I still need to polish it some more
before I send it. Feel free to review the other 123 decoder patches in
the meantime.

The status of AVFrame fields now looks like this (comments still
welcome, especially on the ???? fields):
certainly keep:
    uint8_t *data[AV_NUM_DATA_POINTERS];
    int linesize[AV_NUM_DATA_POINTERS];
    uint8_t **extended_data;
    int width, height;
    int nb_samples;
    int format;
    AVRational sample_aspect_ratio;
    int64_t pts;
    int sample_rate;
    uint64_t channel_layout;
    int palette_has_changed;
    // possibly merge those two into a single field
    // or alternatively add a frame flags field and stuff interlaced_frame there
    int interlaced_frame;
    int top_field_first;
    // those are very lavc-specific, but used quite a lot so keep at least for 
now
    int64_t pkt_pts;
    int64_t pkt_dts;
    int64_t reordered_opaque;

deprecated by refcounting => remove:
    int reference;
    void *opaque;
    int buffer_hints;
    int type;
    uint8_t *base[AV_NUM_DATA_POINTERS];

mpeg-specific crap, most probably useless => remove:
    int8_t *qscale_table;
    int qstride;
    int qscale_type;
    uint8_t *mbskip_table;
    int16_t (*motion_val[2])[2];
    uint32_t *mb_type;
    short *dct_coeff;
    int8_t *ref_index[2];
    uint8_t motion_subsample_log2;

private lavc fields => move elsewhere in lavc:
    void *hwaccel_picture_private;
    struct AVCodecContext *owner;
    void *thread_opaque;

change into frame side data:
    AVPanScan *pan_scan; // mpeg12-specific
    // contains frame PSNR, mpegvideo_enc specific, used by avconv
    uint64_t error[AV_NUM_DATA_POINTERS];

????:
    // those two are only set by mpegvideo stuff, not sure if it's of any use
    int coded_picture_number;
    int display_picture_number;

    // very codec-specific. probably useless for decoding, but some encoders use
    // it to allow specifying quantizer per-frame. change into frame side data
    // maybe?
    int quality;

    // again, very lavc-specific "weakly coupled" frame metadata, not an actual
    // frame propery. at least pict_type is kinda useful.
    int repeat_pict;
    int key_frame;
    enum AVPictureType pict_type;

-- 
Anton Khirnov
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to