mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-09-19 21:06:42 +00:00
lavc: disable an obsolete hack for real video
AVCodecContext.slice_{count,offset} are unneeded since 2007, commit
383b123ed3
and following. Deprecate those
fields.
This commit is contained in:
parent
79b40ff58c
commit
432adca5fe
@ -771,11 +771,13 @@ typedef struct AVCodecContext {
|
|||||||
*/
|
*/
|
||||||
float dark_masking;
|
float dark_masking;
|
||||||
|
|
||||||
|
#if FF_API_SLICE_OFFSET
|
||||||
/**
|
/**
|
||||||
* slice count
|
* slice count
|
||||||
* - encoding: Set by libavcodec.
|
* - encoding: Set by libavcodec.
|
||||||
* - decoding: Set by user (or 0).
|
* - decoding: Set by user (or 0).
|
||||||
*/
|
*/
|
||||||
|
attribute_deprecated
|
||||||
int slice_count;
|
int slice_count;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -783,7 +785,9 @@ typedef struct AVCodecContext {
|
|||||||
* - encoding: Set/allocated by libavcodec.
|
* - encoding: Set/allocated by libavcodec.
|
||||||
* - decoding: Set/allocated by user (or NULL).
|
* - decoding: Set/allocated by user (or NULL).
|
||||||
*/
|
*/
|
||||||
|
attribute_deprecated
|
||||||
int *slice_offset;
|
int *slice_offset;
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sample aspect ratio (0 if unknown)
|
* sample aspect ratio (0 if unknown)
|
||||||
|
@ -177,7 +177,9 @@ static const AVOption avcodec_options[] = {
|
|||||||
{"xvidmmx", "deprecated, for compatibility only", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
{"xvidmmx", "deprecated, for compatibility only", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||||
{"faani", "floating point AAN IDCT", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_FAAN }, INT_MIN, INT_MAX, V|D|E, "idct"},
|
{"faani", "floating point AAN IDCT", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_FAAN }, INT_MIN, INT_MAX, V|D|E, "idct"},
|
||||||
{"simpleauto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEAUTO }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
{"simpleauto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEAUTO }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||||
|
#if FF_API_SLICE_OFFSET
|
||||||
{"slice_count", NULL, OFFSET(slice_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
|
{"slice_count", NULL, OFFSET(slice_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
|
||||||
|
#endif
|
||||||
{"ec", "set error concealment strategy", OFFSET(error_concealment), AV_OPT_TYPE_FLAGS, {.i64 = 3 }, INT_MIN, INT_MAX, V|D, "ec"},
|
{"ec", "set error concealment strategy", OFFSET(error_concealment), AV_OPT_TYPE_FLAGS, {.i64 = 3 }, INT_MIN, INT_MAX, V|D, "ec"},
|
||||||
{"guess_mvs", "iterative motion vector (MV) search (slow)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_GUESS_MVS }, INT_MIN, INT_MAX, V|D, "ec"},
|
{"guess_mvs", "iterative motion vector (MV) search (slow)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_GUESS_MVS }, INT_MIN, INT_MAX, V|D, "ec"},
|
||||||
{"deblock", "use strong deblock filter for damaged MBs", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_DEBLOCK }, INT_MIN, INT_MAX, V|D, "ec"},
|
{"deblock", "use strong deblock filter for damaged MBs", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_DEBLOCK }, INT_MIN, INT_MAX, V|D, "ec"},
|
||||||
|
@ -374,6 +374,8 @@ FF_DISABLE_DEPRECATION_WARNINGS
|
|||||||
FF_ENABLE_DEPRECATION_WARNINGS
|
FF_ENABLE_DEPRECATION_WARNINGS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if FF_API_SLICE_OFFSET
|
||||||
|
FF_DISABLE_DEPRECATION_WARNINGS
|
||||||
if (src->slice_count && src->slice_offset) {
|
if (src->slice_count && src->slice_offset) {
|
||||||
if (dst->slice_count < src->slice_count) {
|
if (dst->slice_count < src->slice_count) {
|
||||||
int err = av_reallocp_array(&dst->slice_offset, src->slice_count,
|
int err = av_reallocp_array(&dst->slice_offset, src->slice_count,
|
||||||
@ -385,6 +387,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||||||
src->slice_count * sizeof(*dst->slice_offset));
|
src->slice_count * sizeof(*dst->slice_offset));
|
||||||
}
|
}
|
||||||
dst->slice_count = src->slice_count;
|
dst->slice_count = src->slice_count;
|
||||||
|
FF_ENABLE_DEPRECATION_WARNINGS
|
||||||
|
#endif
|
||||||
|
|
||||||
av_packet_unref(dst->internal->last_pkt_props);
|
av_packet_unref(dst->internal->last_pkt_props);
|
||||||
err = av_packet_copy_props(dst->internal->last_pkt_props, src->internal->last_pkt_props);
|
err = av_packet_copy_props(dst->internal->last_pkt_props, src->internal->last_pkt_props);
|
||||||
@ -686,7 +690,11 @@ void ff_frame_thread_free(AVCodecContext *avctx, int thread_count)
|
|||||||
av_freep(&ctx->priv_data);
|
av_freep(&ctx->priv_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if FF_API_SLICE_OFFSET
|
||||||
|
FF_DISABLE_DEPRECATION_WARNINGS
|
||||||
av_freep(&ctx->slice_offset);
|
av_freep(&ctx->slice_offset);
|
||||||
|
FF_ENABLE_DEPRECATION_WARNINGS
|
||||||
|
#endif
|
||||||
|
|
||||||
av_buffer_unref(&ctx->internal->pool);
|
av_buffer_unref(&ctx->internal->pool);
|
||||||
av_packet_free(&ctx->internal->last_pkt_props);
|
av_packet_free(&ctx->internal->last_pkt_props);
|
||||||
|
@ -587,10 +587,7 @@ static int rv10_decode_packet(AVCodecContext *avctx, const uint8_t *buf,
|
|||||||
|
|
||||||
static int get_slice_offset(AVCodecContext *avctx, const uint8_t *buf, int n)
|
static int get_slice_offset(AVCodecContext *avctx, const uint8_t *buf, int n)
|
||||||
{
|
{
|
||||||
if (avctx->slice_count)
|
return AV_RL32(buf + n * 8);
|
||||||
return avctx->slice_offset[n];
|
|
||||||
else
|
|
||||||
return AV_RL32(buf + n * 8);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rv10_decode_frame(AVCodecContext *avctx, AVFrame *pict,
|
static int rv10_decode_frame(AVCodecContext *avctx, AVFrame *pict,
|
||||||
@ -610,21 +607,18 @@ static int rv10_decode_frame(AVCodecContext *avctx, AVFrame *pict,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!avctx->slice_count) {
|
slice_count = (*buf++) + 1;
|
||||||
slice_count = (*buf++) + 1;
|
buf_size--;
|
||||||
buf_size--;
|
|
||||||
|
|
||||||
if (!slice_count || buf_size <= 8 * slice_count) {
|
if (!slice_count || buf_size <= 8 * slice_count) {
|
||||||
av_log(avctx, AV_LOG_ERROR, "Invalid slice count: %d.\n",
|
av_log(avctx, AV_LOG_ERROR, "Invalid slice count: %d.\n",
|
||||||
slice_count);
|
slice_count);
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
slices_hdr = buf + 4;
|
slices_hdr = buf + 4;
|
||||||
buf += 8 * slice_count;
|
buf += 8 * slice_count;
|
||||||
buf_size -= 8 * slice_count;
|
buf_size -= 8 * slice_count;
|
||||||
} else
|
|
||||||
slice_count = avctx->slice_count;
|
|
||||||
|
|
||||||
for (i = 0; i < slice_count; i++) {
|
for (i = 0; i < slice_count; i++) {
|
||||||
unsigned offset = get_slice_offset(avctx, slices_hdr, i);
|
unsigned offset = get_slice_offset(avctx, slices_hdr, i);
|
||||||
|
@ -1549,8 +1549,7 @@ int ff_rv34_decode_update_thread_context(AVCodecContext *dst, const AVCodecConte
|
|||||||
static int get_slice_offset(AVCodecContext *avctx, const uint8_t *buf, int n, int slice_count, int buf_size)
|
static int get_slice_offset(AVCodecContext *avctx, const uint8_t *buf, int n, int slice_count, int buf_size)
|
||||||
{
|
{
|
||||||
if (n < slice_count) {
|
if (n < slice_count) {
|
||||||
if(avctx->slice_count) return avctx->slice_offset[n];
|
return AV_RL32(buf + n*8 - 4) == 1 ? AV_RL32(buf + n*8) : AV_RB32(buf + n*8);
|
||||||
else return AV_RL32(buf + n*8 - 4) == 1 ? AV_RL32(buf + n*8) : AV_RB32(buf + n*8);
|
|
||||||
} else
|
} else
|
||||||
return buf_size;
|
return buf_size;
|
||||||
}
|
}
|
||||||
@ -1623,13 +1622,10 @@ int ff_rv34_decode_frame(AVCodecContext *avctx, AVFrame *pict,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!avctx->slice_count){
|
slice_count = (*buf++) + 1;
|
||||||
slice_count = (*buf++) + 1;
|
slices_hdr = buf + 4;
|
||||||
slices_hdr = buf + 4;
|
buf += 8 * slice_count;
|
||||||
buf += 8 * slice_count;
|
buf_size -= 1 + 8 * slice_count;
|
||||||
buf_size -= 1 + 8 * slice_count;
|
|
||||||
}else
|
|
||||||
slice_count = avctx->slice_count;
|
|
||||||
|
|
||||||
offset = get_slice_offset(avctx, slices_hdr, 0, slice_count, buf_size);
|
offset = get_slice_offset(avctx, slices_hdr, 0, slice_count, buf_size);
|
||||||
//parse first slice header to check whether this frame can be decoded
|
//parse first slice header to check whether this frame can be decoded
|
||||||
|
@ -45,6 +45,7 @@
|
|||||||
#define FF_API_AVCODEC_CHROMA_POS (LIBAVCODEC_VERSION_MAJOR < 61)
|
#define FF_API_AVCODEC_CHROMA_POS (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||||
#define FF_API_VT_HWACCEL_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 61)
|
#define FF_API_VT_HWACCEL_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||||
#define FF_API_AVCTX_FRAME_NUMBER (LIBAVCODEC_VERSION_MAJOR < 61)
|
#define FF_API_AVCTX_FRAME_NUMBER (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||||
|
#define FF_API_SLICE_OFFSET (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||||
|
|
||||||
// reminder to remove CrystalHD decoders on next major bump
|
// reminder to remove CrystalHD decoders on next major bump
|
||||||
#define FF_CODEC_CRYSTAL_HD (LIBAVCODEC_VERSION_MAJOR < 61)
|
#define FF_CODEC_CRYSTAL_HD (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||||
|
Loading…
Reference in New Issue
Block a user