Revert of changes in stream format detection

Regression testing points out that at least 12 files no longer produce
correct results due to this change. Reverting is necessary until a
better solution for #69 can be found that does not break current other
files.
This commit is contained in:
wforums 2015-05-13 18:44:58 +02:00
parent 14e1420b7e
commit 6133bf6297
2 changed files with 42 additions and 44 deletions

View File

@ -1,7 +1,5 @@
0.77 0.77
---- ----
- Changed stream format detection. MP4 signatures now have priority over
PS. Seems to work better.
- Fixed bug in capitalization code ('I' was not being capitalized). - Fixed bug in capitalization code ('I' was not being capitalized).
- GUI should now run in Windows 8 (using the include .Net runtime, since - GUI should now run in Windows 8 (using the include .Net runtime, since
3.5 cannot be installed in Windows 8 apparently). 3.5 cannot be installed in Windows 8 apparently).

View File

@ -57,48 +57,6 @@ void detect_stream_type (struct lib_ccx_ctx *ctx)
ctx->startbytes[10]==0) ctx->startbytes[10]==0)
ctx->stream_mode=CCX_SM_RCWT; ctx->stream_mode=CCX_SM_RCWT;
} }
if ((ctx->stream_mode == CCX_SM_ELEMENTARY_OR_NOT_FOUND || ccx_options.print_file_reports)
&& ctx->startbytes_avail >= 4) // Still not found
{
// Try for MP4 by looking for box signatures - this should happen very
// early in the file according to specs
for (int i = 0; i<ctx->startbytes_avail - 3; i++)
{
// Look for the a box of type 'file'
if (
(ctx->startbytes[i] == 'f' && ctx->startbytes[i + 1] == 't' &&
ctx->startbytes[i + 2] == 'y' && ctx->startbytes[i + 3] == 'p')
||
(ctx->startbytes[i] == 'm' && ctx->startbytes[i + 1] == 'o' &&
ctx->startbytes[i + 2] == 'o' && ctx->startbytes[i + 3] == 'v')
||
(ctx->startbytes[i] == 'm' && ctx->startbytes[i + 1] == 'd' &&
ctx->startbytes[i + 2] == 'a' && ctx->startbytes[i + 3] == 't')
||
(ctx->startbytes[i] == 'f' && ctx->startbytes[i + 1] == 'r' &&
ctx->startbytes[i + 2] == 'e' && ctx->startbytes[i + 3] == 'e')
||
(ctx->startbytes[i] == 's' && ctx->startbytes[i + 1] == 'k' &&
ctx->startbytes[i + 2] == 'i' && ctx->startbytes[i + 3] == 'p')
||
(ctx->startbytes[i] == 'u' && ctx->startbytes[i + 1] == 'd' &&
ctx->startbytes[i + 2] == 't' && ctx->startbytes[i + 3] == 'a')
||
(ctx->startbytes[i] == 'm' && ctx->startbytes[i + 1] == 'e' &&
ctx->startbytes[i + 2] == 't' && ctx->startbytes[i + 3] == 'a')
||
(ctx->startbytes[i] == 'v' && ctx->startbytes[i + 1] == 'o' &&
ctx->startbytes[i + 2] == 'i' && ctx->startbytes[i + 3] == 'd')
||
(ctx->startbytes[i] == 'w' && ctx->startbytes[i + 1] == 'i' &&
ctx->startbytes[i + 2] == 'd' && ctx->startbytes[i + 3] == 'e')
)
{
ctx->stream_mode = CCX_SM_MP4;
break;
}
}
}
if (ctx->stream_mode==CCX_SM_ELEMENTARY_OR_NOT_FOUND) // Still not found if (ctx->stream_mode==CCX_SM_ELEMENTARY_OR_NOT_FOUND) // Still not found
{ {
if (ctx->startbytes_avail > 188*8) // Otherwise, assume no TS if (ctx->startbytes_avail > 188*8) // Otherwise, assume no TS
@ -165,6 +123,48 @@ void detect_stream_type (struct lib_ccx_ctx *ctx)
ctx->stream_mode=CCX_SM_ELEMENTARY_OR_NOT_FOUND; ctx->stream_mode=CCX_SM_ELEMENTARY_OR_NOT_FOUND;
} }
} }
if ((ctx->stream_mode==CCX_SM_ELEMENTARY_OR_NOT_FOUND || ccx_options.print_file_reports)
&& ctx->startbytes_avail>=4) // Still not found
{
// Try for MP4 by looking for box signatures - this should happen very
// early in the file according to specs
for (int i=0;i<ctx->startbytes_avail-3;i++)
{
// Look for the a box of type 'file'
if (
(ctx->startbytes[i]=='f' && ctx->startbytes[i+1]=='t' &&
ctx->startbytes[i+2]=='y' && ctx->startbytes[i+3]=='p')
||
(ctx->startbytes[i]=='m' && ctx->startbytes[i+1]=='o' &&
ctx->startbytes[i+2]=='o' && ctx->startbytes[i+3]=='v')
||
(ctx->startbytes[i]=='m' && ctx->startbytes[i+1]=='d' &&
ctx->startbytes[i+2]=='a' && ctx->startbytes[i+3]=='t')
||
(ctx->startbytes[i]=='f' && ctx->startbytes[i+1]=='r' &&
ctx->startbytes[i+2]=='e' && ctx->startbytes[i+3]=='e')
||
(ctx->startbytes[i]=='s' && ctx->startbytes[i+1]=='k' &&
ctx->startbytes[i+2]=='i' && ctx->startbytes[i+3]=='p')
||
(ctx->startbytes[i]=='u' && ctx->startbytes[i+1]=='d' &&
ctx->startbytes[i+2]=='t' && ctx->startbytes[i+3]=='a')
||
(ctx->startbytes[i]=='m' && ctx->startbytes[i+1]=='e' &&
ctx->startbytes[i+2]=='t' && ctx->startbytes[i+3]=='a')
||
(ctx->startbytes[i]=='v' && ctx->startbytes[i+1]=='o' &&
ctx->startbytes[i+2]=='i' && ctx->startbytes[i+3]=='d')
||
(ctx->startbytes[i]=='w' && ctx->startbytes[i+1]=='i' &&
ctx->startbytes[i+2]=='d' && ctx->startbytes[i+3]=='e')
)
{
ctx->stream_mode=CCX_SM_MP4;
break;
}
}
}
// Don't use STARTBYTESLENGTH. It might be longer than the file length! // Don't use STARTBYTESLENGTH. It might be longer than the file length!
return_to_buffer (ctx->startbytes, ctx->startbytes_avail); return_to_buffer (ctx->startbytes, ctx->startbytes_avail);
} }