X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fdnxhd_parser.c;h=d9914121a067a4b65b1cb61823ec77ff1ab0c934;hb=3a033bc5cfaeec391a8258005e025ddf3971d8bc;hp=d5844dffdad340a07a99bb0876f2d5118e88aac6;hpb=657c0720361499e573688384d4f6f625ef897bf8;p=ffmpeg diff --git a/libavcodec/dnxhd_parser.c b/libavcodec/dnxhd_parser.c index d5844dffdad..d9914121a06 100644 --- a/libavcodec/dnxhd_parser.c +++ b/libavcodec/dnxhd_parser.c @@ -29,26 +29,11 @@ typedef struct { ParseContext pc; - int interlaced; - int cur_field; /* first field is 0, second is 1 */ int cur_byte; int remaining; 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) { @@ -56,8 +41,6 @@ static int dnxhd_find_frame_end(DNXHDParserContext *dctx, uint64_t state = pc->state64; int pic_found = pc->frame_start_found; int i = 0; - int interlaced = dctx->interlaced; - int cur_field = dctx->cur_field; if (!pic_found) { for (i = 0; i < buf_size; i++) { @@ -65,8 +48,6 @@ static int dnxhd_find_frame_end(DNXHDParserContext *dctx, if (ff_dnxhd_check_header_prefix(state & 0xffffffffff00LL) != 0) { i++; pic_found = 1; - interlaced = (state&2)>>1; /* byte following the 5-byte header prefix */ - cur_field = state&1; dctx->cur_byte = 0; dctx->remaining = 0; break; @@ -93,17 +74,15 @@ 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; } - if (buf_size - i >= dctx->remaining && (!dctx->interlaced || dctx->cur_field)) { + if (buf_size - i + 47 >= dctx->remaining) { int remaining = dctx->remaining; pc->frame_start_found = 0; pc->state64 = -1; - dctx->interlaced = interlaced; - dctx->cur_field = 0; dctx->cur_byte = 0; dctx->remaining = 0; return remaining; @@ -120,8 +99,6 @@ static int dnxhd_find_frame_end(DNXHDParserContext *dctx, pc->frame_start_found = 0; pc->state64 = -1; - dctx->interlaced = interlaced; - dctx->cur_field = 0; dctx->cur_byte = 0; dctx->remaining = 0; return remaining; @@ -129,8 +106,6 @@ static int dnxhd_find_frame_end(DNXHDParserContext *dctx, } pc->frame_start_found = pic_found; pc->state64 = state; - dctx->interlaced = interlaced; - dctx->cur_field = cur_field; return END_NOT_FOUND; }