ffmpeg | branch: master | Clément Bœsch <[email protected]> | Tue Jun 21 22:40:56 2016 +0200| [a4403e49b93a68f8c197615f346f2f891c35a4e5] | committer: Clément Bœsch
Merge commit 'b7e64fba7f37cc0399beae844f0a5dbef9219376' * commit 'b7e64fba7f37cc0399beae844f0a5dbef9219376': Reduce the scope of some variables Merged-by: Clément Bœsch <[email protected]> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a4403e49b93a68f8c197615f346f2f891c35a4e5 --- libavcodec/dvbsubdec.c | 5 ++++- libavcodec/mpegvideo_enc.c | 4 ++-- libavcodec/pgssubdec.c | 6 ++++-- libavcodec/xsubdec.c | 6 ++++-- libavdevice/v4l2.c | 2 +- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/libavcodec/dvbsubdec.c b/libavcodec/dvbsubdec.c index a4663d9..e9f4765 100644 --- a/libavcodec/dvbsubdec.c +++ b/libavcodec/dvbsubdec.c @@ -827,7 +827,7 @@ static int save_subtitle_set(AVCodecContext *avctx, AVSubtitle *sub, int *got_ou AVSubtitleRect *rect; DVBSubCLUT *clut; uint32_t *clut_table; - int i,j; + int i; int offset_x=0, offset_y=0; int ret = 0; @@ -924,10 +924,13 @@ static int save_subtitle_set(AVCodecContext *avctx, AVSubtitle *sub, int *got_ou #if FF_API_AVPICTURE FF_DISABLE_DEPRECATION_WARNINGS +{ + int j; for (j = 0; j < 4; j++) { rect->pict.data[j] = rect->data[j]; rect->pict.linesize[j] = rect->linesize[j]; } +} FF_ENABLE_DEPRECATION_WARNINGS #endif diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 2e12a3d..87d7954 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -2931,7 +2931,7 @@ int ff_mpv_reallocate_putbitbuffer(MpegEncContext *s, size_t threshold, size_t s static int encode_thread(AVCodecContext *c, void *arg){ MpegEncContext *s= *(void**)arg; - int mb_x, mb_y, pdif = 0; + int mb_x, mb_y; int chr_h= 16>>s->chroma_y_shift; int i, j; MpegEncContext best_s = { 0 }, backup_s; @@ -3569,7 +3569,7 @@ FF_DISABLE_DEPRECATION_WARNINGS /* Send the last GOB if RTP */ if (s->avctx->rtp_callback) { int number_mb = (mb_y - s->resync_mb_y)*s->mb_width - s->resync_mb_x; - pdif = put_bits_ptr(&s->pb) - s->ptr_lastgob; + int pdif = put_bits_ptr(&s->pb) - s->ptr_lastgob; /* Call the RTP callback to send the last GOB */ emms_c(); s->avctx->rtp_callback(s->avctx, s->ptr_lastgob, pdif, number_mb); diff --git a/libavcodec/pgssubdec.c b/libavcodec/pgssubdec.c index 880fc96..cef477d 100644 --- a/libavcodec/pgssubdec.c +++ b/libavcodec/pgssubdec.c @@ -529,8 +529,6 @@ static int display_end_segment(AVCodecContext *avctx, void *data, } for (i = 0; i < ctx->presentation.object_count; i++) { PGSSubObject *object; - AVSubtitleRect *rect; - int j; sub->rects[i] = av_mallocz(sizeof(*sub->rects[0])); if (!sub->rects[i]) { @@ -597,11 +595,15 @@ static int display_end_segment(AVCodecContext *avctx, void *data, #if FF_API_AVPICTURE FF_DISABLE_DEPRECATION_WARNINGS +{ + AVSubtitleRect *rect; + int j; rect = sub->rects[i]; for (j = 0; j < 4; j++) { rect->pict.data[j] = rect->data[j]; rect->pict.linesize[j] = rect->linesize[j]; } +} FF_ENABLE_DEPRECATION_WARNINGS #endif } diff --git a/libavcodec/xsubdec.c b/libavcodec/xsubdec.c index 540607a..b024535 100644 --- a/libavcodec/xsubdec.c +++ b/libavcodec/xsubdec.c @@ -57,8 +57,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, int64_t packet_time = 0; GetBitContext gb; int has_alpha = avctx->codec_tag == MKTAG('D','X','S','A'); - AVSubtitleRect *rect; - int j; // check that at least header fits if (buf_size < 27 + 7 * 2 + 4 * (3 + has_alpha)) { @@ -134,11 +132,15 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, #if FF_API_AVPICTURE FF_DISABLE_DEPRECATION_WARNINGS +{ + AVSubtitleRect *rect; + int j; rect = sub->rects[0]; for (j = 0; j < 4; j++) { rect->pict.data[j] = rect->data[j]; rect->pict.linesize[j] = rect->linesize[j]; } +} FF_ENABLE_DEPRECATION_WARNINGS #endif diff --git a/libavdevice/v4l2.c b/libavdevice/v4l2.c index c8915e0..9153ad4 100644 --- a/libavdevice/v4l2.c +++ b/libavdevice/v4l2.c @@ -971,9 +971,9 @@ fail: static int v4l2_read_packet(AVFormatContext *ctx, AVPacket *pkt) { - struct video_data *s = ctx->priv_data; #if FF_API_CODED_FRAME FF_DISABLE_DEPRECATION_WARNINGS + struct video_data *s = ctx->priv_data; AVFrame *frame = ctx->streams[0]->codec->coded_frame; FF_ENABLE_DEPRECATION_WARNINGS #endif ====================================================================== diff --cc libavcodec/dvbsubdec.c index a4663d9,526f125..e9f4765 --- a/libavcodec/dvbsubdec.c +++ b/libavcodec/dvbsubdec.c @@@ -761,196 -717,7 +761,199 @@@ static int dvbsub_read_8bit_string(AVCo return pixels_read; } +static void compute_default_clut(AVSubtitleRect *rect, int w, int h) +{ + uint8_t list[256] = {0}; + uint8_t list_inv[256]; + int counttab[256] = {0}; + int count, i, x, y; + +#define V(x,y) rect->data[0][(x) + (y)*rect->linesize[0]] + for (y = 0; y<h; y++) { + for (x = 0; x<w; x++) { + int v = V(x,y) + 1; + int vl = x ? V(x-1,y) + 1 : 0; + int vr = x+1<w ? V(x+1,y) + 1 : 0; + int vt = y ? V(x,y-1) + 1 : 0; + int vb = y+1<h ? V(x,y+1) + 1 : 0; + counttab[v-1] += !!((v!=vl) + (v!=vr) + (v!=vt) + (v!=vb)); + } + } +#define L(x,y) list[ rect->data[0][(x) + (y)*rect->linesize[0]] ] + + for (i = 0; i<256; i++) { + int scoretab[256] = {0}; + int bestscore = 0; + int bestv = 0; + for (y = 0; y<h; y++) { + for (x = 0; x<w; x++) { + int v = rect->data[0][x + y*rect->linesize[0]]; + int l_m = list[v]; + int l_l = x ? L(x-1, y) : 1; + int l_r = x+1<w ? L(x+1, y) : 1; + int l_t = y ? L(x, y-1) : 1; + int l_b = y+1<h ? L(x, y+1) : 1; + int score; + if (l_m) + continue; + scoretab[v] += l_l + l_r + l_t + l_b; + score = 1024LL*scoretab[v] / counttab[v]; + if (score > bestscore) { + bestscore = score; + bestv = v; + } + } + } + if (!bestscore) + break; + list [ bestv ] = 1; + list_inv[ i ] = bestv; + } + + count = i - 1; + for (i--; i>=0; i--) { + int v = i*255/count; + AV_WN32(rect->data[1] + 4*list_inv[i], RGBA(v/2,v,v/2,v)); + } +} + + +static int save_subtitle_set(AVCodecContext *avctx, AVSubtitle *sub, int *got_output) +{ + DVBSubContext *ctx = avctx->priv_data; + DVBSubRegionDisplay *display; + DVBSubDisplayDefinition *display_def = ctx->display_definition; + DVBSubRegion *region; + AVSubtitleRect *rect; + DVBSubCLUT *clut; + uint32_t *clut_table; - int i,j; ++ int i; + int offset_x=0, offset_y=0; + int ret = 0; + + + if (display_def) { + offset_x = display_def->x; + offset_y = display_def->y; + } + + /* Not touching AVSubtitles again*/ + if(sub->num_rects) { + avpriv_request_sample(ctx, "Different Version of Segment asked Twice"); + return AVERROR_PATCHWELCOME; + } + for (display = ctx->display_list; display; display = display->next) { + region = get_region(ctx, display->region_id); + if (region && region->dirty) + sub->num_rects++; + } + + if(ctx->compute_edt == 0) { + sub->end_display_time = ctx->time_out * 1000; + *got_output = 1; + } else if (ctx->prev_start != AV_NOPTS_VALUE) { + sub->end_display_time = av_rescale_q((sub->pts - ctx->prev_start ), AV_TIME_BASE_Q, (AVRational){ 1, 1000 }) - 1; + *got_output = 1; + } + if (sub->num_rects > 0) { + + sub->rects = av_mallocz_array(sizeof(*sub->rects), sub->num_rects); + if (!sub->rects) { + ret = AVERROR(ENOMEM); + goto fail; + } + + for(i=0; i<sub->num_rects; i++) + sub->rects[i] = av_mallocz(sizeof(*sub->rects[i])); + + i = 0; + + for (display = ctx->display_list; display; display = display->next) { + region = get_region(ctx, display->region_id); + + if (!region) + continue; + + if (!region->dirty) + continue; + + rect = sub->rects[i]; + rect->x = display->x_pos + offset_x; + rect->y = display->y_pos + offset_y; + rect->w = region->width; + rect->h = region->height; + rect->nb_colors = (1 << region->depth); + rect->type = SUBTITLE_BITMAP; + rect->linesize[0] = region->width; + + clut = get_clut(ctx, region->clut); + + if (!clut) + clut = &default_clut; + + switch (region->depth) { + case 2: + clut_table = clut->clut4; + break; + case 8: + clut_table = clut->clut256; + break; + case 4: + default: + clut_table = clut->clut16; + break; + } + + rect->data[1] = av_mallocz(AVPALETTE_SIZE); + if (!rect->data[1]) { + ret = AVERROR(ENOMEM); + goto fail; + } + memcpy(rect->data[1], clut_table, (1 << region->depth) * sizeof(uint32_t)); + + rect->data[0] = av_malloc(region->buf_size); + if (!rect->data[0]) { + ret = AVERROR(ENOMEM); + goto fail; + } + + memcpy(rect->data[0], region->pbuf, region->buf_size); + + if ((clut == &default_clut && ctx->compute_clut == -1) || ctx->compute_clut == 1) + compute_default_clut(rect, rect->w, rect->h); + +#if FF_API_AVPICTURE +FF_DISABLE_DEPRECATION_WARNINGS ++{ ++ int j; + for (j = 0; j < 4; j++) { + rect->pict.data[j] = rect->data[j]; + rect->pict.linesize[j] = rect->linesize[j]; + } ++} +FF_ENABLE_DEPRECATION_WARNINGS +#endif + + i++; + } + } + return 0; +fail: + if (sub->rects) { + for(i=0; i<sub->num_rects; i++) { + rect = sub->rects[i]; + if (rect) { + av_freep(&rect->data[0]); + av_freep(&rect->data[1]); + } + av_freep(&sub->rects[i]); + } + av_freep(&sub->rects); + } + sub->num_rects = 0; + return ret; +} static void dvbsub_parse_pixel_data_block(AVCodecContext *avctx, DVBSubObjectDisplay *display, const uint8_t *buf, int buf_size, int top_bottom, int non_mod) diff --cc libavcodec/mpegvideo_enc.c index 2e12a3d,2667f3b..87d7954 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@@ -2895,43 -2681,9 +2895,43 @@@ static void update_mb_info(MpegEncConte write_mb_info(s); } +int ff_mpv_reallocate_putbitbuffer(MpegEncContext *s, size_t threshold, size_t size_increase) +{ + if ( s->pb.buf_end - s->pb.buf - (put_bits_count(&s->pb)>>3) < threshold + && s->slice_context_count == 1 + && s->pb.buf == s->avctx->internal->byte_buffer) { + int lastgob_pos = s->ptr_lastgob - s->pb.buf; + int vbv_pos = s->vbv_delay_ptr - s->pb.buf; + + uint8_t *new_buffer = NULL; + int new_buffer_size = 0; + + if ((s->avctx->internal->byte_buffer_size + size_increase) >= INT_MAX/8) { + av_log(s->avctx, AV_LOG_ERROR, "Cannot reallocate putbit buffer\n"); + return AVERROR(ENOMEM); + } + + av_fast_padded_malloc(&new_buffer, &new_buffer_size, + s->avctx->internal->byte_buffer_size + size_increase); + if (!new_buffer) + return AVERROR(ENOMEM); + + memcpy(new_buffer, s->avctx->internal->byte_buffer, s->avctx->internal->byte_buffer_size); + av_free(s->avctx->internal->byte_buffer); + s->avctx->internal->byte_buffer = new_buffer; + s->avctx->internal->byte_buffer_size = new_buffer_size; + rebase_put_bits(&s->pb, new_buffer, new_buffer_size); + s->ptr_lastgob = s->pb.buf + lastgob_pos; + s->vbv_delay_ptr = s->pb.buf + vbv_pos; + } + if (s->pb.buf_end - s->pb.buf - (put_bits_count(&s->pb)>>3) < threshold) + return AVERROR(EINVAL); + return 0; +} + static int encode_thread(AVCodecContext *c, void *arg){ MpegEncContext *s= *(void**)arg; - int mb_x, mb_y, pdif = 0; + int mb_x, mb_y; int chr_h= 16>>s->chroma_y_shift; int i, j; MpegEncContext best_s = { 0 }, backup_s; diff --cc libavcodec/pgssubdec.c index 880fc96,886685b..cef477d --- a/libavcodec/pgssubdec.c +++ b/libavcodec/pgssubdec.c @@@ -592,18 -576,22 +590,22 @@@ static int display_end_segment(AVCodecC return AVERROR(ENOMEM); } + if (!ctx->forced_subs_only || ctx->presentation.objects[i].composition_flag & 0x40) + memcpy(sub->rects[i]->data[1], palette->clut, sub->rects[i]->nb_colors * sizeof(uint32_t)); + #if FF_API_AVPICTURE FF_DISABLE_DEPRECATION_WARNINGS + { + AVSubtitleRect *rect; + int j; rect = sub->rects[i]; for (j = 0; j < 4; j++) { rect->pict.data[j] = rect->data[j]; rect->pict.linesize[j] = rect->linesize[j]; } + } FF_ENABLE_DEPRECATION_WARNINGS #endif - - memcpy(sub->rects[i]->data[1], palette->clut, sub->rects[i]->nb_colors * sizeof(uint32_t)); - } return 1; } diff --cc libavcodec/xsubdec.c index 540607a,3af300c..b024535 --- a/libavcodec/xsubdec.c +++ b/libavcodec/xsubdec.c @@@ -57,12 -57,12 +57,10 @@@ static int decode_frame(AVCodecContext int64_t packet_time = 0; GetBitContext gb; int has_alpha = avctx->codec_tag == MKTAG('D','X','S','A'); - AVSubtitleRect *rect; - int j; - memset(sub, 0, sizeof(*sub)); - // check that at least header fits if (buf_size < 27 + 7 * 2 + 4 * (3 + has_alpha)) { - av_log(avctx, AV_LOG_ERROR, "coded frame too small\n"); + av_log(avctx, AV_LOG_ERROR, "coded frame size %d too small\n", buf_size); return -1; } diff --cc libavdevice/v4l2.c index c8915e0,b59f29f..9153ad4 --- a/libavdevice/v4l2.c +++ b/libavdevice/v4l2.c @@@ -950,31 -844,19 +950,31 @@@ static int v4l2_read_header(AVFormatCon if (codec_id == AV_CODEC_ID_RAWVIDEO) st->codecpar->codec_tag = avcodec_pix_fmt_to_codec_tag(st->codecpar->format); + else if (codec_id == AV_CODEC_ID_H264) { + st->need_parsing = AVSTREAM_PARSE_FULL_ONCE; + } + if (desired_format == V4L2_PIX_FMT_YVU420) + st->codecpar->codec_tag = MKTAG('Y', 'V', '1', '2'); + else if (desired_format == V4L2_PIX_FMT_YVU410) + st->codecpar->codec_tag = MKTAG('Y', 'V', 'U', '9'); st->codecpar->width = s->width; st->codecpar->height = s->height; - st->codecpar->bit_rate = s->frame_size * av_q2d(st->avg_frame_rate) * 8; + if (st->avg_frame_rate.den) + st->codecpar->bit_rate = s->frame_size * av_q2d(st->avg_frame_rate) * 8; return 0; + +fail: + v4l2_close(s->fd); + return res; } -static int v4l2_read_packet(AVFormatContext *s1, AVPacket *pkt) +static int v4l2_read_packet(AVFormatContext *ctx, AVPacket *pkt) { - struct video_data *s = ctx->priv_data; #if FF_API_CODED_FRAME FF_DISABLE_DEPRECATION_WARNINGS - struct video_data *s = s1->priv_data; - AVFrame *frame = s1->streams[0]->codec->coded_frame; ++ struct video_data *s = ctx->priv_data; + AVFrame *frame = ctx->streams[0]->codec->coded_frame; FF_ENABLE_DEPRECATION_WARNINGS #endif int res; _______________________________________________ ffmpeg-cvslog mailing list [email protected] http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
