Skip to content

Commit 0658496

Browse files
committed
fix: #361 read mpeg-ts AF origin PCR extension value
1 parent 53254e9 commit 0658496

File tree

5 files changed

+20
-16
lines changed

5 files changed

+20
-16
lines changed

libflv/source/flv-muxer.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,7 @@ static int flv_muxer_h265(struct flv_muxer_t* flv, uint32_t pts, uint32_t dts)
388388
video.keyframe = 1 == flv->vcl ? FLV_VIDEO_KEY_FRAME : FLV_VIDEO_INTER_FRAME;
389389
video.avpacket = FLV_AVPACKET;
390390
n = flv_video_tag_header_write(&video, flv->ptr, flv->capacity);
391-
assert(n == 5 + (flv->enhanced_rtmp && dts == pts) ? 0 : 3);
391+
assert(n == 5 + ((flv->enhanced_rtmp && dts != pts) ? 3 : 0));
392392
return flv->handler(flv->param, FLV_TYPE_VIDEO, flv->ptr, flv->bytes, dts);
393393
}
394394
return 0;
@@ -402,7 +402,7 @@ int flv_muxer_hevc(struct flv_muxer_t* flv, const void* data, size_t bytes, uint
402402
return -ENOMEM;
403403
}
404404

405-
flv->bytes = 5 + (flv->enhanced_rtmp && dts == pts) ? 0 : 3;
405+
flv->bytes = 5 + ((flv->enhanced_rtmp && dts != pts) ? 3 : 0);
406406
flv->bytes += h265_annexbtomp4(&flv->v.hevc, data, bytes, flv->ptr + flv->bytes, flv->capacity - flv->bytes, &flv->vcl, &flv->update);
407407
if (flv->bytes <= 5)
408408
return -ENOMEM;
@@ -441,7 +441,7 @@ static int flv_muxer_h266(struct flv_muxer_t* flv, uint32_t pts, uint32_t dts)
441441
video.keyframe = 1 == flv->vcl ? FLV_VIDEO_KEY_FRAME : FLV_VIDEO_INTER_FRAME;
442442
video.avpacket = FLV_AVPACKET;
443443
n = flv_video_tag_header_write(&video, flv->ptr, flv->capacity);
444-
assert(n == 5 + (flv->enhanced_rtmp && dts == pts) ? 0 : 3);
444+
assert(n == 5 + ((flv->enhanced_rtmp && dts != pts) ? 3 : 0));
445445
return flv->handler(flv->param, FLV_TYPE_VIDEO, flv->ptr, flv->bytes, dts);
446446
}
447447
return 0;
@@ -455,7 +455,7 @@ int flv_muxer_vvc(struct flv_muxer_t* flv, const void* data, size_t bytes, uint3
455455
return -ENOMEM;
456456
}
457457

458-
flv->bytes = 5 + (flv->enhanced_rtmp && dts == pts) ? 0 : 3;
458+
flv->bytes = 5 + ((flv->enhanced_rtmp && dts != pts) ? 3 : 0);
459459
flv->bytes += h266_annexbtomp4(&flv->v.vvc, data, bytes, flv->ptr + flv->bytes, flv->capacity - flv->bytes, &flv->vcl, &flv->update);
460460
if (flv->bytes <= 5)
461461
return -ENOMEM;

libmpeg/source/mpeg-system-header.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ int system_header_read(struct ps_system_header_t* h, struct mpeg_bits_t* reader)
5656
}
5757

5858
assert(0 == mpeg_bits_error(reader));
59-
//assert(end == mpeg_bits_tell(reader));
59+
//assert(end >= mpeg_bits_tell(reader));
60+
mpeg_bits_seek(reader, end); // fix: read stream out of range
6061
return MPEG_ERROR_OK;
6162
}
6263

libmpeg/source/mpeg-ts-dec.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ static uint32_t adaptation_filed_read(struct ts_adaptation_field_t *adp, const u
5757
if(adp->OPCR_flag && i + 6 <= adp->adaptation_field_length + 1)
5858
{
5959
adp->original_program_clock_reference_base = (((uint64_t)data[i]) << 25) | ((uint64_t)data[i+1] << 17) | ((uint64_t)data[i+2] << 9) | ((uint64_t)data[i+3] << 1) | ((data[i+4] >> 7) & 0x01);
60-
adp->original_program_clock_reference_extension = ((data[i+4] & 0x01) << 1) | data[i+5];
60+
adp->original_program_clock_reference_extension = ((data[i+4] & 0x01) << 8) | data[i+5];
6161

6262
i += 6;
6363
}

test/test.cpp

+10-10
Original file line numberDiff line numberDiff line change
@@ -51,78 +51,78 @@ void usage(int argc, char const *argv[]){
5151
/* 用于套壳调用函数,参数 char* */
5252
#define DEF_FUN_PCHAR(name, ...) void name ( __VA_ARGS__ ); \
5353
int t_##name(int argc, char const *argv[]){\
54-
if(4 != argc) return -1;\
54+
if(4 > argc) return -1;\
5555
name(argv[3]);return 0;\
5656
} \
5757
RE_REGISTER(name, "void " #name "(" #__VA_ARGS__ ")", t_##name)
5858

5959
/* 用于套壳调用函数,参数 char*, char* */
6060
#define DEF_FUN_2PCHAR(name, ...) void name ( __VA_ARGS__ ); \
6161
int t_##name(int argc, char const *argv[]){\
62-
if(5 != argc) return -1;\
62+
if(5 > argc) return -1;\
6363
name(argv[3], argv[4]);return 0;\
6464
} \
6565
RE_REGISTER(name, "void " #name "(" #__VA_ARGS__ ")", t_##name)
6666

6767
#define DEF_FUN_3PCHAR(name, ...) void name ( __VA_ARGS__ ); \
6868
int t_##name(int argc, char const *argv[]){\
69-
if(6 != argc) return -1;\
69+
if(6 > argc) return -1;\
7070
name(argv[3], argv[4], argv[5]);return 0;\
7171
} \
7272
RE_REGISTER(name, "void " #name "(" #__VA_ARGS__ ")", t_##name)
7373

7474
/* 用于套壳调用函数,参数 char*, char*, char*, char* */
7575
#define DEF_FUN_4PCHAR(name, ...) void name ( __VA_ARGS__ ); \
7676
int t_##name(int argc, char const *argv[]){\
77-
if(7 != argc) return -1;\
77+
if(7 > argc) return -1;\
7878
name(argv[3], argv[4], argv[5], argv[6]);return 0;\
7979
} \
8080
RE_REGISTER(name, "void " #name "(" #__VA_ARGS__ ")", t_##name)
8181

8282
/* 用于套壳调用函数,参数 char*, int */
8383
#define DEF_FUN_PCHAR_INT(name, ...) void name ( __VA_ARGS__ ); \
8484
int t_##name(int argc, char const *argv[]){\
85-
if(5 != argc) return -1;\
85+
if(5 > argc) return -1;\
8686
name(argv[3], (int)atoi(argv[4]));return 0;\
8787
} \
8888
RE_REGISTER(name, "void " #name "(" #__VA_ARGS__ ")", t_##name)
8989

9090
/* 用于套壳调用函数,参数 int, int, char*, char* */
9191
#define DEF_FUN_INT_INT_PCHAR_PCHAR(name, ...) void name ( __VA_ARGS__ ); \
9292
int t_##name(int argc, char const *argv[]){\
93-
if(7 != argc) return -1;\
93+
if(7 > argc) return -1;\
9494
name((int)atoi(argv[3]), (int)atoi(argv[4]), argv[5], argv[6]);return 0;\
9595
}\
9696
RE_REGISTER(name, "void " #name "(" #__VA_ARGS__ ")", t_##name)
9797

9898
/* 用于套壳调用函数,参数 char*, int, int, char* */
9999
#define DEF_FUN_PCHAR_INT_INT_PCHAR(name, ...) void name ( __VA_ARGS__ ); \
100100
int t_##name(int argc, char const *argv[]){\
101-
if(7 != argc) return -1;\
101+
if(7 > argc) return -1;\
102102
name(argv[3], (int)atoi(argv[4]), (int)atoi(argv[5]), argv[6]);return 0;\
103103
} \
104104
RE_REGISTER(name, "void " #name "(" # __VA_ARGS__ ")", t_##name)
105105

106106
/* 用于套壳调用函数,参数 char*, int, char* */
107107
#define DEF_FUN_PCHAR_INT_PCHAR(name, ...) void name ( __VA_ARGS__ ); \
108108
int t_##name(int argc, char const *argv[]){\
109-
if(6 != argc) return -1;\
109+
if(6 > argc) return -1;\
110110
name(argv[3], (int)atoi(argv[4]), argv[5]);return 0;\
111111
} \
112112
RE_REGISTER(name, "void " #name "(" # __VA_ARGS__ ")", t_##name)
113113

114114
/* 用于套壳调用函数,参数 char*, int, char*,int, int */
115115
#define DEF_FUN_PCHAR_INT_PCHAR_INT_INT(name, ...) void name ( __VA_ARGS__ ); \
116116
int t_##name(int argc, char const *argv[]){\
117-
if(8 != argc) return -1;\
117+
if(8 > argc) return -1;\
118118
name(argv[3], (int)atoi(argv[4]), argv[5], (int)atoi(argv[6]), (int)atoi(argv[7]));return 0;\
119119
} \
120120
RE_REGISTER(name, "void " #name "(" # __VA_ARGS__ ")", t_##name)
121121

122122
/* 用于套壳调用函数,参数 int, const char*, uint16_t, uint32_t, const char* */
123123
#define DEF_FUN_INT_PCHAR_INT_INT_PCHAR(name, ...) void name ( __VA_ARGS__ ); \
124124
int t_##name(int argc, char const *argv[]){\
125-
if(8 != argc) return -1;\
125+
if(8 > argc) return -1;\
126126
name((int)atoi(argv[3]), argv[4], (uint16_t)atoi(argv[5]), (uint32_t)atoi(argv[6]), argv[7]);return 0;\
127127
} \
128128
RE_REGISTER(name, "void " #name "(" # __VA_ARGS__ ")", t_##name)

test/test.vcxproj.filters

+3
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,9 @@
524524
<ClCompile Include="..\libmpeg\test\mov-2-mpeg-ps-test.cpp">
525525
<Filter>libmpeg</Filter>
526526
</ClCompile>
527+
<ClCompile Include="..\librtsp\source\sdp\sdp-h266.c">
528+
<Filter>librtsp\sdp</Filter>
529+
</ClCompile>
527530
<ClCompile Include="..\librtsp\test\media\ps-file-reader.cpp">
528531
<Filter>librtsp\media</Filter>
529532
</ClCompile>

0 commit comments

Comments
 (0)