On Sat, Sep 26, 2015 at 07:41:32AM -0400, DeHackEd wrote: > Assumes 'GA94' format (ATSC standard) > > Signed-off-by: DHE <[email protected]> > --- > doc/encoders.texi | 5 +++++ > libavcodec/libx264.c | 37 +++++++++++++++++++++++++++++++++++++ > 2 files changed, 42 insertions(+) > > diff --git a/doc/encoders.texi b/doc/encoders.texi > index 3550bcc..aabbda0 100644 > --- a/doc/encoders.texi > +++ b/doc/encoders.texi > @@ -2069,6 +2069,11 @@ For example to specify libx264 encoding options with > @command{ffmpeg}: > ffmpeg -i foo.mpg -vcodec libx264 -x264opts keyint=123:min-keyint=20 -an > out.mkv > @end example > > +@item a53cc @var{boolean} > +Import closed captions (which must be ATSC compatible format) into output. > +Only the mpeg2 and h264 decoders provide these. Default is 0 (off). > + > + > @item x264-params (N.A.) > Override the x264 configuration using a :-separated list of key=value > parameters. > diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c > index 58fcfb0..8540ff9 100644 > --- a/libavcodec/libx264.c > +++ b/libavcodec/libx264.c > @@ -83,6 +83,7 @@ typedef struct X264Context { > int avcintra_class; > int motion_est; > int forced_idr; > + int a53_cc; > char *x264_params; > } X264Context; > > @@ -256,6 +257,7 @@ static int X264_frame(AVCodecContext *ctx, AVPacket *pkt, > const AVFrame *frame, > int nnal, i, ret; > x264_picture_t pic_out = {0}; > int pict_type; > + AVFrameSideData *side_data; > > x264_picture_init( &x4->pic ); > x4->pic.img.i_csp = x4->params.i_csp; > @@ -278,6 +280,40 @@ static int X264_frame(AVCodecContext *ctx, AVPacket > *pkt, const AVFrame *frame, > X264_TYPE_AUTO; > > reconfig_encoder(ctx, frame); > + > + if (x4->a53_cc) { > + side_data = av_frame_get_side_data(frame, AV_FRAME_DATA_A53_CC); > + if (side_data) { > + x4->pic.extra_sei.num_payloads = 1; > + x4->pic.extra_sei.payloads = > av_mallocz(sizeof(x4->pic.extra_sei.payloads[0]));
missing malloc failure check
> + x4->pic.extra_sei.sei_free = av_free;
> +
> + x4->pic.extra_sei.payloads[0].payload_size = side_data->size
> + 11;
> + x4->pic.extra_sei.payloads[0].payload =
> av_mallocz(x4->pic.extra_sei.payloads[0].payload_size);
missing malloc failure check
> + x4->pic.extra_sei.payloads[0].payload_type = 4;
> + memcpy(x4->pic.extra_sei.payloads[0].payload + 10,
> side_data->data, side_data->size);
> + x4->pic.extra_sei.payloads[0].payload[0] = 181;
> + x4->pic.extra_sei.payloads[0].payload[1] = 0;
> + x4->pic.extra_sei.payloads[0].payload[2] = 49;
> +
> + /**
> + * 'GA94' is standard in North America for ATSC, but hard
> coding
> + * this style may not be the right thing to do -- other
> formats
> + * do exist. This information is not available in the
> side_data
> + * so we are going with this right now.
> + */
> + x4->pic.extra_sei.payloads[0].payload[3] = 'G';
> + x4->pic.extra_sei.payloads[0].payload[4] = 'A';
> + x4->pic.extra_sei.payloads[0].payload[5] = '9';
> + x4->pic.extra_sei.payloads[0].payload[6] = '4';
> + x4->pic.extra_sei.payloads[0].payload[7] = 3;
> + x4->pic.extra_sei.payloads[0].payload[8] =
> + ((side_data->size/3) & 0x1f) | 0x40;
> + x4->pic.extra_sei.payloads[0].payload[9] = 0;
> + x4->pic.extra_sei.payloads[0].payload[side_data->size+10] =
> 255;
> + }
> + }
> +
> }
> do {
> if (x264_encoder_encode(x4->enc, &nal, &nnal, frame? &x4->pic: NULL,
> &pic_out) < 0)
> @@ -821,6 +857,7 @@ static const AVOption options[] = {
> {"level", "Specify level (as defined by Annex A)", OFFSET(level),
> AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
> {"passlogfile", "Filename for 2 pass stats", OFFSET(stats),
> AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
> {"wpredp", "Weighted prediction for P-frames", OFFSET(wpredp),
> AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, VE},
> + {"a53cc", "Use A53 Closed Captions (if available)",
> OFFSET(a53_cc), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, VE},
AV_OPT_TYPE_BOOL
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
If you think the mosad wants you dead since a long time then you are either
wrong or dead since a long time.
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list [email protected] http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
