mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-11-01 12:07:31 +01:00
The ffmpeg submodule held prebuilt libraries for every platform next to the sources (about 1.5 GB checked out), and nothing uses those any more. Only the needed sources are copied in, from the submodule's commit, along with every header and template they include. The path is new, so checking out commits on either side of this works. It's also cut down to what PPSSPP uses: the H.264, AAC, MP3, ATRAC3 and ATRAC3+ decoders, the H.264 parser, the demuxers as before, and the FFV1 encoder, AVI muxer and file protocol for AVI dumping. config.h takes its CONFIG_ values from FFmpeg 3.0.2's own configure run with just those enabled. The raw H.264 demuxer stays even though nothing opens raw H.264: probing PSMF data uses it to identify the video stream's codec, which otherwise comes out as none. On top of that: - The files nothing links (configure would build them, but they're never pulled out of the static library, going by the GCC link map) are left out: mostly libavutil's crypto and hashing and the alternative DCT/IDCT/FFT versions. - libswresample isn't built, now that nothing uses it. - The H.264 decoder only does 8-bit video, which is all the PSP has. The SPS parser rejects any other bit depth, and the DSP files no longer build their 9- to 16-bit variants, which the linker kept because the init functions pick one by bit depth at run time. That's 160 files to compile instead of 277, and 391 of FFmpeg's vendored, about 5.8 MB. The README in ext/ffmpeg has what was done, the PPSSPP patches in the copy, how to add a component, and the tradeoffs. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
117 lines
3.6 KiB
C
117 lines
3.6 KiB
C
/*
|
|
* MPEG2 transport stream defines
|
|
* Copyright (c) 2003 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
|
|
*/
|
|
|
|
#ifndef AVFORMAT_MPEGTS_H
|
|
#define AVFORMAT_MPEGTS_H
|
|
|
|
#include "avformat.h"
|
|
|
|
#define TS_FEC_PACKET_SIZE 204
|
|
#define TS_DVHS_PACKET_SIZE 192
|
|
#define TS_PACKET_SIZE 188
|
|
#define TS_MAX_PACKET_SIZE 204
|
|
|
|
#define NB_PID_MAX 8192
|
|
#define MAX_SECTION_SIZE 4096
|
|
|
|
/* pids */
|
|
#define PAT_PID 0x0000
|
|
#define SDT_PID 0x0011
|
|
|
|
/* table ids */
|
|
#define PAT_TID 0x00
|
|
#define PMT_TID 0x02
|
|
#define M4OD_TID 0x05
|
|
#define SDT_TID 0x42
|
|
|
|
#define STREAM_TYPE_VIDEO_MPEG1 0x01
|
|
#define STREAM_TYPE_VIDEO_MPEG2 0x02
|
|
#define STREAM_TYPE_AUDIO_MPEG1 0x03
|
|
#define STREAM_TYPE_AUDIO_MPEG2 0x04
|
|
#define STREAM_TYPE_PRIVATE_SECTION 0x05
|
|
#define STREAM_TYPE_PRIVATE_DATA 0x06
|
|
#define STREAM_TYPE_AUDIO_AAC 0x0f
|
|
#define STREAM_TYPE_AUDIO_AAC_LATM 0x11
|
|
#define STREAM_TYPE_VIDEO_MPEG4 0x10
|
|
#define STREAM_TYPE_VIDEO_H264 0x1b
|
|
#define STREAM_TYPE_VIDEO_HEVC 0x24
|
|
#define STREAM_TYPE_VIDEO_CAVS 0x42
|
|
#define STREAM_TYPE_VIDEO_VC1 0xea
|
|
#define STREAM_TYPE_VIDEO_DIRAC 0xd1
|
|
|
|
#define STREAM_TYPE_AUDIO_AC3 0x81
|
|
#define STREAM_TYPE_AUDIO_DTS 0x82
|
|
#define STREAM_TYPE_AUDIO_TRUEHD 0x83
|
|
#define STREAM_TYPE_AUDIO_EAC3 0x87
|
|
|
|
typedef struct MpegTSContext MpegTSContext;
|
|
|
|
MpegTSContext *avpriv_mpegts_parse_open(AVFormatContext *s);
|
|
int avpriv_mpegts_parse_packet(MpegTSContext *ts, AVPacket *pkt,
|
|
const uint8_t *buf, int len);
|
|
void avpriv_mpegts_parse_close(MpegTSContext *ts);
|
|
|
|
typedef struct SLConfigDescr {
|
|
int use_au_start;
|
|
int use_au_end;
|
|
int use_rand_acc_pt;
|
|
int use_padding;
|
|
int use_timestamps;
|
|
int use_idle;
|
|
int timestamp_res;
|
|
int timestamp_len;
|
|
int ocr_len;
|
|
int au_len;
|
|
int inst_bitrate_len;
|
|
int degr_prior_len;
|
|
int au_seq_num_len;
|
|
int packet_seq_num_len;
|
|
} SLConfigDescr;
|
|
|
|
typedef struct Mp4Descr {
|
|
int es_id;
|
|
int dec_config_descr_len;
|
|
uint8_t *dec_config_descr;
|
|
SLConfigDescr sl;
|
|
} Mp4Descr;
|
|
|
|
/**
|
|
* Parse an MPEG-2 descriptor
|
|
* @param[in] fc Format context (used for logging only)
|
|
* @param st Stream
|
|
* @param stream_type STREAM_TYPE_xxx
|
|
* @param pp Descriptor buffer pointer
|
|
* @param desc_list_end End of buffer
|
|
* @return <0 to stop processing
|
|
*/
|
|
int ff_parse_mpeg2_descriptor(AVFormatContext *fc, AVStream *st, int stream_type,
|
|
const uint8_t **pp, const uint8_t *desc_list_end,
|
|
Mp4Descr *mp4_descr, int mp4_descr_count, int pid,
|
|
MpegTSContext *ts);
|
|
|
|
/**
|
|
* Check presence of H264 startcode
|
|
* @return <0 to stop processing
|
|
*/
|
|
int ff_check_h264_startcode(AVFormatContext *s, const AVStream *st, const AVPacket *pkt);
|
|
|
|
#endif /* AVFORMAT_MPEGTS_H */
|