[dec_utils]: Fix jpeg reader error

Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Change-Id: I04ef9e4f6ae3bb9ccd683a0c0e439b5ff4c7d4f5
This commit is contained in:
Herman Chen
2022-12-14 16:35:57 +08:00
parent 6e954f5142
commit fcd4750e3c
3 changed files with 11 additions and 8 deletions

View File

@@ -135,7 +135,7 @@ static MPP_RET mpi_rc_init(MpiRc2TestCtx *ctx)
MpiEncTestArgs* enc_cmd = ctx->enc_cmd; MpiEncTestArgs* enc_cmd = ctx->enc_cmd;
if (enc_cmd->file_input) if (enc_cmd->file_input)
reader_init(&ctx->reader, enc_cmd->file_input); reader_init(&ctx->reader, enc_cmd->file_input, enc_cmd->type_src);
if (NULL == ctx->reader) { if (NULL == ctx->reader) {
mpp_err("failed to open dec input file %s\n", enc_cmd->file_input); mpp_err("failed to open dec input file %s\n", enc_cmd->file_input);

View File

@@ -49,6 +49,7 @@ typedef struct FileReader_t {
FILE *fp_input; FILE *fp_input;
size_t file_size; size_t file_size;
MppCodingType type;
FileType file_type; FileType file_type;
char *buf; char *buf;
size_t buf_size; size_t buf_size;
@@ -204,7 +205,7 @@ static FileBufSlot *read_normal_file(FileReader data)
return slot; return slot;
} }
static void check_file_type(FileReader data, char *file_in) static void check_file_type(FileReader data, char *file_in, MppCodingType type)
{ {
FileReaderImpl *impl = (FileReaderImpl*)data; FileReaderImpl *impl = (FileReaderImpl*)data;
@@ -220,7 +221,8 @@ static void check_file_type(FileReader data, char *file_in)
impl->read_total = impl->seek_base; impl->read_total = impl->seek_base;
} else if (strstr(file_in, ".jpg") || } else if (strstr(file_in, ".jpg") ||
strstr(file_in, ".jpeg") || strstr(file_in, ".jpeg") ||
strstr(file_in, ".mjpeg")) { strstr(file_in, ".mjpeg") ||
type == MPP_VIDEO_CodingMJPEG) {
impl->file_type = FILE_JPEG_TYPE; impl->file_type = FILE_JPEG_TYPE;
impl->buf_size = impl->file_size; impl->buf_size = impl->file_size;
impl->stuff_size = 0; impl->stuff_size = 0;
@@ -321,7 +323,7 @@ void reader_rewind(FileReader reader)
impl->slot_rd_idx = 0; impl->slot_rd_idx = 0;
} }
void reader_init(FileReader* reader, char* file_in) void reader_init(FileReader* reader, char* file_in, MppCodingType type)
{ {
FILE *fp_input = fopen(file_in, "rb"); FILE *fp_input = fopen(file_in, "rb");
FileReaderImpl *impl = NULL; FileReaderImpl *impl = NULL;
@@ -340,7 +342,7 @@ void reader_init(FileReader* reader, char* file_in)
impl->file_size = ftell(fp_input); impl->file_size = ftell(fp_input);
fseek(fp_input, 0L, SEEK_SET); fseek(fp_input, 0L, SEEK_SET);
check_file_type(impl, file_in); check_file_type(impl, file_in, type);
impl->slots = mpp_calloc(FileBufSlot*, impl->slot_max); impl->slots = mpp_calloc(FileBufSlot*, impl->slot_max);
@@ -441,6 +443,7 @@ RK_S32 mpi_dec_opt_i(void *ctx, const char *next)
if (next) { if (next) {
strncpy(cmd->file_input, next, MAX_FILE_NAME_LENGTH - 1); strncpy(cmd->file_input, next, MAX_FILE_NAME_LENGTH - 1);
cmd->have_input = 1; cmd->have_input = 1;
if (!cmd->type)
name_to_coding_type(cmd->file_input, &cmd->type); name_to_coding_type(cmd->file_input, &cmd->type);
return 1; return 1;
} }
@@ -681,7 +684,7 @@ RK_S32 mpi_dec_test_cmd_init(MpiDecTestCmd* cmd, int argc, char **argv)
ret = mpp_opt_parse(opts, argc, argv); ret = mpp_opt_parse(opts, argc, argv);
if (cmd->have_input) { if (cmd->have_input) {
reader_init(&cmd->reader, cmd->file_input); reader_init(&cmd->reader, cmd->file_input, cmd->type);
if (cmd->reader) if (cmd->reader)
mpp_log("input file %s size %ld\n", cmd->file_input, reader_size(cmd->reader)); mpp_log("input file %s size %ld\n", cmd->file_input, reader_size(cmd->reader));
} }

View File

@@ -72,7 +72,7 @@ RK_S32 mpi_dec_test_cmd_init(MpiDecTestCmd* cmd, int argc, char **argv);
RK_S32 mpi_dec_test_cmd_deinit(MpiDecTestCmd* cmd); RK_S32 mpi_dec_test_cmd_deinit(MpiDecTestCmd* cmd);
void mpi_dec_test_cmd_options(MpiDecTestCmd* cmd); void mpi_dec_test_cmd_options(MpiDecTestCmd* cmd);
void reader_init(FileReader* reader, char* file_in); void reader_init(FileReader* reader, char* file_in, MppCodingType type);
void reader_deinit(FileReader reader); void reader_deinit(FileReader reader);
void reader_start(FileReader reader); void reader_start(FileReader reader);