LCOV - code coverage report
Current view: top level - src/libavcodec - assdec.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 20 25 80.0 %
Date: 2017-01-24 04:42:20 Functions: 2 2 100.0 %

          Line data    Source code
       1             : /*
       2             :  * SSA/ASS decoder
       3             :  * Copyright (c) 2010  Aurelien Jacobs <aurel@gnuage.org>
       4             :  *
       5             :  * This file is part of FFmpeg.
       6             :  *
       7             :  * FFmpeg is free software; you can redistribute it and/or
       8             :  * modify it under the terms of the GNU Lesser General Public
       9             :  * License as published by the Free Software Foundation; either
      10             :  * version 2.1 of the License, or (at your option) any later version.
      11             :  *
      12             :  * FFmpeg is distributed in the hope that it will be useful,
      13             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      14             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      15             :  * Lesser General Public License for more details.
      16             :  *
      17             :  * You should have received a copy of the GNU Lesser General Public
      18             :  * License along with FFmpeg; if not, write to the Free Software
      19             :  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
      20             :  */
      21             : 
      22             : #include <string.h>
      23             : 
      24             : #include "avcodec.h"
      25             : #include "ass.h"
      26             : #include "libavutil/internal.h"
      27             : #include "libavutil/mem.h"
      28             : 
      29           4 : static av_cold int ass_decode_init(AVCodecContext *avctx)
      30             : {
      31           4 :     avctx->subtitle_header = av_malloc(avctx->extradata_size + 1);
      32           4 :     if (!avctx->subtitle_header)
      33           0 :         return AVERROR(ENOMEM);
      34           4 :     memcpy(avctx->subtitle_header, avctx->extradata, avctx->extradata_size);
      35           4 :     avctx->subtitle_header[avctx->extradata_size] = 0;
      36           4 :     avctx->subtitle_header_size = avctx->extradata_size;
      37           4 :     return 0;
      38             : }
      39             : 
      40           8 : static int ass_decode_frame(AVCodecContext *avctx, void *data, int *got_sub_ptr,
      41             :                             AVPacket *avpkt)
      42             : {
      43           8 :     AVSubtitle *sub = data;
      44             : 
      45           8 :     if (avpkt->size <= 0)
      46           0 :         return avpkt->size;
      47             : 
      48           8 :     sub->rects = av_malloc(sizeof(*sub->rects));
      49           8 :     if (!sub->rects)
      50           0 :         return AVERROR(ENOMEM);
      51           8 :     sub->rects[0] = av_mallocz(sizeof(*sub->rects[0]));
      52           8 :     if (!sub->rects[0])
      53           0 :         return AVERROR(ENOMEM);
      54           8 :     sub->num_rects = 1;
      55           8 :     sub->rects[0]->type = SUBTITLE_ASS;
      56           8 :     sub->rects[0]->ass  = av_strdup(avpkt->data);
      57           8 :     if (!sub->rects[0]->ass)
      58           0 :         return AVERROR(ENOMEM);
      59           8 :     *got_sub_ptr = 1;
      60           8 :     return avpkt->size;
      61             : }
      62             : 
      63             : #if CONFIG_SSA_DECODER
      64             : AVCodec ff_ssa_decoder = {
      65             :     .name         = "ssa",
      66             :     .long_name    = NULL_IF_CONFIG_SMALL("ASS (Advanced SubStation Alpha) subtitle"),
      67             :     .type         = AVMEDIA_TYPE_SUBTITLE,
      68             :     .id           = AV_CODEC_ID_ASS,
      69             :     .init         = ass_decode_init,
      70             :     .decode       = ass_decode_frame,
      71             : };
      72             : #endif
      73             : 
      74             : #if CONFIG_ASS_DECODER
      75             : AVCodec ff_ass_decoder = {
      76             :     .name         = "ass",
      77             :     .long_name    = NULL_IF_CONFIG_SMALL("ASS (Advanced SubStation Alpha) subtitle"),
      78             :     .type         = AVMEDIA_TYPE_SUBTITLE,
      79             :     .id           = AV_CODEC_ID_ASS,
      80             :     .init         = ass_decode_init,
      81             :     .decode       = ass_decode_frame,
      82             : };
      83             : #endif

Generated by: LCOV version 1.12