Hi, On Tue, Aug 13, 2019 at 8:29 PM Guo, Yejun <yejun....@intel.com> wrote: > example command line to verify it: > ./ffmpeg -i input.stream -vf addroi=0:0:iw/3:ih/3:-0.8 -c:v libvpx -b:v 2M > tmp.webm > > Signed-off-by: Guo, Yejun <yejun....@intel.com> > --- > libavcodec/libvpxenc.c | 197 > +++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 197 insertions(+) > > [...] > > + > + memset(roi_map, 0, sizeof(*roi_map)); > + > + /* segment id 0 in roi_map is reserved for the areas not covered by > AVRegionOfInterest. > + * segment id 0 in roi_map is also for the areas with > AVRegionOfInterest.qoffset near 0. > + * (delta_q of segment id 0 is 0). > + */ > + segment_mapping[MAX_DELTA_Q] = 1; > + /* roi_map has memset with zero, just explictly set it again for explict > understanding. */
There are some typos in this, but as the comment says, it's redundant. I think this and the next line could be removed. > + roi_map->delta_q[0] = 0; > + segment_id = 1; > + > + roi = (const AVRegionOfInterest*)sd->data; > + self_size = roi->self_size; > + if (!self_size || sd->size % self_size != 0) { > + av_log(avctx, AV_LOG_ERROR, "Invalid > AVRegionOfInterest.self_size.\n"); > + return AVERROR(EINVAL); > + } > + nb_rois = sd->size / self_size; > + > + /* This list must be iterated from zero because regions are > + * defined in order of decreasing importance. So discard less > + * important areas if they exceed the segment count. > + */ > + for (int i = 0; i < nb_rois; i++) { > + int delta_q; > + int mapping_index; > + > + roi = (const AVRegionOfInterest*)(sd->data + self_size * i); > + if (roi->qoffset.den == 0) { > + av_log(avctx, AV_LOG_ERROR, "AVRegionOfInterest.qoffset.den must > not be zero.\n"); > + return AVERROR(EINVAL); > + } > + > + delta_q = (int)(roi->qoffset.num * 1.0f / roi->qoffset.den * > MAX_DELTA_Q); > + delta_q = av_clip(delta_q, -MAX_DELTA_Q, MAX_DELTA_Q); > + Note that libvpx allows other adjustments (loop filter, block skipping, among others), but there may not be a way to provide this with AVRegionOfInterest. > [...] > + > + if (ctx->aq_mode > 0 || ctx->cpu_used < 5 || ctx->deadline != > VPX_DL_REALTIME) { > + if (!ctx->roi_warned) { > + ctx->roi_warned = 1; > + if (ctx->aq_mode > 0) > + av_log(avctx, AV_LOG_WARNING, "ROI is disabled when any > of AQ mode is on, skipping ROI.\n"); > + else > + av_log(avctx, AV_LOG_WARNING, "due to libvpx's internal > issue (see function apply_roi_map), skipping ROI.\n"); I think this could just mention that ROI is only supported with aq_mode==0, cpu_used >= 5 and deadline set to realtime rather than having a more specific statement like this one. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".