[FFmpeg-cvslog] hevc: Fix a53 caption extraction

2015-11-12 Thread Will Kelleher
ffmpeg | branch: master | Will Kelleher  | Wed Nov 11 
15:37:29 2015 -0600| [b1a32429ef6ccd94673e4c36924ad0949f4d50a1] | committer: 
Michael Niedermayer

hevc: Fix a53 caption extraction

Just realized my previous patch doesn't work quite right.  I uploaded a better
sample file that actually has visible captions to /incoming/hevc_cc.ts.  I
tested with that file doing hevc->x264 and it works.

This is basically an exact copy of the existing h264 logic.

Signed-off-by: Will Kelleher 
Signed-off-by: Michael Niedermayer 

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b1a32429ef6ccd94673e4c36924ad0949f4d50a1
---

 libavcodec/hevc.c |1 +
 libavcodec/hevc_sei.c |   27 +--
 2 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/libavcodec/hevc.c b/libavcodec/hevc.c
index 1fa5283..ece36f8 100644
--- a/libavcodec/hevc.c
+++ b/libavcodec/hevc.c
@@ -2573,6 +2573,7 @@ static int set_side_data(HEVCContext *s)
 if (sd)
 memcpy(sd->data, s->a53_caption, s->a53_caption_size);
 av_freep(&s->a53_caption);
+s->a53_caption_size = 0;
 s->avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS;
 }
 
diff --git a/libavcodec/hevc_sei.c b/libavcodec/hevc_sei.c
index e853067..46cd06b 100644
--- a/libavcodec/hevc_sei.c
+++ b/libavcodec/hevc_sei.c
@@ -151,7 +151,6 @@ static int 
decode_registered_user_data_closed_caption(HEVCContext *s, int size)
 int flag;
 int user_data_type_code;
 int cc_count;
-int i;
 
 GetBitContext *gb = &s->HEVClc->gb;
 
@@ -170,20 +169,28 @@ static int 
decode_registered_user_data_closed_caption(HEVCContext *s, int size)
 size -= 2;
 
 if (cc_count && size >= cc_count * 3) {
-av_freep(&s->a53_caption);
-s->a53_caption_size = cc_count * 3;
-
-s->a53_caption = av_malloc(s->a53_caption_size);
-if (!s->a53_caption)
-return(AVERROR(ENOMEM));
-
-for (i = 0; i < s->a53_caption_size; i++) {
-s->a53_caption[i++] = get_bits(gb, 8);
+const uint64_t new_size = (s->a53_caption_size + cc_count
+   * UINT64_C(3));
+int i, ret;
+
+if (new_size > INT_MAX)
+return AVERROR(EINVAL);
+
+/* Allow merging of the cc data from two fields. */
+ret = av_reallocp(&s->a53_caption, new_size);
+if (ret < 0)
+return ret;
+
+for (i = 0; i < cc_count; i++) {
+s->a53_caption[s->a53_caption_size++] = get_bits(gb, 8);
+s->a53_caption[s->a53_caption_size++] = get_bits(gb, 8);
+s->a53_caption[s->a53_caption_size++] = get_bits(gb, 8);
 }
 skip_bits(gb, 8); // marker_bits
 }
 }
 } else {
+int i;
 for (i = 0; i < size - 1; i++)
 skip_bits(gb, 8);
 }

___
ffmpeg-cvslog mailing list
ffmpeg-cvslog@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog


[FFmpeg-cvslog] os2threads: Add pthread_once()

2015-11-12 Thread KO Myung-Hun
ffmpeg | branch: master | KO Myung-Hun  | Thu Nov 12 12:31:51 
2015 +0900| [6248f23859eb610079b1964e5f081ff0e9c62281] | committer: Michael 
Niedermayer

os2threads: Add pthread_once()

Signed-off-by: Michael Niedermayer 

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6248f23859eb610079b1964e5f081ff0e9c62281
---

 compat/os2threads.h |   27 +++
 1 file changed, 27 insertions(+)

diff --git a/compat/os2threads.h b/compat/os2threads.h
index 5b6ca55..f8fb2c8 100644
--- a/compat/os2threads.h
+++ b/compat/os2threads.h
@@ -32,6 +32,8 @@
 #undef __STRICT_ANSI__  /* for _beginthread() */
 #include 
 
+#include 
+
 #include "libavutil/mem.h"
 
 typedef TID  pthread_t;
@@ -47,6 +49,13 @@ typedef struct {
 
 typedef void pthread_condattr_t;
 
+typedef struct {
+volatile int done;
+_fmutex mtx;
+} pthread_once_t;
+
+#define PTHREAD_ONCE_INIT {0, _FMUTEX_INITIALIZER}
+
 struct thread_arg {
 void *(*start_routine)(void *);
 void *arg;
@@ -163,4 +172,22 @@ static av_always_inline int 
pthread_cond_wait(pthread_cond_t *cond, pthread_mute
 return 0;
 }
 
+static av_always_inline int pthread_once(pthread_once_t *once_control, void 
(*init_routine)(void))
+{
+if (!once_control->done)
+{
+_fmutex_request(&once_control->mtx, 0);
+
+if (!once_control->done)
+{
+init_routine();
+
+once_control->done = 1;
+}
+
+_fmutex_release(&once_control->mtx);
+}
+
+return 0;
+}
 #endif /* AVCODEC_OS2PTHREADS_H */

___
ffmpeg-cvslog mailing list
ffmpeg-cvslog@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog


[FFmpeg-cvslog] avformat/mux: Rename compute_pkt_fields2(), the name is absolutely terrible

2015-11-12 Thread Michael Niedermayer
ffmpeg | branch: master | Michael Niedermayer  | Thu 
Nov 12 23:06:32 2015 +0100| [0106a20aeae868a4fa7a2eb6e11a6c67c83d4bfb] | 
committer: Michael Niedermayer

avformat/mux: Rename compute_pkt_fields2(), the name is absolutely terrible

Signed-off-by: Michael Niedermayer 

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0106a20aeae868a4fa7a2eb6e11a6c67c83d4bfb
---

 libavformat/mux.c |8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/libavformat/mux.c b/libavformat/mux.c
index 135039f..05d4170 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -491,7 +491,7 @@ int avformat_write_header(AVFormatContext *s, AVDictionary 
**options)
 
 #if FF_API_COMPUTE_PKT_FIELDS2
 //FIXME merge with compute_pkt_fields
-static int compute_pkt_fields2(AVFormatContext *s, AVStream *st, AVPacket *pkt)
+static int compute_muxer_pkt_fields(AVFormatContext *s, AVStream *st, AVPacket 
*pkt)
 {
 int delay = FFMAX(st->codec->has_b_frames, st->codec->max_b_frames > 0);
 int num, den, i;
@@ -508,7 +508,7 @@ static int compute_pkt_fields2(AVFormatContext *s, AVStream 
*st, AVPacket *pkt)
 }
 
 if (s->debug & FF_FDEBUG_TS)
-av_log(s, AV_LOG_TRACE, "compute_pkt_fields2: pts:%s dts:%s cur_dts:%s 
b:%d size:%d st:%d\n",
+av_log(s, AV_LOG_TRACE, "compute_muxer_pkt_fields: pts:%s dts:%s 
cur_dts:%s b:%d size:%d st:%d\n",
 av_ts2str(pkt->pts), av_ts2str(pkt->dts), av_ts2str(st->cur_dts), 
delay, pkt->size, pkt->stream_index);
 
 if (pkt->duration < 0 && st->codec->codec_type != AVMEDIA_TYPE_SUBTITLE) {
@@ -783,7 +783,7 @@ int av_write_frame(AVFormatContext *s, AVPacket *pkt)
 }
 
 #if FF_API_COMPUTE_PKT_FIELDS2
-ret = compute_pkt_fields2(s, s->streams[pkt->stream_index], pkt);
+ret = compute_muxer_pkt_fields(s, s->streams[pkt->stream_index], pkt);
 
 if (ret < 0 && !(s->oformat->flags & AVFMT_NOTIMESTAMPS))
 return ret;
@@ -1013,7 +1013,7 @@ int av_interleaved_write_frame(AVFormatContext *s, 
AVPacket *pkt)
 pkt->size, av_ts2str(pkt->dts), av_ts2str(pkt->pts));
 
 #if FF_API_COMPUTE_PKT_FIELDS2
-if ((ret = compute_pkt_fields2(s, st, pkt)) < 0 && !(s->oformat->flags 
& AVFMT_NOTIMESTAMPS))
+if ((ret = compute_muxer_pkt_fields(s, st, pkt)) < 0 && 
!(s->oformat->flags & AVFMT_NOTIMESTAMPS))
 goto fail;
 #endif
 

___
ffmpeg-cvslog mailing list
ffmpeg-cvslog@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog


[FFmpeg-cvslog] avformat/segafilm: Fix current_sample after seeking and avio_seek return type

2015-11-12 Thread Michael Niedermayer
ffmpeg | branch: master | Michael Niedermayer  | Thu 
Nov 12 23:37:21 2015 +0100| [5324109dd7e1bfc0236bf74a492a66f26289d16e] | 
committer: Michael Niedermayer

avformat/segafilm: Fix current_sample after seeking and avio_seek return type

Signed-off-by: Michael Niedermayer 

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=5324109dd7e1bfc0236bf74a492a66f26289d16e
---

 libavformat/segafilm.c |7 ---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/libavformat/segafilm.c b/libavformat/segafilm.c
index 86917e7..94b3772 100644
--- a/libavformat/segafilm.c
+++ b/libavformat/segafilm.c
@@ -296,13 +296,14 @@ static int film_read_seek(AVFormatContext *s, int 
stream_index, int64_t timestam
 {
 FilmDemuxContext *film = s->priv_data;
 AVStream *st = s->streams[stream_index];
+int64_t pos;
 int ret = av_index_search_timestamp(st, timestamp, flags);
 if (ret < 0)
 return ret;
 
-ret = avio_seek(s->pb, st->index_entries[ret].pos, SEEK_SET);
-if (ret < 0)
-return ret;
+pos = avio_seek(s->pb, st->index_entries[ret].pos, SEEK_SET);
+if (pos < 0)
+return pos;
 
 film->current_sample = ret;
 

___
ffmpeg-cvslog mailing list
ffmpeg-cvslog@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog