diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2015-02-24 23:03:12 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-02-24 23:03:12 +0100 |
commit | 29f9d82d23ffc4e48c220c68c7041ca581632981 (patch) | |
tree | 4ea28e802df1b855a415754ad05cd6b5ef0c4b04 | |
parent | df38883607d256135082d76f22f4f93051dda690 (diff) | |
parent | 8633fb47db2ec39eb8bd1bd65302af75a94ff5d0 (diff) | |
download | ffmpeg-29f9d82d23ffc4e48c220c68c7041ca581632981.tar.gz |
Merge commit '8633fb47db2ec39eb8bd1bd65302af75a94ff5d0'
* commit '8633fb47db2ec39eb8bd1bd65302af75a94ff5d0':
rtpdec_hevc: Share the implementation of parsing a=framesize with h264
Conflicts:
libavformat/rtpdec_h264.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/rtpdec_formats.h | 1 | ||||
-rw-r--r-- | libavformat/rtpdec_h264.c | 43 | ||||
-rw-r--r-- | libavformat/rtpdec_hevc.c | 28 |
3 files changed, 25 insertions, 47 deletions
diff --git a/libavformat/rtpdec_formats.h b/libavformat/rtpdec_formats.h index 0d216adb0c..57764ae451 100644 --- a/libavformat/rtpdec_formats.h +++ b/libavformat/rtpdec_formats.h @@ -42,6 +42,7 @@ int ff_h264_handle_aggregated_packet(AVFormatContext *ctx, PayloadContext *data, const uint8_t *buf, int len, int start_skip, int *nal_counters, int nal_mask); +void ff_h264_parse_framesize(AVCodecContext *codec, const char *p); extern RTPDynamicProtocolHandler ff_ac3_dynamic_handler; extern RTPDynamicProtocolHandler ff_amr_nb_dynamic_handler; diff --git a/libavformat/rtpdec_h264.c b/libavformat/rtpdec_h264.c index 798c043afa..2fa3aeaa7a 100644 --- a/libavformat/rtpdec_h264.c +++ b/libavformat/rtpdec_h264.c @@ -177,6 +177,28 @@ static int sdp_parse_fmtp_config_h264(AVFormatContext *s, return 0; } +void ff_h264_parse_framesize(AVCodecContext *codec, const char *p) +{ + char buf1[50]; + char *dst = buf1; + + // remove the protocol identifier + while (*p && *p == ' ') + p++; // strip spaces. + while (*p && *p != ' ') + p++; // eat protocol identifier + while (*p && *p == ' ') + p++; // strip trailing spaces. + while (*p && *p != '-' && (dst - buf1) < sizeof(buf1) - 1) + *dst++ = *p++; + *dst = '\0'; + + // a='framesize:96 320-240' + // set our parameters + codec->width = atoi(buf1); + codec->height = atoi(p + 1); // skip the - +} + int ff_h264_handle_aggregated_packet(AVFormatContext *ctx, PayloadContext *data, AVPacket *pkt, const uint8_t *buf, int len, int skip_between, int *nal_counters, @@ -361,34 +383,15 @@ static int parse_h264_sdp_line(AVFormatContext *s, int st_index, PayloadContext *h264_data, const char *line) { AVStream *stream; - AVCodecContext *codec; const char *p = line; if (st_index < 0) return 0; stream = s->streams[st_index]; - codec = stream->codec; if (av_strstart(p, "framesize:", &p)) { - char buf1[50]; - char *dst = buf1; - - // remove the protocol identifier - while (*p && *p == ' ') - p++; // strip spaces. - while (*p && *p != ' ') - p++; // eat protocol identifier - while (*p && *p == ' ') - p++; // strip trailing spaces. - while (*p && *p != '-' && (dst - buf1) < sizeof(buf1) - 1) - *dst++ = *p++; - *dst = '\0'; - - // a='framesize:96 320-240' - // set our parameters - codec->width = atoi(buf1); - codec->height = atoi(p + 1); // skip the - + ff_h264_parse_framesize(stream->codec, p); } else if (av_strstart(p, "fmtp:", &p)) { return ff_parse_fmtp(s, stream, h264_data, p, sdp_parse_fmtp_config_h264); } else if (av_strstart(p, "cliprect:", &p)) { diff --git a/libavformat/rtpdec_hevc.c b/libavformat/rtpdec_hevc.c index b374e096a6..afabc5b67f 100644 --- a/libavformat/rtpdec_hevc.c +++ b/libavformat/rtpdec_hevc.c @@ -142,33 +142,7 @@ static av_cold int hevc_parse_sdp_line(AVFormatContext *ctx, int st_index, codec = current_stream->codec; if (av_strstart(sdp_line_ptr, "framesize:", &sdp_line_ptr)) { - char str_video_width[50]; - char *str_video_width_ptr = str_video_width; - - /* - * parse "a=framesize:96 320-240" - */ - - /* ignore spaces */ - while (*sdp_line_ptr && *sdp_line_ptr == ' ') - sdp_line_ptr++; - /* ignore RTP payload ID */ - while (*sdp_line_ptr && *sdp_line_ptr != ' ') - sdp_line_ptr++; - /* ignore spaces */ - while (*sdp_line_ptr && *sdp_line_ptr == ' ') - sdp_line_ptr++; - /* extract the actual video resolution description */ - while (*sdp_line_ptr && *sdp_line_ptr != '-' && - (str_video_width_ptr - str_video_width) < sizeof(str_video_width) - 1) - *str_video_width_ptr++ = *sdp_line_ptr++; - /* add trailing zero byte */ - *str_video_width_ptr = '\0'; - - /* determine the width value */ - codec->width = atoi(str_video_width); - /* jump beyond the "-" and determine the height value */ - codec->height = atoi(sdp_line_ptr + 1); + ff_h264_parse_framesize(codec, sdp_line_ptr); } else if (av_strstart(sdp_line_ptr, "fmtp:", &sdp_line_ptr)) { int ret = ff_parse_fmtp(ctx, current_stream, hevc_data, sdp_line_ptr, hevc_sdp_parse_fmtp_config); |