summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-04-28 11:48:40 +0200
committerMichael Niedermayer <michaelni@gmx.at>2013-04-28 11:48:40 +0200
commit54056c149333034414b86b6771692ea5862862d4 (patch)
treeac2482fa9f226f0f3c6e3594a812c33e993243ae /libavformat
parent0fb64da63fb72a642d3e69480470de39008745e5 (diff)
parentcf679b9476727a237c8006c685ace18acba149ab (diff)
Merge commit 'cf679b9476727a237c8006c685ace18acba149ab'
* commit 'cf679b9476727a237c8006c685ace18acba149ab': hls, segment: fix splitting for audio-only streams. Conflicts: libavformat/hlsenc.c libavformat/segment.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/hlsenc.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index 18914c026a..e97b4e0a5f 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -253,25 +253,28 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt)
AVFormatContext *oc = hls->avf;
AVStream *st = s->streams[pkt->stream_index];
int64_t end_pts = hls->recording_time * hls->number;
- int ret, is_ref_pkt = 0;
+ int is_ref_pkt = 1;
+ int ret, can_split = 1;
if (hls->start_pts == AV_NOPTS_VALUE) {
hls->start_pts = pkt->pts;
hls->end_pts = pkt->pts;
}
- if ((hls->has_video && st->codec->codec_type == AVMEDIA_TYPE_VIDEO) &&
- pkt->pts != AV_NOPTS_VALUE) {
- is_ref_pkt = 1;
- hls->duration = av_rescale(pkt->pts - hls->end_pts,
- st->time_base.num, st->time_base.den);
+ if (hls->has_video) {
+ can_split = st->codec->codec_type == AVMEDIA_TYPE_VIDEO &&
+ pkt->flags & AV_PKT_FLAG_KEY;
+ is_ref_pkt = st->codec->codec_type == AVMEDIA_TYPE_VIDEO;
}
+ if (pkt->pts == AV_NOPTS_VALUE)
+ is_ref_pkt = can_split = 0;
- if (is_ref_pkt &&
- av_compare_ts(pkt->pts - hls->start_pts, st->time_base,
- end_pts, AV_TIME_BASE_Q) >= 0 &&
- pkt->flags & AV_PKT_FLAG_KEY) {
+ if (is_ref_pkt)
+ hls->duration = av_rescale(pkt->pts - hls->end_pts,
+ st->time_base.num, st->time_base.den);
+ if (can_split && av_compare_ts(pkt->pts - hls->start_pts, st->time_base,
+ end_pts, AV_TIME_BASE_Q) >= 0) {
ret = append_entry(hls, hls->duration);
if (ret)
return ret;