From patchwork Wed Sep 17 20:02:24 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Andr=C3=A9_Roth?= X-Patchwork-Id: 4926461 Return-Path: X-Original-To: patchwork-linux-media@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 33DA29F502 for ; Wed, 17 Sep 2014 20:01:47 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 4E02320117 for ; Wed, 17 Sep 2014 20:02:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1D28220179 for ; Wed, 17 Sep 2014 20:02:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757189AbaIQUCu (ORCPT ); Wed, 17 Sep 2014 16:02:50 -0400 Received: from mail-we0-f173.google.com ([74.125.82.173]:65077 "EHLO mail-we0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757181AbaIQUCt (ORCPT ); Wed, 17 Sep 2014 16:02:49 -0400 Received: by mail-we0-f173.google.com with SMTP id t60so136560wes.32 for ; Wed, 17 Sep 2014 13:02:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:mime-version:content-type :content-transfer-encoding; bh=d5kAbfrl5UoxAsFzkL8D8ooj/qDpFNYRgMzDDHtlk84=; b=XuHhZuzpwPKjNmnsR7t1Ty0fXWHvjK7WtOiHsqVaGYYoOhHtvRJ5inupFyKbFSdaEc 8fXUz1zGASTgr5MUlNFw0wmN4g9Unaxwur/urJCGbIZIeHqRl4P6vrfvEpxV3hZh78DF NwwC5JyDs8Jgg7crvPqpkFRh5+4gs8N6WoulLV94Gnecjzz7x2cmu9M+UTpcKmSX0Mom A4+Uvq7A+JmKg2DIphqXEtsEt9PcQApP0HrC8gzUO7xg+BZBmdkmTBR7zBl24nuu3lD5 IA5hs+ak7hwfAoq5+Cr0RdWw4KGcTNa6t4jyrhhrIyMMRXD8q3WcwvQUEZqqlJTQSpVf 4uDw== X-Received: by 10.194.7.136 with SMTP id j8mr52272398wja.62.1410984167798; Wed, 17 Sep 2014 13:02:47 -0700 (PDT) Received: from neutrino.exnihilo (162-27.194-178.cust.bluewin.ch. [178.194.27.162]) by mx.google.com with ESMTPSA id pk9sm23313085wjb.16.2014.09.17.13.02.46 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 17 Sep 2014 13:02:47 -0700 (PDT) From: =?UTF-8?q?Andr=C3=A9=20Roth?= To: linux-media@vger.kernel.org Cc: =?UTF-8?q?Andr=C3=A9=20Roth?= Subject: [PATCH] libdvbv5: MPEG ES parser documentation Date: Wed, 17 Sep 2014 22:02:24 +0200 Message-Id: <1410984144-4908-1-git-send-email-neolynx@gmail.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: André Roth --- lib/include/libdvbv5/mpeg_es.h | 140 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 135 insertions(+), 5 deletions(-) diff --git a/lib/include/libdvbv5/mpeg_es.h b/lib/include/libdvbv5/mpeg_es.h index 4f1786e..377f235 100644 --- a/lib/include/libdvbv5/mpeg_es.h +++ b/lib/include/libdvbv5/mpeg_es.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013 - Andre Roth + * Copyright (c) 2013-2014 - Andre Roth * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -21,9 +21,46 @@ #ifndef _MPEG_ES_H #define _MPEG_ES_H +/** + * @file mpeg_es.h + * @ingroup dvb_table + * @brief Provides the table parser for the MPEG-TS Elementary Stream + * @copyright GNU General Public License version 2 (GPLv2) + * @author Andre Roth + * + * @par Relevant specs + * The table described herein is defined in ISO 13818-2 + * + * @see + * http://dvd.sourceforge.net/dvdinfo/mpeghdrs.html + * + * @par Bug Report + * Please submit bug reports and patches to linux-media@vger.kernel.org + */ + #include #include /* ssize_t */ +/** + * @def DVB_MPEG_ES_PIC_START + * @brief Picture Start + * @ingroup dvb_table + * @def DVB_MPEG_ES_USER_DATA + * @brief User Data + * @ingroup dvb_table + * @def DVB_MPEG_ES_SEQ_START + * @brief Sequence Start + * @ingroup dvb_table + * @def DVB_MPEG_ES_SEQ_EXT + * @brief Extension + * @ingroup dvb_table + * @def DVB_MPEG_ES_GOP + * @brief Group Of Pictures + * @ingroup dvb_table + * @def DVB_MPEG_ES_SLICES + * @brief Slices + * @ingroup dvb_table + */ #define DVB_MPEG_ES_PIC_START 0x00 #define DVB_MPEG_ES_USER_DATA 0xb2 #define DVB_MPEG_ES_SEQ_START 0xb3 @@ -31,6 +68,23 @@ #define DVB_MPEG_ES_GOP 0xb8 #define DVB_MPEG_ES_SLICES 0x01 ... 0xaf +/** + * @struct dvb_mpeg_es_seq_start + * @brief Sequence header + * + * @param type DVB_MPEG_ES_SEQ_START + * @param sync Sync bytes + * @param framerate Framerate + * @param aspect Aspect ratio + * @param height Height + * @param width Width + * @param qm_nonintra Load non-intra quantizer matrix + * @param qm_intra Load intra quantizer matrix + * @param constrained Constrained parameters flag + * @param vbv VBV buffer size + * @param one Should be 1 + * @param bitrate Bitrate + */ struct dvb_mpeg_es_seq_start { union { uint32_t bitfield; @@ -61,6 +115,17 @@ struct dvb_mpeg_es_seq_start { } __attribute__((packed)); } __attribute__((packed)); +/** + * @struct dvb_mpeg_es_pic_start + * @brief Picture start header + * + * @param type DVB_MPEG_ES_PIC_START + * @param sync Sync bytes + * @param dummy Unused + * @param vbv_delay VBV delay + * @param coding_type Frame type (enum dvb_mpeg_es_frame_t) + * @param temporal_ref Temporal sequence number + */ struct dvb_mpeg_es_pic_start { union { uint32_t bitfield; @@ -80,6 +145,22 @@ struct dvb_mpeg_es_pic_start { } __attribute__((packed)); } __attribute__((packed)); +/** + * @enum dvb_mpeg_es_frame_t + * @brief MPEG frame types + * @ingroup dvb_table + * + * @var DVB_MPEG_ES_FRAME_UNKNOWN + * @brief Unknown frame + * @var DVB_MPEG_ES_FRAME_I + * @brief I frame + * @var DVB_MPEG_ES_FRAME_P + * @brief P frame + * @var DVB_MPEG_ES_FRAME_B + * @brief B frame + * @var DVB_MPEG_ES_FRAME_D + * @brief D frame + */ enum dvb_mpeg_es_frame_t { DVB_MPEG_ES_FRAME_UNKNOWN, @@ -88,6 +169,7 @@ enum dvb_mpeg_es_frame_t DVB_MPEG_ES_FRAME_B, DVB_MPEG_ES_FRAME_D }; + extern const char *dvb_mpeg_es_frame_names[5]; struct dvb_v5_fe_parms; @@ -96,11 +178,59 @@ struct dvb_v5_fe_parms; extern "C" { #endif -int dvb_mpeg_es_seq_start_init (const uint8_t *buf, ssize_t buflen, struct dvb_mpeg_es_seq_start *seq_start); -void dvb_mpeg_es_seq_start_print(struct dvb_v5_fe_parms *parms, struct dvb_mpeg_es_seq_start *seq_start); +/** + * @brief Initialize a struct dvb_mpeg_es_seq_start from buffer + * + * @param buf Buffer + * @param buflen Lenght of buffer + * @param seq_start Pointer to allocated struct dvb_mpeg_es_seq_start + * + * @return If buflen too small, return -1, 0 otherwise. + * + * This function copies the length of struct dvb_mpeg_es_seq_start + * to seq_start and fixes endianness. seq_start has to be allocated + * with malloc. + */ +int dvb_mpeg_es_seq_start_init (const uint8_t *buf, ssize_t buflen, + struct dvb_mpeg_es_seq_start *seq_start); + +/** + * @brief Print details of struct dvb_mpeg_es_seq_start + * + * @param parms struct dvb_v5_fe_parms for log functions + * @param seq_start Pointer to struct dvb_mpeg_es_seq_start to print + * + * This function prints the fields of struct dvb_mpeg_es_seq_start + */ +void dvb_mpeg_es_seq_start_print(struct dvb_v5_fe_parms *parms, + struct dvb_mpeg_es_seq_start *seq_start); + +/** + * @brief Initialize a struct dvb_mpeg_es_pic_start from buffer + * + * @param buf Buffer + * @param buflen Lenght of buffer + * @param pic_start Pointer to allocated structdvb_mpeg_es_pic_start + * + * @return If buflen too small, return -1, 0 otherwise. + * + * This function copies the length of struct dvb_mpeg_es_pic_start + * to pic_start and fixes endianness. seq_start has to be allocated + * with malloc. + */ +int dvb_mpeg_es_pic_start_init (const uint8_t *buf, ssize_t buflen, + struct dvb_mpeg_es_pic_start *pic_start); -int dvb_mpeg_es_pic_start_init (const uint8_t *buf, ssize_t buflen, struct dvb_mpeg_es_pic_start *pic_start); -void dvb_mpeg_es_pic_start_print(struct dvb_v5_fe_parms *parms, struct dvb_mpeg_es_pic_start *pic_start); +/** + * @brief Print details of struct dvb_mpeg_es_pic_start + * + * @param parms struct dvb_v5_fe_parms for log functions + * @param pic_start Pointer to struct dvb_mpeg_es_pic_start to print + * + * This function prints the fields of struct dvb_mpeg_es_pic_start + */ +void dvb_mpeg_es_pic_start_print(struct dvb_v5_fe_parms *parms, + struct dvb_mpeg_es_pic_start *pic_start); #ifdef __cplusplus }