/* * AVPacket functions for libavcodec * Copyright (c) 2000, 2001, 2002 Fabrice Bellard * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
void av_packet_free_side_data(AVPacket *pkt)
{ int i; for (i = 0; i < pkt->side_data_elems; i++)
av_freep(&pkt->side_data[i].data);
av_freep(&pkt->side_data);
pkt->side_data_elems = 0;
}
int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
uint8_t *data, size_t size)
{
AVPacketSideData *tmp; int i, elems = pkt->side_data_elems;
for (i = 0; i < elems; i++) {
AVPacketSideData *sd = &pkt->side_data[i];
for (i = 0; i < pkt->side_data_elems; i++) { if (pkt->side_data[i].type == type) { if (size)
*size = pkt->side_data[i].size; return pkt->side_data[i].data;
}
} if (size)
*size = 0; return NULL;
}
constchar *av_packet_side_data_name(enum AVPacketSideDataType type)
{ switch(type) { case AV_PKT_DATA_PALETTE: return"Palette"; case AV_PKT_DATA_NEW_EXTRADATA: return"New Extradata"; case AV_PKT_DATA_PARAM_CHANGE: return"Param Change"; case AV_PKT_DATA_H263_MB_INFO: return"H263 MB Info"; case AV_PKT_DATA_REPLAYGAIN: return"Replay Gain"; case AV_PKT_DATA_DISPLAYMATRIX: return"Display Matrix"; case AV_PKT_DATA_STEREO3D: return"Stereo 3D"; case AV_PKT_DATA_AUDIO_SERVICE_TYPE: return"Audio Service Type"; case AV_PKT_DATA_QUALITY_STATS: return"Quality stats"; case AV_PKT_DATA_FALLBACK_TRACK: return"Fallback track"; case AV_PKT_DATA_CPB_PROPERTIES: return"CPB properties"; case AV_PKT_DATA_SKIP_SAMPLES: return"Skip Samples"; case AV_PKT_DATA_JP_DUALMONO: return"JP Dual Mono"; case AV_PKT_DATA_STRINGS_METADATA: return"Strings Metadata"; case AV_PKT_DATA_SUBTITLE_POSITION: return"Subtitle Position"; case AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL: return"Matroska BlockAdditional"; case AV_PKT_DATA_WEBVTT_IDENTIFIER: return"WebVTT ID"; case AV_PKT_DATA_WEBVTT_SETTINGS: return"WebVTT Settings"; case AV_PKT_DATA_METADATA_UPDATE: return"Metadata Update"; case AV_PKT_DATA_MPEGTS_STREAM_ID: return"MPEGTS Stream ID"; case AV_PKT_DATA_MASTERING_DISPLAY_METADATA: return"Mastering display metadata"; case AV_PKT_DATA_CONTENT_LIGHT_LEVEL: return"Content light level metadata"; case AV_PKT_DATA_SPHERICAL: return"Spherical Mapping"; case AV_PKT_DATA_A53_CC: return"A53 Closed Captions"; case AV_PKT_DATA_ENCRYPTION_INIT_INFO: return"Encryption initialization data"; case AV_PKT_DATA_ENCRYPTION_INFO: return"Encryption info"; case AV_PKT_DATA_AFD: return"Active Format Description data"; case AV_PKT_DATA_PRFT: return"Producer Reference Time"; case AV_PKT_DATA_ICC_PROFILE: return"ICC Profile"; case AV_PKT_DATA_DOVI_CONF: return"DOVI configuration record"; case AV_PKT_DATA_S12M_TIMECODE: return"SMPTE ST 12-1:2014 timecode"; case AV_PKT_DATA_DYNAMIC_HDR10_PLUS: return"HDR10+ Dynamic Metadata (SMPTE 2094-40)"; case AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT:return"Ambient viewing environment"; case AV_PKT_DATA_IAMF_MIX_GAIN_PARAM: return"IAMF Mix Gain Parameter Data"; case AV_PKT_DATA_IAMF_DEMIXING_INFO_PARAM: return"IAMF Demixing Info Parameter Data"; case AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM: return"IAMF Recon Gain Info Parameter Data"; case AV_PKT_DATA_FRAME_CROPPING: return"Frame Cropping"; case AV_PKT_DATA_LCEVC: return"LCEVC NAL data";
} return NULL;
}
int avpriv_packet_list_put(PacketList *packet_buffer,
AVPacket *pkt, int (*copy)(AVPacket *dst, const AVPacket *src), int flags)
{
PacketListEntry *pktl = av_malloc(sizeof(*pktl)); int ret;
if (!pktl) return AVERROR(ENOMEM);
if (copy) {
get_packet_defaults(&pktl->pkt);
ret = copy(&pktl->pkt, pkt); if (ret < 0) {
av_free(pktl); return ret;
}
} else {
ret = av_packet_make_refcounted(pkt); if (ret < 0) {
av_free(pktl); return ret;
}
av_packet_move_ref(&pktl->pkt, pkt);
}
pktl->next = NULL;
if (packet_buffer->head)
packet_buffer->tail->next = pktl; else
packet_buffer->head = pktl;
/* Add the packet in the buffered packet list. */
packet_buffer->tail = pktl; return 0;
}
int avpriv_packet_list_get(PacketList *pkt_buffer,
AVPacket *pkt)
{
PacketListEntry *pktl = pkt_buffer->head; if (!pktl) return AVERROR(EAGAIN);
*pkt = pktl->pkt;
pkt_buffer->head = pktl->next; if (!pkt_buffer->head)
pkt_buffer->tail = NULL;
av_freep(&pktl); return 0;
}
int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, int error_count, int pict_type)
{
uint8_t *side_data;
size_t side_data_size; int i;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.