@@ -231,7 +231,7 @@ int sdp_a_fmtp_h264(const char* fmtp, int *format, struct sdp_a_fmtp_h264_t *h26
231231// a=fmtp:98 profile-id=1; sprop-vps=<video parameter sets data>
232232int sdp_a_fmtp_h265 (const char * fmtp , int * format , struct sdp_a_fmtp_h265_t * h265 )
233233{
234- size_t nc ;
234+ size_t nc , vc ;
235235 const char * p1 , * p2 ;
236236 const char * p = fmtp ;
237237
@@ -257,7 +257,7 @@ int sdp_a_fmtp_h265(const char* fmtp, int *format, struct sdp_a_fmtp_h265_t *h26
257257 while (' ' == * p ) p ++ ; // skip space
258258
259259 nc = (size_t )(p1 - p ); // ptrdiff_t to size_t
260- // vc = (size_t)(p2 - p1 - 1); // ptrdiff_t to size_t
260+ vc = (size_t )(p2 - p1 - 1 ); // ptrdiff_t to size_t
261261 switch (* p )
262262 {
263263 case 'i' :
@@ -279,15 +279,31 @@ int sdp_a_fmtp_h265(const char* fmtp, int *format, struct sdp_a_fmtp_h265_t *h26
279279 // sprop-sei
280280 if (0 == strncasecmp ("sprop-vps" , p , nc ))
281281 {
282+ if (vc >= sizeof (h265 -> sprop_vps )) return -1 ;
283+ h265 -> flags |= SDP_A_FMTP_H265_SPROP_VPS ;
284+ memcpy (h265 -> sprop_vps , p1 + 1 , vc );
285+ h265 -> sprop_vps [vc ] = '\0' ;
282286 }
283287 else if (0 == strncasecmp ("sprop-sps" , p , nc ))
284288 {
289+ if (vc >= sizeof (h265 -> sprop_sps )) return -1 ;
290+ h265 -> flags |= SDP_A_FMTP_H265_SPROP_SPS ;
291+ memcpy (h265 -> sprop_sps , p1 + 1 , vc );
292+ h265 -> sprop_sps [vc ] = '\0' ;
285293 }
286294 else if (0 == strncasecmp ("sprop-pps" , p , nc ))
287295 {
296+ if (vc >= sizeof (h265 -> sprop_pps )) return -1 ;
297+ h265 -> flags |= SDP_A_FMTP_H265_SPROP_PPS ;
298+ memcpy (h265 -> sprop_pps , p1 + 1 , vc );
299+ h265 -> sprop_pps [vc ] = '\0' ;
288300 }
289301 else if (0 == strncasecmp ("sprop-sei" , p , nc ))
290302 {
303+ if (vc >= sizeof (h265 -> sprop_sei )) return -1 ;
304+ h265 -> flags |= SDP_A_FMTP_H265_SPROP_SEI ;
305+ memcpy (h265 -> sprop_sei , p1 + 1 , vc );
306+ h265 -> sprop_sei [vc ] = '\0' ;
291307 }
292308 break ;
293309
@@ -308,7 +324,7 @@ int sdp_a_fmtp_h265(const char* fmtp, int *format, struct sdp_a_fmtp_h265_t *h26
308324// a=fmtp:98 profile-id=1; sprop-vps=<video parameter sets data>
309325int sdp_a_fmtp_h266 (const char * fmtp , int * format , struct sdp_a_fmtp_h266_t * h266 )
310326{
311- size_t nc ;
327+ size_t nc , vc ;
312328 const char * p1 , * p2 ;
313329 const char * p = fmtp ;
314330
@@ -334,7 +350,7 @@ int sdp_a_fmtp_h266(const char* fmtp, int* format, struct sdp_a_fmtp_h266_t* h26
334350 while (' ' == * p ) p ++ ; // skip space
335351
336352 nc = (size_t )(p1 - p ); // ptrdiff_t to size_t
337- // vc = (size_t)(p2 - p1 - 1); // ptrdiff_t to size_t
353+ vc = (size_t )(p2 - p1 - 1 ); // ptrdiff_t to size_t
338354 switch (* p )
339355 {
340356 case 'i' :
@@ -357,18 +373,38 @@ int sdp_a_fmtp_h266(const char* fmtp, int* format, struct sdp_a_fmtp_h266_t* h26
357373 // sprop-sei
358374 if (0 == strncasecmp ("sprop-vps" , p , nc ))
359375 {
376+ if (vc >= sizeof (h266 -> sprop_vps )) return -1 ;
377+ h266 -> flags |= SDP_A_FMTP_H266_SPROP_VPS ;
378+ memcpy (h266 -> sprop_vps , p1 + 1 , vc );
379+ h266 -> sprop_vps [vc ] = '\0' ;
360380 }
361381 else if (0 == strncasecmp ("sprop-sps" , p , nc ))
362382 {
383+ if (vc >= sizeof (h266 -> sprop_sps )) return -1 ;
384+ h266 -> flags |= SDP_A_FMTP_H266_SPROP_SPS ;
385+ memcpy (h266 -> sprop_sps , p1 + 1 , vc );
386+ h266 -> sprop_sps [vc ] = '\0' ;
363387 }
364388 else if (0 == strncasecmp ("sprop-pps" , p , nc ))
365389 {
390+ if (vc >= sizeof (h266 -> sprop_pps )) return -1 ;
391+ h266 -> flags |= SDP_A_FMTP_H266_SPROP_PPS ;
392+ memcpy (h266 -> sprop_pps , p1 + 1 , vc );
393+ h266 -> sprop_pps [vc ] = '\0' ;
366394 }
367395 else if (0 == strncasecmp ("sprop-sei" , p , nc ))
368396 {
397+ if (vc >= sizeof (h266 -> sprop_sei )) return -1 ;
398+ h266 -> flags |= SDP_A_FMTP_H266_SPROP_SEI ;
399+ memcpy (h266 -> sprop_sei , p1 + 1 , vc );
400+ h266 -> sprop_sei [vc ] = '\0' ;
369401 }
370402 else if (0 == strncasecmp ("sprop-dci" , p , nc ))
371403 {
404+ if (vc >= sizeof (h266 -> sprop_dci )) return -1 ;
405+ h266 -> flags |= SDP_A_FMTP_H266_SPROP_DCI ;
406+ memcpy (h266 -> sprop_dci , p1 + 1 , vc );
407+ h266 -> sprop_dci [vc ] = '\0' ;
372408 }
373409 break ;
374410
0 commit comments