forked from FFmpeg/FFmpeg
h264: Replace mpegvideo-specific MAX_PICTURE_COUNT by private define
This commit is contained in:
parent
9b749c8274
commit
5d1c2e53ab
3 changed files with 14 additions and 12 deletions
|
@ -279,7 +279,7 @@ static void release_unused_pictures(H264Context *h, int remove_current)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* release non reference frames */
|
/* release non reference frames */
|
||||||
for (i = 0; i < MAX_PICTURE_COUNT; i++) {
|
for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
|
||||||
if (h->DPB[i].f.buf[0] && !h->DPB[i].reference &&
|
if (h->DPB[i].f.buf[0] && !h->DPB[i].reference &&
|
||||||
(remove_current || &h->DPB[i] != h->cur_pic_ptr)) {
|
(remove_current || &h->DPB[i] != h->cur_pic_ptr)) {
|
||||||
unref_picture(h, &h->DPB[i]);
|
unref_picture(h, &h->DPB[i]);
|
||||||
|
@ -467,11 +467,11 @@ static int find_unused_picture(H264Context *h)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < MAX_PICTURE_COUNT; i++) {
|
for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
|
||||||
if (pic_is_unused(h, &h->DPB[i]))
|
if (pic_is_unused(h, &h->DPB[i]))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (i == MAX_PICTURE_COUNT)
|
if (i == H264_MAX_PICTURE_COUNT)
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
|
|
||||||
if (h->DPB[i].needs_realloc) {
|
if (h->DPB[i].needs_realloc) {
|
||||||
|
@ -1185,11 +1185,11 @@ static void free_tables(H264Context *h, int free_rbsp)
|
||||||
av_buffer_pool_uninit(&h->ref_index_pool);
|
av_buffer_pool_uninit(&h->ref_index_pool);
|
||||||
|
|
||||||
if (free_rbsp && h->DPB) {
|
if (free_rbsp && h->DPB) {
|
||||||
for (i = 0; i < MAX_PICTURE_COUNT; i++)
|
for (i = 0; i < H264_MAX_PICTURE_COUNT; i++)
|
||||||
unref_picture(h, &h->DPB[i]);
|
unref_picture(h, &h->DPB[i]);
|
||||||
av_freep(&h->DPB);
|
av_freep(&h->DPB);
|
||||||
} else if (h->DPB) {
|
} else if (h->DPB) {
|
||||||
for (i = 0; i < MAX_PICTURE_COUNT; i++)
|
for (i = 0; i < H264_MAX_PICTURE_COUNT; i++)
|
||||||
h->DPB[i].needs_realloc = 1;
|
h->DPB[i].needs_realloc = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1338,10 +1338,10 @@ int ff_h264_alloc_tables(H264Context *h)
|
||||||
init_dequant_tables(h);
|
init_dequant_tables(h);
|
||||||
|
|
||||||
if (!h->DPB) {
|
if (!h->DPB) {
|
||||||
h->DPB = av_mallocz_array(MAX_PICTURE_COUNT, sizeof(*h->DPB));
|
h->DPB = av_mallocz_array(H264_MAX_PICTURE_COUNT, sizeof(*h->DPB));
|
||||||
if (!h->DPB)
|
if (!h->DPB)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
for (i = 0; i < MAX_PICTURE_COUNT; i++)
|
for (i = 0; i < H264_MAX_PICTURE_COUNT; i++)
|
||||||
av_frame_unref(&h->DPB[i].f);
|
av_frame_unref(&h->DPB[i].f);
|
||||||
av_frame_unref(&h->cur_pic.f);
|
av_frame_unref(&h->cur_pic.f);
|
||||||
}
|
}
|
||||||
|
@ -1595,7 +1595,7 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx)
|
||||||
#undef REBASE_PICTURE
|
#undef REBASE_PICTURE
|
||||||
#define REBASE_PICTURE(pic, new_ctx, old_ctx) \
|
#define REBASE_PICTURE(pic, new_ctx, old_ctx) \
|
||||||
((pic && pic >= old_ctx->DPB && \
|
((pic && pic >= old_ctx->DPB && \
|
||||||
pic < old_ctx->DPB + MAX_PICTURE_COUNT) ? \
|
pic < old_ctx->DPB + H264_MAX_PICTURE_COUNT) ? \
|
||||||
&new_ctx->DPB[pic - old_ctx->DPB] : NULL)
|
&new_ctx->DPB[pic - old_ctx->DPB] : NULL)
|
||||||
|
|
||||||
static void copy_picture_range(H264Picture **to, H264Picture **from, int count,
|
static void copy_picture_range(H264Picture **to, H264Picture **from, int count,
|
||||||
|
@ -1607,7 +1607,7 @@ static void copy_picture_range(H264Picture **to, H264Picture **from, int count,
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
assert((IN_RANGE(from[i], old_base, sizeof(*old_base)) ||
|
assert((IN_RANGE(from[i], old_base, sizeof(*old_base)) ||
|
||||||
IN_RANGE(from[i], old_base->DPB,
|
IN_RANGE(from[i], old_base->DPB,
|
||||||
sizeof(H264Picture) * MAX_PICTURE_COUNT) ||
|
sizeof(H264Picture) * H264_MAX_PICTURE_COUNT) ||
|
||||||
!from[i]));
|
!from[i]));
|
||||||
to[i] = REBASE_PICTURE(from[i], new_base, old_base);
|
to[i] = REBASE_PICTURE(from[i], new_base, old_base);
|
||||||
}
|
}
|
||||||
|
@ -1767,7 +1767,7 @@ static int decode_update_thread_context(AVCodecContext *dst,
|
||||||
h->droppable = h1->droppable;
|
h->droppable = h1->droppable;
|
||||||
h->low_delay = h1->low_delay;
|
h->low_delay = h1->low_delay;
|
||||||
|
|
||||||
for (i = 0; i < MAX_PICTURE_COUNT; i++) {
|
for (i = 0; i < H264_MAX_PICTURE_COUNT; i++) {
|
||||||
unref_picture(h, &h->DPB[i]);
|
unref_picture(h, &h->DPB[i]);
|
||||||
if (h1->DPB[i].f.buf[0] &&
|
if (h1->DPB[i].f.buf[0] &&
|
||||||
(ret = ref_picture(h, &h->DPB[i], &h1->DPB[i])) < 0)
|
(ret = ref_picture(h, &h->DPB[i], &h1->DPB[i])) < 0)
|
||||||
|
@ -2801,7 +2801,7 @@ static void flush_dpb(AVCodecContext *avctx)
|
||||||
flush_change(h);
|
flush_change(h);
|
||||||
|
|
||||||
if (h->DPB)
|
if (h->DPB)
|
||||||
for (i = 0; i < MAX_PICTURE_COUNT; i++)
|
for (i = 0; i < H264_MAX_PICTURE_COUNT; i++)
|
||||||
unref_picture(h, &h->DPB[i]);
|
unref_picture(h, &h->DPB[i]);
|
||||||
h->cur_pic_ptr = NULL;
|
h->cur_pic_ptr = NULL;
|
||||||
unref_picture(h, &h->cur_pic);
|
unref_picture(h, &h->cur_pic);
|
||||||
|
|
|
@ -39,6 +39,8 @@
|
||||||
#include "h264qpel.h"
|
#include "h264qpel.h"
|
||||||
#include "rectangle.h"
|
#include "rectangle.h"
|
||||||
|
|
||||||
|
#define H264_MAX_PICTURE_COUNT 32
|
||||||
|
|
||||||
#define MAX_SPS_COUNT 32
|
#define MAX_SPS_COUNT 32
|
||||||
#define MAX_PPS_COUNT 256
|
#define MAX_PPS_COUNT 256
|
||||||
|
|
||||||
|
|
|
@ -400,7 +400,7 @@ int ff_h264_decode_seq_parameter_set(H264Context *h)
|
||||||
}
|
}
|
||||||
|
|
||||||
sps->ref_frame_count = get_ue_golomb_31(&h->gb);
|
sps->ref_frame_count = get_ue_golomb_31(&h->gb);
|
||||||
if (sps->ref_frame_count > MAX_PICTURE_COUNT - 2 ||
|
if (sps->ref_frame_count > H264_MAX_PICTURE_COUNT - 2 ||
|
||||||
sps->ref_frame_count >= 32U) {
|
sps->ref_frame_count >= 32U) {
|
||||||
av_log(h->avctx, AV_LOG_ERROR,
|
av_log(h->avctx, AV_LOG_ERROR,
|
||||||
"too many reference frames %d\n", sps->ref_frame_count);
|
"too many reference frames %d\n", sps->ref_frame_count);
|
||||||
|
|
Loading…
Add table
Reference in a new issue