On Sun, Dec 18, 2016 at 9:27 PM, Anton Khirnov <[email protected]> wrote: > --- > doc/APIchanges | 4 ++++ > libavutil/frame.c | 2 ++ > libavutil/frame.h | 14 ++++++++++++++ > libavutil/version.h | 2 +- > 4 files changed, 21 insertions(+), 1 deletion(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index 7633c99..ca95308 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -13,6 +13,10 @@ libavutil: 2015-08-28 > > API changes, most recent first: > > +2016-xx-xx - xxxxxxx - lavu 55.30.0 - frame.h > + Add AVFrame.crop_left/crop_top fields for attaching cropping information to > + video frames. > + > 2016-xx-xx - xxxxxxx - lavc 57.29.0 - avcodec.h > Add AV_PKT_DATA_SPHERICAL packet side data to export AVSphericalMapping > information from containers. > diff --git a/libavutil/frame.c b/libavutil/frame.c > index 1c14f5f..935c281 100644 > --- a/libavutil/frame.c > +++ b/libavutil/frame.c > @@ -390,6 +390,8 @@ int av_frame_copy_props(AVFrame *dst, const AVFrame *src) > dst->key_frame = src->key_frame; > dst->pict_type = src->pict_type; > dst->sample_aspect_ratio = src->sample_aspect_ratio; > + dst->crop_left = src->crop_left; > + dst->crop_top = src->crop_top; > dst->pts = src->pts; > dst->repeat_pict = src->repeat_pict; > dst->interlaced_frame = src->interlaced_frame; > diff --git a/libavutil/frame.h b/libavutil/frame.h > index 4052199..744d8d2 100644 > --- a/libavutil/frame.h > +++ b/libavutil/frame.h > @@ -25,6 +25,7 @@ > #ifndef AVUTIL_FRAME_H > #define AVUTIL_FRAME_H > > +#include <stddef.h> > #include <stdint.h> > > #include "avutil.h" > @@ -369,6 +370,19 @@ typedef struct AVFrame { > * AVHWFramesContext describing the frame. > */ > AVBufferRef *hw_frames_ctx; > + > + /** > + * Video frames only. > + * The number of pixels to discard from the left border of the frame to > + * obtain the part of the frame intended for presentation. > + */ > + size_t crop_left; > + /** > + * Video frames only. > + * The number of pixels to discard from the top border of the frame to > + * obtain the part of the frame intended for presentation. > + */ > + size_t crop_top; > } AVFrame;
I have a couple of points about this, in random order: 1. I had thought agreement was more towards a side data type rather than full types, is there any advantage with this approach? 2. I would agree about having a full rectangle not two directions only. Possibly I would keep naming consistent with coded_width and coded_height as fields for uncropped size, and width and height for cropped size. Optionally left and top could be marked as offset. 3. What about container cropping? eg mov 4. Does this support unaligned cropping? If not what happens to the options about it? 5. What about Theora? 6. Regarding 2/4, can you add a "third" way for apply_cropping so that it exports uncropped values but automatically adds the crop filter (kinda like we do for autorotate) and returns the filtered image at the cropped dimensions? Cheers -- Vittorio _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
