vpxdec: restoring old md5 behavior for y4m files.

Fix of https://code.google.com/p/webm/issues/detail?id=698 issue.

Change-Id: I7a92d91481dbbae28d8953f146e9faafdcd7a310
This commit is contained in:
Dmitry Kovalev 2014-01-28 11:12:58 -08:00
parent f9f936b82f
commit 5260b39e5f
3 changed files with 41 additions and 29 deletions

View File

@ -816,17 +816,34 @@ int main_loop(int argc, const char **argv_) {
}
if (single_file) {
if (use_y4m) {
char buf[Y4M_BUFFER_SIZE] = {0};
size_t len = 0;
if (frame_out == 1) {
// Y4M file header
len = y4m_write_file_header(buf, sizeof(buf),
vpx_input_ctx.width,
vpx_input_ctx.height,
&vpx_input_ctx.framerate, img->fmt);
if (do_md5) {
MD5Update(&md5_ctx, (md5byte *)buf, len);
} else {
fputs(buf, outfile);
}
}
// Y4M frame header
len = y4m_write_frame_header(buf, sizeof(buf));
if (do_md5) {
MD5Update(&md5_ctx, (md5byte *)buf, len);
} else {
fputs(buf, outfile);
}
}
if (do_md5) {
update_image_md5(img, planes, &md5_ctx);
} else {
if (use_y4m) {
if (frame_out == 1) {
y4m_write_file_header(outfile,
vpx_input_ctx.width, vpx_input_ctx.height,
&vpx_input_ctx.framerate, img->fmt);
}
y4m_write_frame_header(outfile);
}
write_image_file(img, planes, outfile);
}
} else {

View File

@ -10,21 +10,18 @@
#include "./y4menc.h"
void y4m_write_file_header(FILE *file, int width, int height,
const struct VpxRational *framerate,
vpx_img_fmt_t fmt) {
const char *color = fmt == VPX_IMG_FMT_444A ? "C444alpha\n" :
fmt == VPX_IMG_FMT_I444 ? "C444\n" :
fmt == VPX_IMG_FMT_I422 ? "C422\n" :
"C420jpeg\n";
int y4m_write_file_header(char *buf, size_t len, int width, int height,
const struct VpxRational *framerate,
vpx_img_fmt_t fmt) {
const char *const color = fmt == VPX_IMG_FMT_444A ? "C444alpha\n" :
fmt == VPX_IMG_FMT_I444 ? "C444\n" :
fmt == VPX_IMG_FMT_I422 ? "C422\n" :
"C420jpeg\n";
// Note: We can't output an aspect ratio here because IVF doesn't
// store one, and neither does VP8.
// That will have to wait until these tools support WebM natively.*/
fprintf(file, "YUV4MPEG2 W%u H%u F%u:%u I%c %s", width, height,
framerate->numerator, framerate->denominator, 'p', color);
return snprintf(buf, len, "YUV4MPEG2 W%u H%u F%u:%u I%c %s", width, height,
framerate->numerator, framerate->denominator, 'p', color);
}
void y4m_write_frame_header(FILE *file) {
fprintf(file, "FRAME\n");
int y4m_write_frame_header(char *buf, size_t len) {
return snprintf(buf, len, "FRAME\n");
}

View File

@ -11,8 +11,6 @@
#ifndef Y4MENC_H_
#define Y4MENC_H_
#include <stdio.h>
#include "./tools_common.h"
#include "vpx/vpx_decoder.h"
@ -21,12 +19,12 @@
extern "C" {
#endif
void y4m_write_file_header(FILE *file, int width, int height,
const struct VpxRational *framerate,
vpx_img_fmt_t fmt);
void y4m_write_frame_header(FILE *file);
#define Y4M_BUFFER_SIZE 128
int y4m_write_file_header(char *buf, size_t len, int width, int height,
const struct VpxRational *framerate,
vpx_img_fmt_t fmt);
int y4m_write_frame_header(char *buf, size_t len);
#ifdef __cplusplus
} // extern "C"