mirror of
https://gitlab.com/mbunkus/mkvtoolnix.git
synced 2024-12-23 19:31:44 +00:00
The previous commit changed is_divx to a bool which is wrong. Restored the rederive keyframes functionality.
This commit is contained in:
parent
8b41e3f949
commit
854c0e60a7
@ -75,9 +75,10 @@ avi_reader_c::probe_file(mm_io_c *io,
|
||||
avi_reader_c::avi_reader_c(track_info_c &_ti)
|
||||
throw (error_c):
|
||||
generic_reader_c(_ti),
|
||||
divx_type(DIVX_TYPE_NONE),
|
||||
avi(NULL), vptzr(-1),
|
||||
fps(1.0), video_frames_read(0), max_video_frames(0), dropped_video_frames(0),
|
||||
act_wchar(0), is_divx(false), rederive_keyframes(false),
|
||||
act_wchar(0), rederive_keyframes(false),
|
||||
bytes_to_process(0), bytes_processed(0) {
|
||||
|
||||
int64_t size;
|
||||
@ -136,17 +137,15 @@ avi_reader_c::create_packetizer(int64_t tid) {
|
||||
!strcasecmp(codec, "AP41") || // Angel Potion
|
||||
!strcasecmp(codec, "MPG3") ||
|
||||
!strcasecmp(codec, "MP43"))
|
||||
is_divx = RAVI_DIVX3;
|
||||
divx_type = DIVX_TYPE_V3;
|
||||
else if (is_mpeg4_p2_fourcc(codec))
|
||||
is_divx = RAVI_MPEG4;
|
||||
else
|
||||
is_divx = 0;
|
||||
divx_type = DIVX_TYPE_MPEG4;
|
||||
|
||||
ti.private_data = (unsigned char *)avi->bitmap_info_header;
|
||||
if (ti.private_data != NULL)
|
||||
ti.private_size = get_uint32_le(&avi->bitmap_info_header->bi_size);
|
||||
ti.id = 0; // ID for the video track.
|
||||
if (is_divx == RAVI_MPEG4) {
|
||||
if (divx_type == DIVX_TYPE_MPEG4) {
|
||||
vptzr =
|
||||
add_packetizer(new mpeg4_p2_video_packetizer_c(this,
|
||||
AVI_frame_rate(avi),
|
||||
@ -320,11 +319,11 @@ avi_reader_c::is_keyframe(unsigned char *data,
|
||||
if (!rederive_keyframes)
|
||||
return suggestion;
|
||||
|
||||
switch (is_divx) {
|
||||
case RAVI_DIVX3:
|
||||
switch (divx_type) {
|
||||
case DIVX_TYPE_V3:
|
||||
i = *((int *)data);
|
||||
return ((i & 0x40000000) ? 0 : 1);
|
||||
case RAVI_MPEG4:
|
||||
case DIVX_TYPE_MPEG4:
|
||||
for (i = 0; i < size - 5; i++) {
|
||||
if ((data[i] == 0x00) && (data[i + 1] == 0x00) &&
|
||||
(data[i + 2] == 0x01)) {
|
||||
|
@ -31,10 +31,6 @@ extern "C" {
|
||||
#include "common.h"
|
||||
#include "error.h"
|
||||
|
||||
#define RAVI_UNKNOWN 0
|
||||
#define RAVI_DIVX3 1
|
||||
#define RAVI_MPEG4 2
|
||||
|
||||
typedef struct avi_demuxer_t {
|
||||
int ptzr;
|
||||
int channels, bits_per_sample, samples_per_second, aid;
|
||||
@ -43,6 +39,12 @@ typedef struct avi_demuxer_t {
|
||||
|
||||
class avi_reader_c: public generic_reader_c {
|
||||
private:
|
||||
enum divx_type_e {
|
||||
DIVX_TYPE_NONE,
|
||||
DIVX_TYPE_V3,
|
||||
DIVX_TYPE_MPEG4
|
||||
} divx_type;
|
||||
|
||||
avi_t *avi;
|
||||
int vptzr;
|
||||
vector<avi_demuxer_t> ademuxers;
|
||||
|
Loading…
Reference in New Issue
Block a user