OSDN Git Service

avcodec/dnxhd*: add ff_dnxhd_get_hr_frame_size()
authorPaul B Mahol <onemda@gmail.com>
Fri, 14 Apr 2017 14:09:07 +0000 (16:09 +0200)
committerPaul B Mahol <onemda@gmail.com>
Fri, 14 Apr 2017 14:09:07 +0000 (16:09 +0200)
Signed-off-by: Paul B Mahol <onemda@gmail.com>
libavcodec/dnxhd_parser.c
libavcodec/dnxhddata.h
libavcodec/dnxhdenc.c

index d5844df..de1cf5a 100644 (file)
@@ -36,19 +36,6 @@ typedef struct {
     int w, h;
 } 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,
                                 const uint8_t *buf, int buf_size)
 {
@@ -93,7 +80,7 @@ static int dnxhd_find_frame_end(DNXHDParserContext *dctx,
 
                 dctx->remaining = avpriv_dnxhd_get_frame_size(cid);
                 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)
                         return dctx->remaining;
                 }
index 89262a1..c96c5e8 100644 (file)
@@ -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);
 }
 
+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_interlaced(int cid);
 #if LIBAVCODEC_VERSION_MAJOR < 58
index 35fa777..1c270a4 100644 (file)
@@ -362,13 +362,6 @@ fail:
     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)
 {
     DNXHDEncContext *ctx = avctx->priv_data;
@@ -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;
 
     if (ctx->cid_table->frame_size == DNXHD_VARIABLE) {
-        ctx->frame_size = dnxhd_get_hr_frame_size(ctx->cid_table,
-                                                  ctx->m.mb_num);
+        ctx->frame_size = ff_dnxhd_get_hr_frame_size(ctx->cid,
+                                                     ctx->m.mb_width, ctx->m.mb_height);
         ctx->coding_unit_size = ctx->frame_size;
     } else {
         ctx->frame_size = ctx->cid_table->frame_size;