Commit 5dedb2af authored by Paul B Mahol's avatar Paul B Mahol

avcodec/dnxhd*: add ff_dnxhd_get_hr_frame_size()

Signed-off-by: 's avatarPaul B Mahol <onemda@gmail.com>
parent 34c2eea3
...@@ -36,19 +36,6 @@ typedef struct { ...@@ -36,19 +36,6 @@ typedef struct {
int w, h; int w, h;
} DNXHDParserContext; } DNXHDParserContext;
static int dnxhd_get_hr_frame_size(int cid, int w, int h)
{
int result, i = ff_dnxhd_get_cid_table(cid);
if (i < 0)
return i;
result = ((h + 15) / 16) * ((w + 15) / 16) * (int64_t)ff_dnxhd_cid_table[i].packet_scale.num / ff_dnxhd_cid_table[i].packet_scale.den;
result = (result + 2048) / 4096 * 4096;
return FFMAX(result, 8192);
}
static int dnxhd_find_frame_end(DNXHDParserContext *dctx, static int dnxhd_find_frame_end(DNXHDParserContext *dctx,
const uint8_t *buf, int buf_size) const uint8_t *buf, int buf_size)
{ {
...@@ -93,7 +80,7 @@ static int dnxhd_find_frame_end(DNXHDParserContext *dctx, ...@@ -93,7 +80,7 @@ static int dnxhd_find_frame_end(DNXHDParserContext *dctx,
dctx->remaining = avpriv_dnxhd_get_frame_size(cid); dctx->remaining = avpriv_dnxhd_get_frame_size(cid);
if (dctx->remaining <= 0) { if (dctx->remaining <= 0) {
dctx->remaining = dnxhd_get_hr_frame_size(cid, dctx->w, dctx->h); dctx->remaining = ff_dnxhd_get_hr_frame_size(cid, dctx->w, dctx->h);
if (dctx->remaining <= 0) if (dctx->remaining <= 0)
return dctx->remaining; return dctx->remaining;
} }
......
...@@ -91,6 +91,19 @@ static av_always_inline uint64_t ff_dnxhd_parse_header_prefix(const uint8_t *buf ...@@ -91,6 +91,19 @@ static av_always_inline uint64_t ff_dnxhd_parse_header_prefix(const uint8_t *buf
return ff_dnxhd_check_header_prefix(prefix); return ff_dnxhd_check_header_prefix(prefix);
} }
static av_always_inline int ff_dnxhd_get_hr_frame_size(int cid, int w, int h)
{
int result, i = ff_dnxhd_get_cid_table(cid);
if (i < 0)
return i;
result = ((h + 15) / 16) * ((w + 15) / 16) * (int64_t)ff_dnxhd_cid_table[i].packet_scale.num / ff_dnxhd_cid_table[i].packet_scale.den;
result = (result + 2048) / 4096 * 4096;
return FFMAX(result, 8192);
}
int avpriv_dnxhd_get_frame_size(int cid); int avpriv_dnxhd_get_frame_size(int cid);
int avpriv_dnxhd_get_interlaced(int cid); int avpriv_dnxhd_get_interlaced(int cid);
#if LIBAVCODEC_VERSION_MAJOR < 58 #if LIBAVCODEC_VERSION_MAJOR < 58
......
...@@ -362,13 +362,6 @@ fail: ...@@ -362,13 +362,6 @@ fail:
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
} }
static int dnxhd_get_hr_frame_size(const CIDEntry* profile, int mb_num)
{
int result = mb_num * profile->packet_scale.num / profile->packet_scale.den;
result = (result + 2048) / 4096 * 4096;
return FFMAX(result, 8192);
}
static av_cold int dnxhd_encode_init(AVCodecContext *avctx) static av_cold int dnxhd_encode_init(AVCodecContext *avctx)
{ {
DNXHDEncContext *ctx = avctx->priv_data; DNXHDEncContext *ctx = avctx->priv_data;
...@@ -483,8 +476,8 @@ static av_cold int dnxhd_encode_init(AVCodecContext *avctx) ...@@ -483,8 +476,8 @@ static av_cold int dnxhd_encode_init(AVCodecContext *avctx)
ctx->m.mb_num = ctx->m.mb_height * ctx->m.mb_width; ctx->m.mb_num = ctx->m.mb_height * ctx->m.mb_width;
if (ctx->cid_table->frame_size == DNXHD_VARIABLE) { if (ctx->cid_table->frame_size == DNXHD_VARIABLE) {
ctx->frame_size = dnxhd_get_hr_frame_size(ctx->cid_table, ctx->frame_size = ff_dnxhd_get_hr_frame_size(ctx->cid,
ctx->m.mb_num); ctx->m.mb_width, ctx->m.mb_height);
ctx->coding_unit_size = ctx->frame_size; ctx->coding_unit_size = ctx->frame_size;
} else { } else {
ctx->frame_size = ctx->cid_table->frame_size; ctx->frame_size = ctx->cid_table->frame_size;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment