aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2015-02-24 23:03:12 +0100
committerMichael Niedermayer <michaelni@gmx.at>2015-02-24 23:03:12 +0100
commit29f9d82d23ffc4e48c220c68c7041ca581632981 (patch)
tree4ea28e802df1b855a415754ad05cd6b5ef0c4b04
parentdf38883607d256135082d76f22f4f93051dda690 (diff)
parent8633fb47db2ec39eb8bd1bd65302af75a94ff5d0 (diff)
downloadffmpeg-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.h1
-rw-r--r--libavformat/rtpdec_h264.c43
-rw-r--r--libavformat/rtpdec_hevc.c28
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);