mirror of https://git.ffmpeg.org/ffmpeg.git
avcodec/dnxhd_parser: fix parsing interlaced video, simplify code
There appears to be no need to treat interlaced videos differently, also that code is flawed, as for at least one input cur_field would be always 0. Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
parent
cdd3048134
commit
ac30754a14
|
@ -29,8 +29,6 @@
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
ParseContext pc;
|
ParseContext pc;
|
||||||
int interlaced;
|
|
||||||
int cur_field; /* first field is 0, second is 1 */
|
|
||||||
int cur_byte;
|
int cur_byte;
|
||||||
int remaining;
|
int remaining;
|
||||||
int w, h;
|
int w, h;
|
||||||
|
@ -43,8 +41,6 @@ static int dnxhd_find_frame_end(DNXHDParserContext *dctx,
|
||||||
uint64_t state = pc->state64;
|
uint64_t state = pc->state64;
|
||||||
int pic_found = pc->frame_start_found;
|
int pic_found = pc->frame_start_found;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int interlaced = dctx->interlaced;
|
|
||||||
int cur_field = dctx->cur_field;
|
|
||||||
|
|
||||||
if (!pic_found) {
|
if (!pic_found) {
|
||||||
for (i = 0; i < buf_size; i++) {
|
for (i = 0; i < buf_size; i++) {
|
||||||
|
@ -52,8 +48,6 @@ static int dnxhd_find_frame_end(DNXHDParserContext *dctx,
|
||||||
if (ff_dnxhd_check_header_prefix(state & 0xffffffffff00LL) != 0) {
|
if (ff_dnxhd_check_header_prefix(state & 0xffffffffff00LL) != 0) {
|
||||||
i++;
|
i++;
|
||||||
pic_found = 1;
|
pic_found = 1;
|
||||||
interlaced = (state&2)>>1; /* byte following the 5-byte header prefix */
|
|
||||||
cur_field = state&1;
|
|
||||||
dctx->cur_byte = 0;
|
dctx->cur_byte = 0;
|
||||||
dctx->remaining = 0;
|
dctx->remaining = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -84,13 +78,11 @@ static int dnxhd_find_frame_end(DNXHDParserContext *dctx,
|
||||||
if (dctx->remaining <= 0)
|
if (dctx->remaining <= 0)
|
||||||
return dctx->remaining;
|
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;
|
int remaining = dctx->remaining;
|
||||||
|
|
||||||
pc->frame_start_found = 0;
|
pc->frame_start_found = 0;
|
||||||
pc->state64 = -1;
|
pc->state64 = -1;
|
||||||
dctx->interlaced = interlaced;
|
|
||||||
dctx->cur_field = 0;
|
|
||||||
dctx->cur_byte = 0;
|
dctx->cur_byte = 0;
|
||||||
dctx->remaining = 0;
|
dctx->remaining = 0;
|
||||||
return remaining;
|
return remaining;
|
||||||
|
@ -107,8 +99,6 @@ static int dnxhd_find_frame_end(DNXHDParserContext *dctx,
|
||||||
|
|
||||||
pc->frame_start_found = 0;
|
pc->frame_start_found = 0;
|
||||||
pc->state64 = -1;
|
pc->state64 = -1;
|
||||||
dctx->interlaced = interlaced;
|
|
||||||
dctx->cur_field = 0;
|
|
||||||
dctx->cur_byte = 0;
|
dctx->cur_byte = 0;
|
||||||
dctx->remaining = 0;
|
dctx->remaining = 0;
|
||||||
return remaining;
|
return remaining;
|
||||||
|
@ -116,8 +106,6 @@ static int dnxhd_find_frame_end(DNXHDParserContext *dctx,
|
||||||
}
|
}
|
||||||
pc->frame_start_found = pic_found;
|
pc->frame_start_found = pic_found;
|
||||||
pc->state64 = state;
|
pc->state64 = state;
|
||||||
dctx->interlaced = interlaced;
|
|
||||||
dctx->cur_field = cur_field;
|
|
||||||
return END_NOT_FOUND;
|
return END_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue