LCOV - code coverage report
Current view: top level - libavformat - framecrcenc.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 24 24 100.0 %
Date: 2017-12-18 06:23:41 Functions: 2 2 100.0 %

          Line data    Source code
       1             : /*
       2             :  * frame CRC encoder (for codec/format testing)
       3             :  * Copyright (c) 2002 Fabrice Bellard
       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 <inttypes.h>
      23             : 
      24             : #include "libavutil/adler32.h"
      25             : #include "libavutil/avstring.h"
      26             : #include "avformat.h"
      27             : #include "internal.h"
      28             : 
      29        1210 : static int framecrc_write_header(struct AVFormatContext *s)
      30             : {
      31             :     int i;
      32        2469 :     for (i = 0; i < s->nb_streams; i++) {
      33        1259 :         AVStream *st = s->streams[i];
      34        1259 :         AVCodecParameters *par = st->codecpar;
      35        1259 :         if (par->extradata) {
      36          37 :             uint32_t crc = av_adler32_update(0, par->extradata, par->extradata_size);
      37          37 :             avio_printf(s->pb, "#extradata %d: %8d, 0x%08"PRIx32"\n",
      38             :                         i, par->extradata_size, crc);
      39             :         }
      40             :     }
      41             : 
      42        1210 :     return ff_framehash_write_header(s);
      43             : }
      44             : 
      45       70777 : static int framecrc_write_packet(struct AVFormatContext *s, AVPacket *pkt)
      46             : {
      47       70777 :     uint32_t crc = av_adler32_update(0, pkt->data, pkt->size);
      48             :     char buf[256];
      49             : 
      50       70777 :     snprintf(buf, sizeof(buf), "%d, %10"PRId64", %10"PRId64", %8"PRId64", %8d, 0x%08"PRIx32,
      51             :              pkt->stream_index, pkt->dts, pkt->pts, pkt->duration, pkt->size, crc);
      52       70777 :     if (pkt->flags != AV_PKT_FLAG_KEY)
      53        1963 :         av_strlcatf(buf, sizeof(buf), ", F=0x%0X", pkt->flags);
      54       70777 :     if (pkt->side_data_elems) {
      55             :         int i, j;
      56        1817 :         av_strlcatf(buf, sizeof(buf), ", S=%d", pkt->side_data_elems);
      57             : 
      58        3635 :         for (i=0; i<pkt->side_data_elems; i++) {
      59        1818 :             uint32_t side_data_crc = 0;
      60             :             if (HAVE_BIGENDIAN && AV_PKT_DATA_PALETTE == pkt->side_data[i].type) {
      61             :                 for (j=0; j<pkt->side_data[i].size; j++) {
      62             :                     side_data_crc = av_adler32_update(side_data_crc,
      63             :                                                       pkt->side_data[i].data + (j^3),
      64             :                                                       1);
      65             :                 }
      66             :             } else {
      67        3636 :                 side_data_crc = av_adler32_update(0,
      68        1818 :                                                   pkt->side_data[i].data,
      69        1818 :                                                   pkt->side_data[i].size);
      70             :             }
      71        1818 :             av_strlcatf(buf, sizeof(buf), ", %8d, 0x%08"PRIx32, pkt->side_data[i].size, side_data_crc);
      72             :         }
      73             :     }
      74       70777 :     av_strlcatf(buf, sizeof(buf), "\n");
      75       70777 :     avio_write(s->pb, buf, strlen(buf));
      76       70777 :     return 0;
      77             : }
      78             : 
      79             : AVOutputFormat ff_framecrc_muxer = {
      80             :     .name              = "framecrc",
      81             :     .long_name         = NULL_IF_CONFIG_SMALL("framecrc testing"),
      82             :     .audio_codec       = AV_CODEC_ID_PCM_S16LE,
      83             :     .video_codec       = AV_CODEC_ID_RAWVIDEO,
      84             :     .write_header      = framecrc_write_header,
      85             :     .write_packet      = framecrc_write_packet,
      86             :     .flags             = AVFMT_VARIABLE_FPS | AVFMT_TS_NONSTRICT |
      87             :                          AVFMT_TS_NEGATIVE,
      88             : };

Generated by: LCOV version 1.13