diff --git a/ivfdec.c b/ivfdec.c index 65415ccd8fb89b28e103dfb90abf5936d1fea4cc..c7f4a894717f7b9576826e8819e43e1f37313abd 100644 --- a/ivfdec.c +++ b/ivfdec.c @@ -13,6 +13,25 @@ #include <stdio.h> #include <stdlib.h> +static void fix_framerate(int *num, int *den) { + // Some versions of vpxenc used 1/(2*fps) for the timebase, so + // we can guess the framerate using only the timebase in this + // case. Other files would require reading ahead to guess the + // timebase, like we do for webm. + if (*num < 1000) { + // Correct for the factor of 2 applied to the timebase in the encoder. + if (*num & 1) + *den *= 2; + else + *num /= 2; + } else { + // Don't know FPS for sure, and don't have readahead code + // (yet?), so just default to 30fps. + *num = 30; + *den = 1; + } +} + int file_is_ivf(struct VpxInputContext *input_ctx) { char raw_hdr[32]; int is_ivf = 0; @@ -32,27 +51,8 @@ int file_is_ivf(struct VpxInputContext *input_ctx) { input_ctx->height = mem_get_le16(raw_hdr + 14); input_ctx->framerate.numerator = mem_get_le32(raw_hdr + 16); input_ctx->framerate.denominator = mem_get_le32(raw_hdr + 20); - - /* Some versions of vpxenc used 1/(2*fps) for the timebase, so - * we can guess the framerate using only the timebase in this - * case. Other files would require reading ahead to guess the - * timebase, like we do for webm. - */ - if (input_ctx->framerate.numerator < 1000) { - /* Correct for the factor of 2 applied to the timebase in the - * encoder. - */ - if (input_ctx->framerate.numerator & 1) - input_ctx->framerate.denominator <<= 1; - else - input_ctx->framerate.numerator >>= 1; - } else { - /* Don't know FPS for sure, and don't have readahead code - * (yet?), so just default to 30fps. - */ - input_ctx->framerate.numerator = 30; - input_ctx->framerate.denominator = 1; - } + fix_framerate(&input_ctx->framerate.numerator, + &input_ctx->framerate.denominator); } } diff --git a/ivfenc.c b/ivfenc.c index 611d6676fef4621350c0931be401f7d8a5626d22..0041ff044226266040b5d4714d25e9092957be13 100644 --- a/ivfenc.c +++ b/ivfenc.c @@ -41,9 +41,6 @@ void ivf_write_frame_header(FILE *outfile, const struct vpx_codec_cx_pkt *pkt) { char header[12]; vpx_codec_pts_t pts; - if (pkt->kind != VPX_CODEC_CX_FRAME_PKT) - return; - pts = pkt->data.frame.pts; mem_put_le32(header, (int)pkt->data.frame.sz); mem_put_le32(header + 4, pts & 0xFFFFFFFF);