|
|
|
@ -99,6 +99,12 @@ typedef struct X264Context { |
|
|
|
|
|
|
|
|
|
int nb_reordered_opaque, next_reordered_opaque; |
|
|
|
|
int64_t *reordered_opaque; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* If the encoder does not support ROI then warn the first time we |
|
|
|
|
* encounter a frame with ROI side data. |
|
|
|
|
*/ |
|
|
|
|
int roi_warned; |
|
|
|
|
} X264Context; |
|
|
|
|
|
|
|
|
|
static void X264_log(void *p, int level, const char *fmt, va_list args) |
|
|
|
@ -356,7 +362,10 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, |
|
|
|
|
sd = av_frame_get_side_data(frame, AV_FRAME_DATA_REGIONS_OF_INTEREST); |
|
|
|
|
if (sd) { |
|
|
|
|
if (x4->params.rc.i_aq_mode == X264_AQ_NONE) { |
|
|
|
|
av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n"); |
|
|
|
|
if (!x4->roi_warned) { |
|
|
|
|
x4->roi_warned = 1; |
|
|
|
|
av_log(ctx, AV_LOG_WARNING, "Adaptive quantization must be enabled to use ROI encoding, skipping ROI.\n"); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
if (frame->interlaced_frame == 0) { |
|
|
|
|
int mbx = (frame->width + MB_SIZE - 1) / MB_SIZE; |
|
|
|
@ -410,7 +419,10 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, const AVFrame *frame, |
|
|
|
|
x4->pic.prop.quant_offsets = qoffsets; |
|
|
|
|
x4->pic.prop.quant_offsets_free = av_free; |
|
|
|
|
} else { |
|
|
|
|
av_log(ctx, AV_LOG_WARNING, "interlaced_frame not supported for ROI encoding yet, skipping ROI.\n"); |
|
|
|
|
if (!x4->roi_warned) { |
|
|
|
|
x4->roi_warned = 1; |
|
|
|
|
av_log(ctx, AV_LOG_WARNING, "interlaced_frame not supported for ROI encoding yet, skipping ROI.\n"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|