static int _MMFileIsMPEGTSHeader(MMFileIOHandle *fp)
{
- unsigned char header[TS_MAX_PACKET_SIZE] = {0, };
+ unsigned char buffer[TS_MAX_PACKET_SIZE] = {0, };
unsigned char *s = NULL;
+ unsigned int startoffset = 0;
mmfile_seek(fp, 0, MMFILE_SEEK_SET);
- mmfile_read(fp, header, sizeof(header));
-
- s = (unsigned char *)memchr(header, 0x47, sizeof(header));
-
- if (s) {
- unsigned char buffer[TS_PACKET_SIZE] = {0, };
- unsigned int startoffset = s - header + 1;
-
- mmfile_seek(fp, startoffset, MMFILE_SEEK_SET);
- mmfile_read(fp, buffer, sizeof(buffer));
+ mmfile_read(fp, buffer, TS_MAX_PACKET_SIZE);
- if (buffer[sizeof(buffer) - 1] & 0x47) {
- return MPEGTS_PACKET;
- } else {
- unsigned char dvhs_buf[TS_DVHS_PACKET_SIZE] = {0, };
+ s = (unsigned char *)memchr(buffer, 0x47, TS_MAX_PACKET_SIZE);
+ mm_file_retv_if_fails(s, MPEGTS_NONE);
- mmfile_seek(fp, startoffset, MMFILE_SEEK_SET);
- mmfile_read(fp, dvhs_buf, sizeof(dvhs_buf));
+ startoffset = s - buffer + 1;
- if (dvhs_buf[sizeof(dvhs_buf) - 1] & 0x47) {
- return MPEGTS_DVHS;
- } else {
- unsigned char fec_buf[TS_FEC_PACKET_SIZE] = {0, };
+ memset(&buffer, 0x00, TS_MAX_PACKET_SIZE);
- mmfile_seek(fp, startoffset, MMFILE_SEEK_SET);
- mmfile_read(fp, fec_buf, sizeof(fec_buf));
+ mmfile_seek(fp, startoffset, MMFILE_SEEK_SET);
+ mmfile_read(fp, buffer, TS_MAX_PACKET_SIZE);
- if (fec_buf[sizeof(fec_buf) - 1] & 0x47) {
- return MPEGTS_FECE;
- }
- }
- }
- }
+ if (buffer[TS_PACKET_SIZE - 1] & 0x47)
+ return MPEGTS_PACKET;
+ else if (buffer[TS_DVHS_PACKET_SIZE - 1] & 0x47)
+ return MPEGTS_DVHS;
+ else if (buffer[TS_FEC_PACKET_SIZE - 1] & 0x47)
+ return MPEGTS_FECE;
return MPEGTS_NONE;
}